DINOv2 для сегментации пользовательского набора данных Подробное руководство.

Подробное руководство по использованию DINOv2 для сегментации пользовательского набора данных

После YOLOv8 и SAM (Segment Anything Model), наиболее ожидаемой моделью компьютерного зрения является DINOv2. Мотивацию для этого руководства я получил из этого репозитория на GitHub: https://github.com/NielsRogge/Transformers-Tutorials/tree/master, во время выполнения кода я обнаружил 2 ошибки из-за этого, мне доставляли неприятные ошибки при обучении модели (в его руководстве он останавливал процесс обучения после некоторых шагов и возникали ошибки между ними и в последнем шаге обучения). Весь код взят из его ноутбука (за исключением некоторых изменений 🙂 ), а вот план атаки:

План атаки

  1. Введение DINOv2
  2. Установка библиотек
  3. Загрузка набора данных
  4. Создание набора данных PyTorch
  5. Создание загрузчиков данных PyTorch
  6. Определение модели
  7. Обучение модели

Введение DINOv2

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

Рисунок 1: Модель полностью работает в этом руководстве. (выходное изображение, когда модель обучается всего одну эпоху) (изображение автора)

Рисунок 1 иллюстрирует этот подход, в этом руководстве я просто обучаю линейное преобразование (слой CNN размером 1*1) поверх замороженного основания DINOv2. Это преобразование сопоставит особенности (встраивания патчей) с логитами (ненормализованные оценки, выходные данные нейронных сетей, указывающие на предсказания модели). В контексте семантической сегментации логиты будут иметь форму (batch_size, num_classes, высота и ширина), соответствующую предсказанному классу для каждого пикселя.

Установка библиотеки

Вот две основные библиотеки:

!pip install -q git+https://github.com/huggingface/transformers.git datasets!pip install -q evaluate

Загрузка набора данных

Далее давайте загрузим набор данных сегментации изображений. В этом случае мы будем использовать набор данных Foodseg.

from datasets import load_dataset#datasetdataset = load_dataset("EduardoPacheco/FoodSeg103")#lables…