Информация для инструктора курса
Нишан Панта занимается исследованиями и разработкой искусственного интеллекта более 3 лет, а также является соучредителем MPercept Technology и открытого сообщества AIDevNepal, которое произвело революцию в семинарах по ИИ и связях с ними в Непале.
- электронная почта: [email protected]
- Github: NISH1001
- Linkedin: nishparadox
Нишан был основным инструктором в 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 (и исходники) можно скачать из следующих источников:
- Https://pjreddie.com/darknet/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, от полного обучения до крошечных слоев. Вы можете загрузить различные конфигурации, из которых две:
- YOLOV3 (полная версия): https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg
- Tiny YOLO V3: https://github.com/pjreddie/darknet/blob/master/cfg/yolov3-tiny.cfg
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 предлагает профессиональные курсы по искусственному интеллекту, науке о данных и большим данным, которые проводят профессионалы отрасли, обладающие обширными знаниями.