Что такое CNN?

В глубоком обучении сверточная нейронная сеть (CNN или ConvNet) представляет собой класс глубоких нейронных сетей, наиболее часто применяемых для анализа визуальных образов. Они также известны как инвариантные к сдвигу или пространственно-инвариантные искусственные нейронные сети (SIANN), основанные на архитектуре ядер свертки с общим весом, которые сканируют скрытые слои и характеристики инвариантности трансляции. У них есть приложения для распознавания изображений и видео, рекомендательных систем, классификации изображений, сегментации изображений, медицинского анализа изображений, обработки естественного языка, интерфейсов мозг-компьютер и финансовых временных рядов.

В этом руководстве я рассмотрю полный пример CNN с использованием архитектуры YOLOv5. YOLOv5 выпустил Гленн Джохер (основатель и генеральный директор Utralytics). Он был публично выпущен на Github здесь. Гленн представил подход, основанный на YOLOv5 Pytorch, и Yes! YOLOv5 написан в среде Pytorch.

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

Подготовка данных:

Я собрал данные из открытых онлайн-источников, в нашем случае это были водительские права США. Я собрал все изображения в одну папку и подготовил ее для предварительной обработки данных.

Собранные данные должны быть аннотированы / помечены ограничивающими прямоугольниками всех регионов, которые мы хотим обнаружить из водительских прав, например. Имя, адрес, номер DL, пол и дата рождения. Поэтому мы помечаем все изображения интересующим обнаружением поверх изображений. Количество этикеток на изображение составляет общее количество классов, которое в данном случае равно '5'.

Предварительная обработка данных:

Я использовал Roboflow для маркировки, мы также можем использовать LabelImg для того же.

Мой набор данных невелик, и в каждом из них содержатся водительские права всех 50 штатов. Набор данных невелик, поскольку получить настоящие лицензии было невозможно.

Выбор CNN для трансферного обучения: 😵

Мы можем использовать самые современные модели для всех видов задач глубокого обучения, это ограничено только личными предпочтениями и сценарием использования. Вы можете проверить модели, предлагаемые PyTorch, здесь: https://pytorch.org/vision/0.8/models.html

Мне лично нравится YOLO за проблемы с обнаружением объектов. С развитием архитектуры YOLO возможности безграничны.

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

Выберите предварительно обученную модель / веса для начала тренировки. Здесь выбираем YOLOv5l. Мы выбрали более крупную модель, чтобы получить более точные результаты.

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

Вы можете просто клонировать проект yolov5:

$ git clone https://github.com/ultralytics/yolov5  # clone repo
$ cd yolov5
$ pip install -r requirements.txt  # install dependencies

Примечание. Если у вас есть графический процессор, вы можете выполнить эти шаги, чтобы настроить pytorch CUDA, затем выполните шаги, описанные выше.

После загрузки любых весов мы должны отредактировать ряд классов в .YAML файле нейронной сети с одинаковыми весами. Например, мы загрузили веса yolov5l, поэтому нам нужно изменить количество классов со значения по умолчанию (80) на наш вариант использования (5), который представляет собой имя, адрес, номер DL, пол и дату рождения.

Когда мы загружаем наш набор данных из Roboflow и извлекаем его в папку yolov5, откуда мы получаем, другой .YAML файл, который содержит местоположение поезда + тестовые данные с именем класса, которое мы ему дали.

Структура папок должна выглядеть так:

Примечание. Не забудьте извлечь набор данных в формате yolo из веб-приложения Roboflow.

Обучение данных 💜

Обучите модель YOLOv5l на нашем наборе данных, размере партии, размере изображения или предварительно обученном --weights yolov5l.pt (рекомендуется). Предварительно тренированные веса автоматически загружаются из последней версии YOLOv5.

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

# Train YOLOv5l on DL for 300 epochs
$ python train.py --img 640 --batch 4 --epochs 300 --data US_DL.yaml --cfg yolov5l.yaml --weights yolov5l.pt

Чтобы получать более подробные сведения и оперативную обратную связь о тренировках через Интернет, вы можете установить веса и смещения (wandb.ai) с помощью этой команды $ pip install wandb

Полный журнал wandbai можно найти здесь: https://wandb.ai/thinkersloop/YOLOv5/runs/2ahw81wk/overview?workspace=user-thinkersloop

Полученные результаты:

Тестирование на случайных данных:

Самую обученную модель можно найти в папке run \ train \ exp.

А теперь давайте проверим это. detect.py делает вывод по множеству источников.

$ python detect.py --weights runs/train/exp/weights/best.pt --img 640 --conf 0.5 --source test/images

Полученные изображения хранятся в папке run \ detect \ exp.

(YOLO-v5) C:\Users\luckie\Projects\Dream\DL data extract\YOLO-v5\yolov5>python detect.py --weights runs/train/exp/weights/best.pt --img 640 --conf 0.5 --source test/images
Namespace(agnostic_nms=False, augment=False, classes=None, conf_thres=0.5, device='', exist_ok=False, img_size=640, iou_thres=0.45, name='exp', project='runs/detect', save_conf=False, save_txt=False, source='test/images', update=False, view_img=False, weights=['runs/t
rain/exp/weights/best.pt'])
YOLOv5  torch 1.7.1+cu101 CUDA:0 (GeForce RTX 2070 SUPER, 8192.0MB)
Fusing layers...
Model Summary: 392 layers, 46622106 parameters, 0 gradients, 114.2 GFLOPS
image 1/2 C:\Users\luckie\Projects\Dream\DL data extract\YOLO-v5\yolov5\test\images\test1.jpg: 416x640 1 addresss, 1 date_of_births, 1 license_numbers, 1 names, 1 sexs, Done. (0.050s)
image 2/2 C:\Users\luckie\Projects\Dream\DL data extract\YOLO-v5\yolov5\test\images\Alabama-s_jpg.rf.fa47b8af18b6c8263fa5f4c9b7ae760f.jpg: 448x640 1 addresss, 1 date_of_births, 1 license_numbers, 1 names, 1 sexs, Done. (0.048s)
Results saved to runs\detect\exp
Done. (0.136s)

Поздравляем, если вы успешно выполнили вышеуказанные шаги. Ваше здоровье!

Полную версию моего кода можно найти здесь:



Вы можете связаться со мной в LinkedIn:



Спасибо! 😀