Обучайте и развертывайте пользовательские модели обнаружения объектов без единой строки кода.

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

Оглавление

  1. "Введение"
  2. ЭкоАссист
  3. Учебник
    Шаг 1 — Аннотирование
    Шаг 2 — Обучение
    Шаг 3 — Оценка
    Шаг 4 — Развертывание
    Шаг 5 — Постобработка

Введение

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

ЭкоАссист

Несмотря на то, что в Интернете предлагается множество учебных пособий по обнаружению объектов, ни одно из них не предлагает автоматизированный метод — без необходимости написания кода. Когда я сам начинал с моделей обнаружения объектов, я перепробовал множество туториалов, которые обычно заканчивались какой-то ошибкой. В этом руководстве я попытался сделать обнаружение объектов как можно более доступным, создав приложение с открытым исходным кодом, размещенное на GitHub, под названием EcoAssist [1]. Изначально я создал EcoAssist как платформу для помощи экологическим проектам, но она будет обучать и развертывать любую модель обнаружения объектов. Если вы не эколог, вам просто придется игнорировать предустановленную модель MegaDetector [2], а остальное будет точно таким же. EcoAssist является бесплатным для всех. Все, о чем я прошу, это процитировать соответственно:

ван Лунтерен, П. (2022). EcoAssist: платформа без кода для обучения и развертывания моделей обнаружения объектов YOLOv5. https://doi.org/10.5281/zenodo.7223363

Руководство

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

Прежде чем мы сможем начать, нам нужно установить программное обеспечение EcoAssist. Посетите https://github.com/PetervanLunteren/EcoAssist и следуйте инструкциям. См. раздел Часто задаваемые вопросы 1, чтобы узнать, на каких настройках лучше всего тренироваться.

Шаг 1 — Аннотировать

Первая часть обнаружения объектов также является самой утомительной. Чтобы компьютер мог распознать наш объект, мы должны идентифицировать каждый его экземпляр на изображениях — процесс, известный как аннотация. Если у вас нет собственных изображений и вы просто хотите следовать этому руководству, вы можете загрузить уже аннотированный набор данных с Google Диска (≈850 МБ). Это подмножество набора данных ENA24-detection [3] и состоит из 2000 изображений, из которых 891 — медведи, 944 — вороны и 165 — фоны (пустые изображения). За исключением фона, все изображения имеют связанный файл аннотаций, и все экземпляры помечены. Этот набор данных предназначен исключительно для иллюстративных целей. Проверьте Часто задаваемые вопросы 2, чтобы увидеть, как должен выглядеть хороший набор данных. Если вы хотите аннотировать свои собственные изображения, выполните следующие действия. Если вы планируете маркировать животных, посмотрите этот метод на GitHub, чтобы сэкономить время на рисовании ящиков.

1.1 —соберите все изображения в одну папку. Не должно быть никаких подпапок или файлов, кроме изображений, предназначенных для обучения. Это должно выглядеть так:

─── 📁dataset
     |──image_1.jpg
     |──image_2.jpg
     |──image_3.jpg
     :
     └──image_N.jpg

1.2 — откройте EcoAssist и перейдите на вкладку «Аннотации».

1.3 — выберите папку, содержащую ваши изображения, с помощью параметра «Обзор».

1.4 —перечислите названия интересующих вас классов, разделенные запятыми. Например: black bear, crow.

1.5 — нажмите кнопку «Начать аннотацию». Это создаст файл с именем «classes.txt» и откроет новое окно, в котором вы можете пометить свои изображения.

1.6 – убедитесь, что для кнопки под кнопкой «Сохранить» на панели инструментов установлено значение «YOLO». Если вы видите «PascalVOC» или «CreateML», переключитесь на «YOLO».

1.7 —Нажмите «Создать RectBox», чтобы нарисовать рамку вокруг интересующего объекта и выбрать правильную метку. Если все объекты на изображении помечены, нажмите «Сохранить» (или выберите «Просмотр» › «Режим автосохранения» в строке меню) и «Следующее изображение». Это создаст текстовый файл с тем же именем, что и изображение. Продолжайте делать это, пока все объекты на всех изображениях не будут помечены. Когда вы закончите, набор данных должен выглядеть так:

─── 📁dataset
     |──classes.txt
     |──image_1.jpg
     |──image_1.txt
     |──image_2.jpg
     |──image_2.txt
     |──image_3.jpg
     |──image_3.txt
     :
     |──image_N.jpg
     └──image_N.txt

1.8 —создайте резервную копию окончательного набора данных изображений на случай, если случится беда.

Шаг 2 — Поезд

На этом этапе мы обучим модель обнаруживать ваши объекты.

2.1 —Если вы запускаете это руководство на компьютере с Windows, может быть полезно увеличить размер страницы вашего устройства перед началом обучения (Часто задаваемые вопросы 6, пункт 1). Это увеличит виртуальную память и, следовательно, вычислительную мощность вашего устройства. Это не относится к пользователям Mac и Linux.

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

2.3 —перейдите на вкладку "Поезд".

