Instance Segmentation — подробный гайд по разметке

Успех проектов в области машинного обучения (ML) и компьютерного зрения (CV) во многом зависит от качества используемых данных. Однако немаловажен и еще один фактор: каким способом эти данные будут размечены.

Так, некоторые проекты предполагают использование данных с относительно простой разметкой, а другие с очень точной и детальной — такой, какой является Instance Segmentation.

Что такое Instance Segmentation?

Instance Segmentation — это вид разметки данных, используемый для выделения на изображении точных границ нескольких различных объектов, принадлежащих к одному классу. Для этого каждому объекту присваивается маска — графическая область, которая точно повторяет его форму, и метка — уникальный идентификатор, отличающий объект от других того же класса.

Например, если на изображении находится несколько автомобилей, разметка Instance Segmentation будет выглядеть так:

Машины с instance segmentation

Обратите внимание, что каждому автомобилю здесь присвоены маски разных цветов, а также уникальные метки: «автомобиль 1», «автомобиль 2» и т. д.

Важной особенностью Intstance Segmentation является то, что этот вид разметки позволяет определить границы объектов одного класса, даже когда они находятся очень близко или частично перекрывают друг друга.

Чем отличается Instance Segmentation от других видов разметки данных?

Чтобы лучше понять, как работает Instance Segmentation, сравним её с другими видами разметки данных, такими как Object Detection, Semantic Segmentation и Panoptic Segmentation. Это важный момент, поскольку данные виды разметки тоже служат для обнаружения объектов на изображении, но при этом имеют свою специфику.

Предположим, нам нужно разметить изображение, на котором находятся люди, идущие по улице. Объект нашего интереса — люди.

1. Object Detection и Instance Segmentation

Самый простой способ выделить людей на изображении — это использовать Object Detection.

Этот вид разметки позволит нам определить объекты на изображении и заключить их в рамки (bounding boxes). Каждый объект, попавший в такую рамку, будет отнесен к определенному классу (в нашем случае это класс «человек»). Но есть нюанс: рамка не позволяет выделить контуры объекта и задаёт лишь примерную область, где он находится, захватывая при этом детали окружения. Кроме того, если объекты находятся близко друг к другу, эти рамки будут пересекаться.

Разница object detection и instance segmentation

Instance Segmentation в отличие от Object Detection выделяет точные контуры каждого объекта с помощью масок и тем самым предоставляет полную информацию об их местоположении, позах и других характеристиках.

2. Semantic Segmentation и Instance Segmentation

Semantic Segmentation тоже позволит нам определить контуры людей с помощью маски, но эта маска будет единственной для всех объектов данного класса. Всем объектам будет присвоена одинаковая метка — «человек».

В свою очередь Instance Segmentation даёт возможность выделить каждого человека с помощью отдельных масок и меток.

Разница semantic segmentation и instance segmentation

Уже сейчас можно сделать однозначный вывод: Instance Segmentation — это более информативный вид разметки данных, чем Object Detection и Semantic Segmentation. Но это ещё не всё.

3. Panoptic Segmentation и Instance Segmentation

Panoptic Segmentation объединяет Semantic Segmentation и Instance Segmentation. С помощью этого вида разметки мы сможем выделить всех людей как отдельные объекты (как в случае с Instance Segmentation), а также выделить фоновые объекты, не разделяя их на отдельные экземпляры (как в случае с Semantic Segmentation). 

Разница panoptic segmentation и instance segmentation

Важно сказать, что несмотря на различия в уровне детализации, каждый из видов разметки по-своему полезен в конкретных задачах.

Как получить разметку Instance Segmentation?

Если ваш проект предполагает использование данных, размеченных с помощью Instance Segmentation, есть минимум 5 способов как их получить:

1. Ручная разметка

Включает в себя работу разметчиков (аннотаторов), которые вручную создают маски и метки для объектов на изображении. Этот метод обеспечивает высокую точность разметки и особенно полезен, когда необходимо создать высококачественные данные для обучения моделей, используемых, например, в медицине. Однако он требует значительных временных затрат.

2. Автоматическая разметка

Использует алгоритмы машинного обучения для полной автоматизации процесса разметки. Хотя этот метод существенно сокращает затрачиваемое время, точность разметки может варьироваться в зависимости от сложности изображений и выбранной модели. Например, такие модели, как Mask R‑CNN, YOLACT и SOLO хорошо справляются с общей задачей сегментации, но могут давать неточные результаты в работе со сложными или нестандартными объектами.

3. Полуавтоматическая разметка

Сочетает в себе автоматизацию процесса разметки и ручную корректировку. Выбранная модель предварительно размечает изображения, а аннотаторы затем проверяют и корректируют результаты. Такой способ разметки часто используется, когда нужно сбалансировать два параметра: скорость и точность.

4. HITL (Human-in-the-Loop)

Комбинирует преимущества автоматизации и человеческой экспертизы. В отличие от полуавтоматической разметки, аннотатор не только проверяет и корректирует ошибки в разметке, но и передаёт эти исправления обратно модели для дальнейшего дообучения. Это позволяет улучшать качество работы модели с каждым новым циклом разметки, что особенно полезно в проектах, где объекты сложны для автоматического распознавания.

5. Краудсорсинг

Позволяет распределять задачу разметки среди множества аннотаторов через специализированные платформы (например, Toloka AI, Appen, Amazon Mechanical Turk). Краудсорсинг может ускорить процесс разметки, но требует проверки готовых результатов для минимизации ошибок. Лучше всего подходит для проектов, где требуется разметка большого объёма данных и при этом нет строгих требований к качеству.

