Разметка полигонами для задач сегментации
Настройка инструментов рисования полигонов в Potato для сегментации изображений: советы по сложным формам, перекрывающимся областям, многоклассовым полигонам и экспорту в COCO.
Полигоны позволяют обвести границу объекта пиксель за пикселем — именно это нужно семантической сегментации и сегментации экземпляров. В этом руководстве разбираются конфигурация, приёмы рисования и что делать, когда формы становятся неудобными.
Полигоны против ограничивающих рамок
| Полигоны, когда | Рамки, когда |
|---|---|
| Нужны точные границы | Достаточно грубой локализации |
| Формы объектов неправильные | Объекты примерно прямоугольные |
| Обучаете модели сегментации | Обучаете модели детекции |
| Объекты перекрываются | Объекты не перекрываются |
| Нужна высокая точность | Важнее скорость |
Базовая настройка полигонов
annotation_task_name: "Image Segmentation"
data_files:
- "data/images.json"
annotation_schemes:
- annotation_type: image_annotation
tools: [polygon]
name: segments
description: "Draw polygons around each object"
labels:
- name: road
color: "#808080"
- name: sidewalk
color: "#F5F5DC"
- name: building
color: "#8B4513"
- name: vegetation
color: "#228B22"
- name: sky
color: "#87CEEB"
- name: vehicle
color: "#FF6B6B"
- name: person
color: "#4ECDC4"Как рисовать полигоны
Основной порядок
- Выберите метку на панели инструментов
- Кликами расставьте вершины вокруг объекта
- Двойным кликом или клавишей Enter замкните полигон
- Перетаскивайте вершины, чтобы их поправить
- Кликните по ребру, чтобы добавить точку
Горячие клавиши
В Potato есть сочетания для редактирования полигонов:
- Enter — замкнуть текущий полигон
- Escape — отменить рисование или снять выделение
- Delete — удалить выделенную вершину или полигон
- +/− — приблизить и отдалить
- Пробел с перетаскиванием — двигать изображение
Когда всё усложняется
Перекрывающиеся объекты
Когда объекты перекрываются, разметчик просто рисует несколько перекрывающихся полигонов. Potato хранит каждый отдельно, так что вы получаете разметку на уровне экземпляров даже там, где объекты загораживают друг друга.
Неудобные границы
Для объектов с изломанными, изогнутыми границами:
- Ставьте больше вершин на изгибах, чтобы форма вышла точной
- Приблизьте изображение, прежде чем обводить мелкие детали
- Идите по периметру по порядку, а не скачками
- Потом переключитесь в режим правки и подвиньте вершины на место
Настройка семантической сегментации
Для сегментации изображения целиком:
annotation_task_name: "Semantic Segmentation"
data_files:
- "data/images.json"
annotation_schemes:
- annotation_type: image_annotation
tools: [polygon]
name: semantic_segments
description: "Segment the entire image"
labels:
- name: background
color: "#000000"
- name: road
color: "#808080"
- name: sidewalk
color: "#F5F5DC"
- name: building
color: "#8B4513"
- name: vegetation
color: "#228B22"
- name: sky
color: "#87CEEB"
- name: person
color: "#4ECDC4"
- name: vehicle
color: "#FF6B6B"Настройка сегментации экземпляров
Для отдельных экземпляров объектов:
annotation_task_name: "Instance Segmentation"
data_files:
- "data/images.json"
annotation_schemes:
- annotation_type: image_annotation
tools: [polygon]
name: instances
description: "Draw polygons around each object instance"
labels:
- name: person
color: "#4ECDC4"
- name: car
color: "#FF6B6B"
- name: dog
color: "#FFEAA7"Каждый полигон хранится отдельной разметкой, так что вы можете отслеживать отдельные экземпляры внутри каждого класса объектов.
Полный пример конфигурации
annotation_task_name: "Cityscapes-style Segmentation"
data_files:
- "data/urban_scenes.json"
annotation_schemes:
- annotation_type: image_annotation
tools: [polygon]
name: segments
description: "Segment all objects following Cityscapes protocol"
labels:
# Flat
- name: road
color: "#804080"
- name: sidewalk
color: "#F423E8"
# Construction
- name: building
color: "#464646"
- name: wall
color: "#666666"
- name: fence
color: "#BE9999"
# Nature
- name: vegetation
color: "#6B8E23"
- name: terrain
color: "#98FB98"
# Sky
- name: sky
color: "#4682B4"
# Human
- name: person
color: "#DC143C"
- name: rider
color: "#FF0000"
# Vehicle
- name: car
color: "#00008B"
- name: truck
color: "#000046"
- name: bus
color: "#003C64"
- name: motorcycle
color: "#0000E6"
- name: bicycle
color: "#770B20"Формат вывода
Разметка полигонами попадает в вывод с координатами каждой вершины:
{
"id": "img001",
"annotations": {
"segments": [
{
"label": "road",
"points": [[0, 600], [100, 580], [200, 590], [0, 600]]
},
{
"label": "car",
"points": [[450, 400], [520, 400], [520, 480], [450, 480]]
}
]
}
}Советы по аккуратным полигонам
- Приближайте изображение вдвое и больше, когда обводите детальные границы.
- Выучите горячие клавиши. Это гораздо быстрее, чем тянуться к панели инструментов.
- Сначала набросайте грубый контур, потом вернитесь и уточните его.
- Обходитесь наименьшим числом вершин, которое всё ещё передаёт форму. Больше не значит лучше.
- Делайте перерывы. Детальная работа с полигонами выматывает быстро.
Что дальше
- Сочетайте это с ограничивающими рамками в смешанных сценариях
- Настройте контроль качества для сегментации
- Изучите сегментацию видео для временных данных
Всё, что умеет тип разметки изображений (полигоны, рамки и остальные инструменты рисования), описано в исходной документации.
Полная документация по полигонам — в разметке изображений.