2.4 —Укажите значения для необходимых параметров.

  • Тип обучения. Здесь вы можете выбрать, хотите ли вы продолжить существующее обучение или начать новое. Оставьте значение по умолчанию «Начать новую тренировку».
  • Папка с маркированными данными — выберите папку с изображениями и метками, созданными на этапе аннотации.
  • Переобучение — здесь вы можете выбрать, какую модель вы хотите использовать для трансферного обучения. Вы также можете обучить свою модель с нуля. См. Часто задаваемые вопросы 3 и Часто задаваемые вопросы 4 для получения дополнительной информации о том, что лучше всего подходит для вашего проекта. Если вы тренируетесь на наборе данных этого руководства, мы выберем MegaDetector 5a.
  • Количество эпох. Эпоха означает, что все обучающие данные будут проходить через алгоритм один раз. Таким образом, это число определяет, сколько раз ваш компьютер будет просматривать все изображения. Если это первое обучение на данных — берите 300 эпох.
  • Папка назначения — выберите папку, в которой вы хотите сохранить результаты. Это может быть любая папка.
  • Имя проекта: этот параметр появится только после выбора папки назначения. Здесь вы можете выбрать название для своего проекта, например, «учебник». Опция имени проекта будет раскрывающимся меню, если вы выбрали папку назначения, в которой уже были сохранены предыдущие проекты.

2.5 —можно установить значения для большего количества параметров, но это не обязательно. В этом уроке мы не будем усложнять. Если вы хотите более точно настроить свою тренировку, взгляните на «Дополнительные настройки» и вкладку «Справка».

2.6.Нажмите Начать обучение, чтобы начать процесс обучения. Вы увидите довольно много вывода в Консольном выводе, большинство из которых вы можете игнорировать. Обучение началось, если вы видите что-то вроде вывода ниже. Если вы этого не видите, взгляните на Часто задаваемые вопросы 5 и Часто задаваемые вопросы 6, чтобы проверить, не закончилась ли у вас память и нужно ли изменить настройки по умолчанию.