Гайд по разметке Instance Segmentation в CVAT

Шаг 1: Создание проекта

Пройдите авторизацию в CVAT и откройте вкладку Project на главной странице. Нажмите на кнопку + и выберите Create a new project, чтобы создать новый проект.

Перед вами откроется окно проекта. Присвойте ему название, которое будет его описывать.

Затем нажмите на кнопку Add label. В открывшемся разделе вы сможете выбрать инструмент для разметки (для Instance Segmentation это Polygon) и настроить лейбл. Лейбл включает название метки и цвет маски, которые будут присвоены объекту. Поскольку Instance Segmentation предполагает, что каждому объекту будут присвоены уникальные метки и маски, вам необходимо создать несколько лейблов для каждого объекта на изображении.

Например, в этом гайде мы покажем, как разметить изображение, на котором есть 2 груши и 2 яблока, поэтому мы создали следующие лейблы:

  • Яблоко 1 — Polygon — Розовый.
  • Яблоко 2 — Polygon — Зеленый.
  • Груша 1 — Polygon — Желтый.
  • Груша 2 — Polygon — Оранжевый.

После того, как вы настроили лейблы, нажмите Submit & Open.

Шаг 2: Создание задачи

Теперь можно перейти к созданию задачи, для этого нажмите на + и выберите Create a new task

Присвойте задаче название, а затем загрузите изображения, которые нужно разметить. Вы можете загрузить их в формате ZIP или добавлять по отдельности.

После загрузки снова нажмите Submit & Open.

Шаг 3: Разметка изображения

Перед вами откроется основной интерфейс разметки в CVAT. Чтобы начать разметку, выберите инструмент Polygon в боковой панели и укажите лейбл, который будет соответствовать выбранному вами объекту.

С помощью инструмента Polygon начните обводить контур объекта на изображении. Вы можете делать это с помощью кликов, нажимая ЛКМ, или плавно обводить объект с помощью курсора, зажав Shift. Для того, чтобы удалить неверно созданную точку, нажмите ПКМ. 

Когда вы закончили разметку объекта, нажмите в верхней панели Done или горячую клавишу N, чтобы замкнуть контур и создать маску.

Повторите этот процесс со всеми объектами на изображении, меняя лейблы.

Шаг 4: Сохранение

После завершения разметки изображения не забудьте сохранить изменения с помощью кнопки Save.

Шаг 5: Экспорт

Чтобы экспортировать результаты, нажмите Menu Eхport job dataset и выберите нужный формат для сохранения. 

Готово!

Теперь вы можете использовать полученные аннотации для обучения ML-моделей.

Где используется Instance Segmentation?

Instance Segmentation применяется в самых разных сферах, где точная и детализированная разметка объектов является критически важной для решения задач машинного обучения и компьютерного зрения.

Медицина

Instance Segmentation широко используется в медицине, так как позволяет эффективно анализировать различные анатомические структуры, патологические изменения и ткани на медицинских изображениях. Например, Instance Segmentation применяется для выделения опухолей на изображениях, полученных с помощью КТ и МРТ. Это помогает врачам точнее определять размеры и границы новообразований, а также отслеживать динамику их роста или уменьшения в ответ на лечение.

Сельское хозяйство

В сельском хозяйстве Instance Segmentation применяется для обнаружения болезней растений, идентификации сорняков и вредителей, а также мониторинга состояния полей — для последнего обычно используются аэрофотоснимки, полученные с дронов. Точные данные помогают специалистам оптимизировать использование ресурсов, таких как вода и удобрения, что способствует поддержанию устойчивых ESG-практик.

Производство

В сфере производства Instance Segmentation используется для обработки изображений товаров и выявления на их поверхностях мельчайших дефектов: трещин, царапин, сколов и других визуальных повреждений. Применение Instance Segmentation позволяет автоматизировать процесс контроля качества продукции и предотвращать появление бракованных изделий на рынке.

Беспилотный автотранспорт

В системах беспилотного вождения Instance Segmentation помогает точно идентифицировать и различать автомобили, пешеходов, велосипедистов и другие объекты на дороге. Это дает возможность беспилотным автомобилям эффективно планировать манёвры и избегать столкновений.

Розничная торговля

В розничной торговле Instance Segmentation используется для автоматической проверки наличия товаров на полках, что существенно сокращает время, затрачиваемое на инвентаризацию, и помогает избежать ситуаций, когда покупатель не смог приобрести необходимый ему товар.

Ключевые выводы

Instance Segmentation — это вид разметки данных, который предоставляет обширную информацию о каждом объекте на изображении. Она важна для обеспечения качественных данных, которые могут использоваться для обучения ML-моделей в таких сферах, как медицина, сельское хозяйство, производство, проектирование беспилотных автомобилей, розничная торговля.

Сильные стороны Instance Segmentation:

  • позволяет сегментировать объекты в рамках одного класса;
  • используется в анализе сложных сцен, где объекты одного класса могут перекрываться или иметь разные формы и размеры.

Однако ручная разметка Instance Segmentation — это трудоёмкая задача, которая требует внимательности, аккуратности и понимания особенностей объектов, представленных на изображении.

Если же вы планируете автоматизировать разметку в крупном проекте, лучше всего совмещать этот процесс с ручной проверкой для исключения ошибок.

Ваша заявка успешно отправлена!

Мы скоро свяжемся с вами для обсуждения деталей проекта