В этом сообщении блога мы рассмотрим процесс тонкой настройки SAM (Segment-Anything-Model), модели семантической сегментации изображений. Мы углубимся в причины тонкой настройки, какие доступные стратегии и я поделюсь советами и предостережениями из моих собственных экспериментов.

SAM — это мощная модель семантической сегментации изображений, предназначенная для точного прогнозирования масок на уровне пикселей для широкого диапазона объектов на изображении. Он состоит из трех частей:

  1. Кодировщик изображений — мощная магистраль преобразователя зрения, которая генерирует функции изображения.
  2. Кодировщик подсказок — облегченный модуль встраивания, который создает разреженные и плотные вложения из входных данных подсказок (точек, прямоугольников и/или масок).
  3. Декодер маски — декодер, который использует выходные данные кодировщика изображений и кодировщика подсказок для создания масок.

SAM работает в двух основных режимах. Первый режим — это автоматическое создание маски (AMG), в котором модель создает предложения для маски, а затем пытается сегментировать все области изображения на немаркированные полигоны. Другой режим управляется подсказками, который обычно принимает ограничивающие рамки или точки в качестве входных данных подсказки вместе с изображением и выводит многоугольник для каждой подсказки.

Наконец, SAM выпускается в трех различных вариантах: базовый,большой и огромный. около 636 миллионов параметров. Создание прогнозов занимает больше времени, но создает маски гораздо лучшего качества по сравнению с меньшими моделями.

Хотя SAM сам по себе достаточно устойчив к любой модели данных зрения, его точная настройка может оказаться полезной по двум основным причинам:

  1. Чтобы адаптировать модель SAM к новым областям, таким как медицинские изображения или дистанционное зондирование (ознакомьтесь с этим пакетом segment-geospatial).
  2. Использовать кодировщик изображений SAM в качестве основы для задачи семантической сегментации нижестоящего уровня.

Полная точная настройка SAM. Этот подход в основном полезен для ускорения внутреннего процесса маркировки данных в случаях, когда исходный SAM не работает должным образом. Однако для этого требуются значительные ресурсы для обучения, поскольку даже базовая модель имеет около 100 миллионов параметров, а для более крупных моделей требуются большие объемы данных даже для точной настройки. Наконец, это имеет смысл только в том случае, если во время вывода будут доступны подсказки о полях/точках, которые могут быть получены из процесса аннотирования данных или модели обнаружения объектов/ключевых точек.

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

Советы и предостережения

машины с графическим процессором. По словам авторов, они использовали пакет размером 128, распределенный по 128 графическим процессорам. Вряд ли возможно разместить более 1 образца на партию на одном графическом процессоре даже в базовом варианте, поэтому для запуска процесса обучения необходимо несколько машин с графическим процессором. К счастью, такие пакеты, как ускорение, обеспечивают беспрепятственный доступ к распределенному обучению.

Фиксированный размер изображения. Преобразователи зрения используют слой встраивания патчей, который создает карты объектов с фиксированными пространственными размерами (H // размер_заплаты, W // размер_заплаты). Если мы хотим использовать предварительно обученную модель для начальных весов, мы должны придерживаться исходного размера изображения (который равен 1024).

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

Накопление градиента. Когда количество доступных графических процессоров меньше 128, accelerate может помочь с искусственным увеличением размера пакета с помощью метода, называемого градиентным накоплением. В двух словах, он будет выполнять определенное количество проходов через загрузчик данных, прежде чем сделать шаг оптимизации. Большой размер партии должен привести к более стабильному обучению.

Обучайте с подсказками, оценивайте без них. Если вы решите выполнить полную точную настройку SAM без использования подсказок, вы можете преобразовать существующие аннотации маски/точки/поля в подсказки для набора поездов. И наоборот, не передавайте никаких подсказок при оценке проверочных или тестовых наборов и проверяйте, улучшается ли метрика с течением времени. С большими и огромными вариантами он должен расти, но остерегайтесь неиспользуемого кодировщика подсказок в своем выводе. Также может быть целесообразно вообще заморозить кодировщик подсказок.

Заключение

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

Если вы хотите обучить Unet с кодировщиком изображений SAM, ознакомьтесь с моей реализацией с пакетом segmentation-models-pytorch (на момент написания этой статьи он все еще находится на рассмотрении, запустите pip install git+https://github.com/Rusteam/segmentation_models.pytorch.git@sam, чтобы сделать его доступным). Если вы хотите запустить SAM на своих собственных снимках, я рекомендую ознакомиться с этой статьей от Jacob Marks о том, как использовать SAM с пакетом fiftyone (скоро будет интеграция модели зоопарка).

Дайте мне свое мнение и подпишитесь, чтобы получать уведомления о появлении моих новых сообщений.