Plotting labels to tutorial\exp\labels.jpg... 
Image sizes 1280 train, 1280 val
Using 4 dataloader workers
Logging results to [1mincl-backgrounds\exp[0m
Starting training for 300 epochs...
      Epoch    GPU_mem   box_loss   obj_loss   cls_loss  Instances       Size
                                                                                 0%|          | 0/156 [00:00<?, ?it/s]
      0/299      10.6G     0.1024    0.06691    0.02732         20       1280:   0%|          | 0/156 [00:03<?, ?it/s]
      0/299      10.6G     0.1024    0.06691    0.02732         20       1280:   1%|          | 1/156 [00:08<21:48,  8.44s/it]
      0/299      10.6G     0.1033    0.06553    0.02709         15       1280:   1%|          | 1/156 [00:09<21:48,  8.44s/it]
      0/299      10.6G     0.1033    0.06553    0.02709         15       1280:   1%|1         | 2/156 [00:09<11:01,  4.29s/it]
      0/299      11.5G     0.1035     0.0647    0.02714         14       1280:   1%|1         | 2/156 [00:11<11:01,  4.29s/it]

2.7.Если обучение началось, просмотрите train_batch*.jpg файлов в папке назначения. Вот как ваш компьютер видит данные во время тренировки. Он должен правильно отображать ограничивающие рамки. Пример показан ниже.

2.8 —можно рассчитать, сколько примерно времени займет весь процесс во время обучения. Если вы видите [02:08<01:09, 1.29s/it], это означает, что для завершения потребуется эпоха (02:08 + 01:09 =) 3:17 мин. Умножьте это на количество эпох, и вы получите оценку общего времени, необходимого для обучения. Выделите дополнительное время для загрузки и тестирования данных после каждой эпохи. Однако обратите внимание, что оно может завершиться раньше, чем вы думаете, потому что оно автоматически остановит обучение, если за последние 100 эпох не наблюдалось никаких улучшений.

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

Шаг 3 — Оцените

При обучении модели обнаружения объектов очень важно иметь хорошее представление о вашем наборе данных и поймать вашу окончательную модель, пока она хорошо подходит, то есть не подходить и не подходить (FAQ 7). Поэтому мы хотим установить точку, в которой модель начинает переходить от недообучения к переоснащению, и прекратить там обучение.

3. 1 — перейдите в папку назначения и откройте results.png. См. Часто задаваемые вопросы 8 для детальной интерпретации метрик, используемых в этом графике и остальных файлах в папке назначения.

3.2 — на графиках выше показаны результаты данных, которые я аннотировал для вас. Как видите, он не достиг установленных 300 эпох из-за встроенного механизма ранней остановки, упомянутого в шаге 2.8.

3.3 — см. Часто задаваемые вопросы 7, чтобы определить точку, в которой ваша модель лучше всего подходит. В приведенном выше примере модель начинает получать переоснащение около эпохи номер 50. Если вы выполняете это руководство со своими собственными данными, важно фактически переобучить обучение, чтобы получить хорошее представление о вашем наборе данных и увидеть переход. от недообучения к переоснащению. Если ваши данные еще не переобучены на 300 эпохах, начните новое обучение и выберите больше эпох, например, 600 или 1200.

3.4. Обычно следующим шагом в процессе является экспериментирование с альтернативами и оптимизация показателей (Часто задаваемые вопросы 9 и Часто задаваемые вопросы 10). Однако для простоты мы не собираемся оптимизировать нашу модель в этом руководстве — мы примем результаты такими, какие они есть.

3.5 — теперь, когда мы определили точку, в которой наша модель лучше всего подходит, нам нужно остановить обучение там. Мы сделаем это, начав новое обучение с теми же параметрами, что и раньше, но изменив количество эпох до числа, которое лучше всего подходит — в нашем случае 50.

3.6 — Когда обучение завершено, снова откройте results.png и проверьте результаты. Вы можете провести еще один тренинг, если новый results.png даст более полное представление. После 50 эпох моя модель имеет точность 0,98, полноту 0,99, mAP_0,5 0,99 и mAP_0,5:0,95 0,77 — что действительно хорошо.

3.7 — окончательную модель можно найти в папке назначения: weights/best.pt.Это фактическая модель, которая может находить объекты. Вы можете перемещать и переименовывать его по желанию.

Шаг 4 — Развертывание

Теперь ваша модель готова к развертыванию.

4.1 — перейдите на вкладку «Развертывание».

4.2 — выберите папку с изображениями или видео, которые вы хотите проанализировать, в разделе Обзор. Если у вас нет тестовых изображений, вы можете скачать их с моего Google Диска (≈5 МБ).

4.3 — выберите «Пользовательская модель» в раскрывающемся меню в разделе «Модель» и выберите свою модель, созданную на предыдущем шаге.

4.4 — установите флажки для анализа изображений и/или видео.

4.5 — выберите любые другие параметры, которые вы хотите включить. См. вкладку «Помощь» для получения дополнительной информации о них.

4.6 — нажмите «Развернуть модель».

Шаг 5 — Постобработка

К этому моменту вы успешно обучили и развернули собственную модель обнаружения объектов. Вся необходимая информация находится в разделе image_recognition_file.json для изображений или video_recognition_file.json для видео. Вы можете использовать этот файл для обработки изображений в соответствии с вашими потребностями на Python, R или другом языке программирования по вашему выбору. Тем не менее, я понимаю, что программирование может быть немного сложным, и поэтому я подготовил некоторые общие функции постобработки, которые, надеюсь, помогут вам в вашем пути.

  • Разделить файлы на подкаталоги — эта функция делит файлы на подкаталоги на основе их обнаружения. Например, они будут разделены на папки с именами black bear, crow, black-bear_crow и empty.
  • Рисование ограничивающих рамок и достоверности: эта функция рисует рамки вокруг обнаружений и печатает их значения достоверности. Это может быть полезно для визуальной проверки результатов.
  • Обнаружение обрезки: эта функция обрезает обнаруженные изображения и сохраняет их как отдельные изображения.
  • Создать аннотации в формате YOLO — эта функция будет генерировать аннотации на основе обнаружений. Это может быть полезно при создании новых обучающих данных. Вам просто нужно просмотреть изображения и добавить их к своим тренировочным данным.
  • Экспортировать результаты в CSV-файлы — файлы JSON будут преобразованы в CSV-файлы для дальнейшей обработки в приложениях для работы с электронными таблицами, таких как Excel.

Выполните следующие шаги, чтобы выполнить эти функции постобработки. Фрейм «Постобработка» станет доступен после завершения развертывания.

5.1 — выберите папку, в которую вы хотите поместить результаты, в «Папка назначения».

5.2 — установите флажок рядом с функцией постобработки, которую вы хотите выполнить. Можно выбрать несколько.

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

5.4 — Нажмите «Постобработка файлов».

Как видите, модель правильно расположила всех медведей и ворон, игнорируя всех остальных животных и фоны. Работа сделана хорошо! Теперь пришло время проверить это в большем масштабе…

Заключение

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

Поскольку EcoAssist — это проект с открытым исходным кодом, не стесняйтесь вносить свой вклад на GitHub и отправлять исправления, улучшения или добавлять новые функции.

Рекомендации

  1. ван Люнтерен, П. (2022). EcoAssist: платформа без кода для обучения и развертывания моделей обнаружения объектов YOLOv5 [компьютерное программное обеспечение]. https://doi.org/10.5281/zenodo.7223363
  2. С. Бири, Д. Моррис и С. Ян, Эффективный конвейер для просмотра изображений с фотоловушек (2019 г.), препринт arXiv arXiv: 1907.06772.
  3. Х. Юсиф, Р. Кейс, Х. Чжихай, Выбор объектов с помощью динамического программирования для классификации видов животных на уровне последовательности в дикой природе (2019 г.), Институт инженеров по электротехнике и электронике: транзакции по схемам и системам для видеотехнологий.