Обнаружение объектов

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

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

К концу этих сообщений вы сможете

  • Автоматизация создания наборов данных для глубокого обучения
  • Эффективное обучение нестандартной модели YOLOv5
  • Понять критерии высокоэффективной модели

Кодовая база

Скрипты для этого проекта находятся в репозитории Github. Он полностью реплицируется, поэтому убедитесь, что вы его следуете!
Как клонировать репозиторий

Клонировать репозиторий

git clone https://github.com/CertifaiAI/classifai-blogs.git

База кода будет в папке 0_Complete_Guide_To_Custom_Object_Detection_Model_With_Yolov5

Начало работы

Установки

Для запуска скрипта на вашем компьютере должны быть установлены Anaconda, ChromeDriver и ClassifAI. Краткое руководство по установке находится здесь.

Настройка среды

После установки всего необходимого программного обеспечения потребуется новая среда conda.

  1. Запустите свой терминал / Anaconda Prompt из папки 0_Complete_Guide_To_Custom_Object_Detection_Model_With_Yolov5.
  2. Создайте новую среду conda со всеми установленными необходимыми пакетами.
conda env create -f environment.yml

Жизненный цикл проекта машинного обучения

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

Объем проекта

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

Вариант использования

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

Выбор модели

В этом случае YOLOv5 выбран по следующим причинам:

  1. Требуются только ограничивающие рамки
    Нас интересует только обнаружение наличия объектов, а не их маскирование. Информация о том, что такое "огневой рубеж".
  2. Быстрая скорость вычислений
    Для этого приложения требуется реакция в реальном времени.

Классы для обнаружения

  1. Человек: чтобы определить, сидит ли человек в инвалидном кресле.
  2. Инвалидное кресло: основной обнаруживаемый объект.
  3. Не для инвалидных колясок: автомобили, не предназначенные для инвалидных колясок.

Сбор данных

Поскольку YOLOv5 - это модель глубокого обучения, для обучения модели требуются данные. Один из популярных способов получения данных - через Интернет. Продемонстрированный здесь метод называется парсинг веб-страниц.

Веб-парсинг

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

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

Здесь представлен скрипт для очистки изображений от Google. Чтобы узнать больше о Selenium, вот хороший пост для чтения.

Запуск кода

  1. Запустите терминал из папки WebScraping.
  2. Активируйте среду conda с помощью команды.
conda activate object-detection

3. Очистите изображения. Очистка изображения может занять некоторое время.
Примечание. Замените переменные на ‹

I. ключевое слово для очистки: ключевое слово для поиска в Google.
II. имя папки: имя папки, в которой будет храниться скопированное изображение. Он также будет использоваться в качестве префикса имени извлеченных изображений. Имена с пробелом не рекомендуется использовать здесь.
III. количество изображений: укажите количество изображений для очистки. Вам предлагается очистить больше изображений, чем вам нужно. Вы также можете ввести «-1», чтобы очистить все изображения.

python ./src/main.py <<keyword to scrape>> <<folder name>> <<number of images>>

Eg.

python ./src/main.py "wheelchair" "wheelchair1" -1

Очищенные изображения будут в папке WebScraping/images.

Результаты

Большой! Теперь у вас есть данные, необходимые для обучения модели. Однако в вашей коллекции будут и некоторые нерелевантные данные. Таким образом, фильтрация изображений необходима для удаления всех нежелательных изображений. Например, изображения мультфильмов следует фильтровать, потому что они не будут обнаружены во время вывода.

Аннотация данных

Аннотации даты - это процесс маркировки данных. В модели машинного обучения с учителем помеченные данные используются для предоставления «правильного ответа» модели, чтобы она «училась на ошибках».

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

ClassifAI

ClassifAI - один из наиболее полных инструментов аннотации данных с открытым исходным кодом. Он поддерживает маркировку различных типов данных для обучения модели ИИ.

В этом примере ClassifAI используется для маркировки данных. Причины использования ClassifAI:

  1. Простая установка и поддержка нескольких платформ
    Поддерживает ОС Windows, Mac и Linux. Кроме того, для установки ClassifAI на ваш компьютер достаточно нескольких щелчков мышью ».
  2. Удобный пользовательский интерфейс
    Пользовательский интерфейс удобен и не требует программирования от пользователей для выполнения маркировки данных.
  3. Функция автосохранения
    Каждый клик автоматически сохраняется в базе данных. Это позволяет легко приостанавливать и возобновлять проекты. Это чрезвычайно полезно для проекта, который включает большой объем данных.

