Задаётесь вопросом, какой тип аннотирования изображений лучше всего подойдёт для вашего проекта?
Аннотирование изображений — одна из наших основных специальностей, и мы с радостью поделимся информацией о плюсах и минусах каждого типа: от простых ограничивающих прямоугольников до полномасштабной попиксельной семантической сегментации.
Учтите, что это руководство относится только к типу визуального аннотирования, но на уровне изображений или объектов можно создавать дополнительные метаданные. К ним относятся строки, числа, булевы значения, выбор одного или нескольких вариантов, и т.п. Например, ограничивающий прямоугольник для автомобилей в сцене может содержать такие метки, как цвет, производителя, регистрационный номер и т.д.
1. Ограничивающий прямоугольник
При аннотировании ограничивающими прямоугольниками прямоугольник необходимо отрисовывать максимально близко к границам каждого объекта. Выходными данными обычно являются координаты x min/y min и x max/y max, но в зависимости от инструмента они могут меняться. Задача аннотирования заключается в том, чтобы помочь нам в обнаружении и распознании различных классов объектов (например, «тарелка», «вилка» или «капкейк»).
Плюсы: довольно легко и быстро рисуются
Минусы: в некоторых случаях прямоугольник может включать в себя множество не принадлежащих объекту пикселей (фон или окружающие его объекты, например, когда капкейк и вилка расположены рядом друг с другом). При диагональном расположении объектов, например, вилки, может быть полезен формат Rotated Rect (который в дополнение к координатам x и y содержит угол поворота прямоугольника).
Рейтинг: 2
2. Многоугольник
Многоугольники — гораздо более точный способ аннотирования объектов. Аннотации могут содержать только те пиксели, которые принадлежат объектам, однако их отрисовка происходит медленнее. Выходными данными обычно являются последовательности координат x, y всех точек, составляющих многоугольник. Распознаватель пончиков, обученный на многоугольниках, а не на прямоугольниках, будет работать гораздо лучше.
Плюсы: точнее, чем прямоугольники
Минусы: используемый инструмент должен поддерживать отверстия, чтобы работать с объектами наподобие пончиков и кренделей. Выходные данные в таком случае разделяются на внешние и внутренние координаты. При наложении многоугольников помните о порядке объектов и о том, какой многоугольник окажется наверху.
Рейтинг: 3
3. Точки
Аннотирование точками (также известное как landmark annotation) очень полезно для точного указания отдельных пикселей на изображении, а также для подсчёта объектов, как в примере с вишнями. Выходными данными обычно являются единственные координаты x, y, но точки могут иметь и больший диаметр.
Плюсы: проще всего рисовать и их можно отрисовывать даже при помощи очень простых инструментов наподобие Paint при условии уникальности цвета точки. Очень полезно для подсчёта объектов в группе, например, людей в толпе.
Минусы: требует максимальной точности и увеличения для указания точных пикселей изображения.
Рейтинг: 2
4. Ключевые точки
Когда нам нужно отслеживать формы определённых объектов, использование ключевых точек является отличным способом сравнения составляющих скелет узлов и рёбер. Наиболее просто такое аннотирование применять с фигурами людей или чертами лиц, но в нашем примере оно показано на грушах: каждая груша имеет десять последовательных точек, отмечающих её основные очертания и мы можем подстроить их под форму каждого объекта. Выходными данными являются координаты x, y пронумерованных ключевых точек, всегда находящихся в одном порядке.
Плюсы: после настройки скелета в инструменте аннотирования достаточно просто изменять узлы, поэтому аннотирование становится гораздо проще. Также это полезно для аннотаторов, потому что не позволяет забыть какие-то из узлов в последовательности, что возможно, если их каждый раз приходится вставлять вручную.
Минусы: для применимости этого типа аннотирования объекты должны иметь одинаковую структуру.
Рейтинг: 4
5. Ломаные
Аннотирование линиями отлично подходит, когда нам нужно отслеживать форму, необязательно имеющую начало и конец в одном месте (как в случае многоугольников). Когда линии состоят из нескольких точек, каждая из которых записывается координатами x, y, мы имеем дело с ломаными. Наиболее распространённым способом применения является дорожная разметка, но чтобы продолжить примеры с едой, в анимации показано, как сравнивать кривизну булочек разных гамбургеров.
Плюсы: очень полезно для специфических случаев применения, при которых необходимо отслеживать линию или кривую (распознавание проводов, полос движения и т.п.).
Минусы: работает только когда линия на изображении близка к ширине в один пиксель. Если она шире, то для учёта ширины может понадобиться многоугольник.
Рейтинг: 2
6. Окружности
Когда объекты имеют идеально круглую форму, то уместным будет аннотирование окружностями, потому что это сэкономит много времени по сравнению с отрисовкой окружностей вручную или при помощи многоугольников. В случае яиц аннотирование их при помощи многоугольника было бы гораздо менее точным, чем использование круга.
Плюсы: отлично подходит для аннотирования таких объектов, как мячи, монеты, дорожные знаки, бутылочные крышки, а также других предметов, имеющих округлую форму.
Минусы: если объекты неидеально круглые, этот тип аннотирования может оказаться не особо полезным.
Рейтинг: 2
7. Эллипсы
Когда объекты не идеально круглые, но имеют однородную форму, будет логично использовать эллипсы. Например, после приготовления яиц из предыдущего примера для их точного аннотирования можно использовать эллипс.
Плюсы: простой способ аннотирования неидеальных кругов, для которых не подойдёт аннотирование кругами. Тоже быстрее, чем отрисовка многоугольника вокруг каждого объекта.
Минусы: эллипсы должны быть выровнены по направлению и ширине, что может потребовать времени. К тому же аннотирование невозможно будет использовать, если объекты являются не совсем эллипсами.
Рейтинг: 2
8. Кубоиды
Что если нам нужно разметить объекты в 3D-пространстве и мы знаем их поворот или расстояние до камеры? Мы можем нарисовать кубоид, начав с дальней стороны объекта и растянув его до ближней к нам, как в случае этих блинчиков, кувшина и вилки. Выходными данными будет файл JSON с координатами первого ограничивающего прямоугольника (дальняя сторона) и второго ограничивающего прямоугольника (ближняя сторона).
Плюсы: это отличный способ аннотирования объектов в пространстве, особенно являющихся визуальными изображениями в сочетании с данными лидара или другими пространственными данными.
Минусы: может быть сложнее в отрисовке, особенно если объекты имеют неровную форму, чем-то закрыты или обрезаны. Требует даже больше работы, чем семантическая сегментация. Кроме того, немногие инструменты поддерживают аннотирование кубоидами, поэтому вам придётся выбирать подходящий. Возможно, стоит изучить наш обзор инструментов для аннотирования.
Рейтинг: 4
9. Семантическая сегментация
Семантическая сегментация — это тип попиксельной сегментации, при которой каждому пикселю изображения присваивается класс. В показанном выше примере такими классами являются «клубника», «арбуз», «дыня», «морковь» и все остальные фрукты и овощи, которые вы видите на изображении, а также класс «фон», закрывающий все остальные пиксели. Отдельные экземпляры класса (например, отдельные ягоды) не выделяют, а классифицируют по типу фрукта или овоща, к которому они принадлежат. Выходными данными чаще всего является PNG-маска с цветами каждого класса. Однако это может быть и файл JSON с объектами битовых карт в виде строк, закодированных в base64.
Плюсы: сверхточное аннотирование, поскольку каждому пикселю должен быть присвоен какой-то класс. Выполняет интерпретирование пикселей изображения, что сильно отличает его от векторного аннотирования (примеры 1–8), в которых выполняется обнаружение объектов.
Минусы: для сегментирования изображения требуется много усилий. К счастью, существует довольно много инструментов, поддерживающих суперпиксельное аннотирование, разделяющее изображение на крупные тайлы на основании распознавания краёв с настраиваемым уровнем детализации. Поэтому пользователю достаточно раскрасить суперпиксели. Также это можно сделать при помощи многоугольников.
Рейтинг: 4
10. Сегментация экземпляров
Сегментация экземпляров похожа на предыдущий тип, но решает другую задачу: что если мы хотим сегментировать каждый вид еды отдельно и знать, сколько всего объектов к нему относится, одновременно зная класс, к которому они относятся? Мы не только сегментируем тыквы и размечаем их как класс «тыква», но и как отдельные экземпляры класса «тыква», чтобы знать, какой является номером один, два и так далее. Выходными данными тоже являются PNG-маска или файл JSON с координатами/битовой картой.
Плюсы: это самый точный тип аннотирования, позволяющий нам узнать, сколько экземпляров каждого класса находится на изображении.
Минусы: требует даже больше работы, чем семантическая сегментация. Например, если одна тыква накладывается на другую, то при семантической сегментации мы пометим их вместе как одну общую массу класса «тыква», а при сегментации экземпляров нам придётся отрисовывать каждый из них по отдельности.
Рейтинг: 4