Информация для инструктора курса

Нишан Панта занимается исследованиями и разработкой искусственного интеллекта более 3 лет, а также является соучредителем MPercept Technology и открытого сообщества AIDevNepal, которое произвело революцию в семинарах по ИИ и связях с ними в Непале.

Нишан был основным инструктором в MPercept Academy. Он преподает и руководит курсами по искусственному интеллекту с момента основания Академии.

Что такое классификация объектов

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

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

Подходы к классификации объектов:

Мы можем применить любые существующие методы ML / DL для задачи классификации. Некоторые из них:

  • Бинарная классификация по характеристикам изображения
  • SVM по характеристикам изображения
  • Искусственные нейронные сети по особенностям изображения
  • Сверточные нейронные сети на необработанном изображении

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

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

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

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

Последний раздел состоит из новейших техник, таких как:

  • ЙОЛО
  • RetinaNet
  • RCNN
  • Fast-RCNN
  • Быстрее-RCNN
  • Маска RCNN

ЙОЛО

You Only Look Once - это современная система обнаружения объектов в реальном времени. Первоначально он был разработан примерно в 2015 году и превзошел все другие методы того времени.
YOLO имеет свою собственную аккуратную архитектуру, основанную на CNN и якорных блоках, и зарекомендовал себя как метод обнаружения объектов на ходу для широко используемых проблем. . Благодаря временной шкале он стал быстрее и лучше с его версиями, названными как:

  • ЙОЛО V1
  • ЙОЛО V2
  • ЙОЛО V3

YOLO V2 лучше, чем V1, с точки зрения точности и скорости.
YOLO V3 не быстрее, чем V2, но более точен, чем V2.

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

Исходный документ можно найти здесь.
Ссылку на статью о YOLO V3 можно найти здесь, что является не чем иным, как постепенным улучшением, добавленным в V2.

Как работает YOLO

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

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

YOLO V3 точнее. На следующем рисунке изображена общая архитектура YOLO V3:

Где взять YOLO

Бинарные файлы YOLO (и исходники) можно скачать из следующих источников:

YOLO основан на даркнете, построенном на C. Darknet - это фреймворк нейронной сети с открытым исходным кодом, написанный на C и CUDA.

Как использовать YOLO

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

git clone https://github.com/pjreddie/darknet

II) Скомпилируйте исходный код

Мы можем напрямую скомпилировать исходный код, используя make. Просто перейдите в каталог, в котором клонирован даркнет, и выполните команду:

https://github.com/pjreddie/darknet

Помните: make использует Makefile, который содержит инструкции для компиляции исходных файлов C.
После завершения процесса make вы получите файл с именем darknet - двоичный исполняемый файл. Вы можете использовать этот двоичный исполняемый файл для запуска YOLO.

III) Сделать даркнет исполняемым

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

chmod u+x darknet

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

YOLO Структура

I) Файлы конфигурации

YOLO полностью работает по принципу plug-n-play, то есть вы можете настроить YOLO на обнаружение любых типов объектов. Фактически, вы также можете изменить саму архитектуру CNN и поэкспериментировать. YOLO делает это, используя файлы конфигурации в cfg /.
Файлы конфигурации заканчиваются расширением .cfg, которое YOLO может анализировать.
Эти файлы конфигурации состоят в основном из:

  • Архитектуры CNN (слои и активации)
  • Якорные ящики
  • Кол-во классов
  • Скорость обучения
  • Техника оптимизации
  • размер ввода
  • порог оценки вероятности
  • размеры партий

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

II) Вес

Каждой конфигурации соответствуют предварительно натренированные веса.
Здесь упоминается только YOLO V3.

Полный вес
Чтобы получить полные веса для YOLO V3, загрузите его с https://pjreddie.com/media/files/yolov3.weights.
Это вес, который вы тренируете на полных 9000+ классах.

Tiny Weight
Это вес, который тренируется всего в 80 классах. Вы можете получить вес для YOLO V3 здесь https://pjreddie.com/media/files/yolov3-tiny.weights.

Тест ЙОЛО

Как было сказано ранее, все запускается с использованием darknet исполняемого файла.
Предположим, у нас есть изображение с именем test.jpeg, тогда мы можем попытаться предсказать объекты как:

./darknet detect yolov3-tiny.cfg yolov3-tiny.weights test.jpeg

Обычно .cfg находятся внутри cfg/ каталога.
Предположим, у вас есть yolov3-tiny внутри каталога weights/, тогда команда будет такой:

./darknet detect cfg/yolov3-tiny.cfg weights/yolov3-tiny.weights test.jpeg

После этого в том же каталоге, что и файл darknet, будет изображение с именем predictions.jpeg.
Вы можете просматривать классы прогнозов вместе с соответствующими ограничивающими рамками.

Тренироваться

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

./darknet detector train custom/cfg/obj.data custom/cfg/tiny-yolo.cfg custom/tiny-yolo_100.weights

Разбивка тренировочной команды

Здесь .cfg и .weights - это файлы конфигурации и веса, как упоминалось ранее.
Все происходит с использованием obj.data файл с таким содержанием:

classes= 1  
train  = custom/cfg/train.txt
valid  = custom/cfg/test.txt
names = obj.names  
backup = backup/

obj.names

Этот файл состоит из списка имен классов. Пример:

cat
dog
background
bike

train.txt

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

custom/train-images/11.jpg
custom/train-images/12.jpg
custom/train-images/13.jpg
...
...

Здесь train-images / состоит из всех обучающих изображений.
Помимо изображений, этот каталог также содержит текстовый файл для ограничивающего прямоугольника, соответствующего изображению.
Итак, у вас будет custom/train-images/11.txt, содержимое которого может быть:

0 0.32502480158730157 0.3950066137566138 0.12896825396825398 0.09523809523809523

Здесь первое число представляет собой идентификатор класса, соответствующего в obj.names.
Остальные числа представляют ограничивающую рамку. Если бы было несколько ящиков с несколькими классами, это выглядело бы так:

0 0.32502480158730157 0.3950066137566138 0.12896825396825398 0.09523809523809523
0 0.52502480158730157 0.3950066137566138 0.12896825396825398 0.09523809523809523
1 0.32502480158730157 0.3950066137566138 0.12896825396825398 0.09523809523809523

test.txt

Этот файл состоит из списка тестовых изображений.

Примечание о .cfg

Обратите внимание: в .cfg необходимо изменить количество классов на общее количество, указанное в obj.names.

Итак, вот как вы можете запустить YOLO. Помните, что все приведенные выше команды были протестированы в системе Linux. Этот процесс аналогичен и для систем Windows.

Академия MPercept предлагает профессиональные курсы по искусственному интеллекту, науке о данных и большим данным, которые проводят профессионалы отрасли, обладающие обширными знаниями.