Руководство пользователя

Набор данных

Щелкните здесь, чтобы получить набор данных. Набор данных состоит из 1266 изображений с классами человек, инвалидное кресло и не инвалидное кресло. Они уже хорошо помечены, но вы можете импортировать их, чтобы опробовать ClassifAI. Кроме того, вы можете импортировать собственные изображения в ClassifAI и пометить их, чтобы получить собственный практический опыт.

Настройка проекта ограничивающей рамки

  1. Запустите ClassifAI со своего компьютера.
  2. Щелкните крайнюю левую кнопку, чтобы запустить приложение браузера ClassifAI.

3. Щелкните столбец Изображение, чтобы перейти к выбору типа проекта.

4. Выберите левый, который является проектом ограничивающей рамки. Вы перейдете к интерфейсу создания проекта.

5. Введите имя проекта и нажмите кнопку «Создать», чтобы создать новый проект.

6. В интерфейсе ярлыков сначала необходимо настроить список ярлыков. Используйте кнопки «+» и «-» для добавления и удаления меток.

7. В этом проекте есть три класса; человек, инвалидное кресло и не инвалидное кресло. Удалите класс по умолчанию.

Импорт изображения

  1. Первая и вторая кнопки панели инструментов - это кнопки импорта из папки и импорта из файлов соответственно. Здесь мы будем импортировать изображения из папки.

2. Когда вы нажимаете кнопку импорта, появляется всплывающее окно выбора папки. Выберите папку, содержащую изображения, и нажмите «Открыть».

3. После импорта вы увидите первое изображение в центре холста. Полный список изображений будет в столбце списка изображений.

Маркировка ограничивающей рамки

  1. Нажмите кнопку «По размеру экрана», чтобы изображение занимало весь экран. Это упростит маркировку более точно.

2. Нажмите кнопку «нарисовать прямоугольник», чтобы переключиться в режим рисования.

3. Удерживая левую кнопку мыши, перетащите указатель мыши, чтобы нарисовать ограничивающую рамку. Появится окно выбора метки, чтобы вы могли выбрать нужную метку.
Советы: используйте желтую контрольную линию, чтобы нарисовать идеальную ограничивающую рамку!

Экспорт ярлыка

  1. Когда вы закончите разметку, нажмите кнопку «Сохранить». Окно с подсказками с несколькими вариантами сохранения.

2. Выберите опцию массового сохранения, затем нажмите кнопку YOLO, чтобы сохранить все этикетки в формате YOLO.

3. Все этикетки будут заархивированы и загружены в папку для загрузки по умолчанию в вашем браузере.

Структура набора данных

Для обучения модели YOLOv5 с помощью скрипта, представленного в репозитории, необходимо исправить файловую структуру набора данных. Если вы используете предоставленный набор данных, структура была настроена для вас. Если вы пытаетесь создать свой собственный набор данных, обратитесь к следующей диаграмме.

.
+-- dataset
    +-- train
    |   +-- images
    |   |   +-- <<images>>
    |   +-- labels
    |       +-- <<labels>>  
    +-- valid
    |   +-- images
    |   |   +-- <<images>>
    |   +-- labels
    |       +-- <<labels>> 
    +-- test
    |   +-- images
    |   |   +-- <<images>>
    |   +-- labels
    |       +-- <<labels>> 
    +-- data.yaml
  1. поезд / действительный / тестовая папка

Каждая папка train / valid / test должна содержать две папки: images и labels.

  • images папка содержит все изображения
  • labels папка содержит все файлы этикеток в формате txt с форматом:
label x y w h

Примечание: данные с пометкой ClassifAI уже находятся в этом формате. Единственный необходимый шаг - поместить их в правильную файловую структуру

2. data.yaml

data.yaml - это файл конфигурации для модели, содержащий пути к данным и имена классов. Убедитесь, что количество классов правильное. Также проверьте имя, потому что они не будут изменены после обучения модели.
Примечание. Замените ‹

train: ../train/images
val: ../valid/images

nc: <<number of classes>>
names: [<<array of class names>>]

В этом проекте это будет:

train: ../train/images 
val: ../valid/images  
nc: 3 
names: ['person', 'wheel chair', 'not wheel chair']

В проекте добавление данных и разделение поезд-проверка-тест выполняется с помощью roboflow. Это необязательно, если набор данных соответствует указанной выше структуре.

Что дальше?

Подключайтесь к Части 2, чтобы узнать интересные подробности по следующим темам:

  1. Модельное обучение
  2. Оценка модели
  3. Вывод модели