Вывод обнаружения объектов в реальном времени в Python с помощью YOLOv7 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Вывод об обнаружении объектов в реальном времени в Python с YOLOv7

Введение

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

Обнаружение объектов не так стандартизировано, как классификация изображений, в основном потому, что большинство новых разработок обычно выполняются отдельными исследователями, сопровождающими и разработчиками, а не большими библиотеками и фреймворками. Трудно упаковать необходимые служебные сценарии в такую ​​​​инфраструктуру, как TensorFlow или PyTorch, и поддерживать рекомендации API, которые до сих пор руководили разработкой.

Это делает обнаружение объектов несколько более сложным, обычно более подробным (но не всегда) и менее доступным, чем классификация изображений.

К счастью для масс, Ultralytics разработала простой, очень мощный и красивый API для обнаружения объектов на основе YOLOv5, который был расширен другими группами исследователей и разработчиков в более новых версиях, таких как YOLOv7.

В этом кратком руководстве мы будем выполнять обнаружение объектов в Python с помощью современного YOLOv7.

YOLO Пейзаж и YOLOv7

YOLO (Вы только посмотрите один раз) это методология, а также семейство моделей, построенных для обнаружения объектов. С момента создания в 2015 году YOLOv1, YOLOv2 (YOLO9000) и YOLOv3 предлагались одним и тем же автором (авторами), и в последующие годы сообщество глубокого обучения продолжало продвигать разработки с открытым исходным кодом.

Ультралитики YOLOv5 — это первая крупномасштабная реализация YOLO в PyTorch, которая сделала его более доступным, чем когда-либо прежде, но главная причина, по которой YOLOv5 закрепился, — это также прекрасно простой и мощный API, построенный вокруг него. Проект абстрагируется от ненужных деталей, обеспечивая при этом настраиваемость, практически все используемые форматы экспорта и использует удивительные методы, которые делают весь проект как эффективным, так и оптимальным, насколько это возможно.

YOLOv5 по-прежнему является основным проектом для создания моделей обнаружения объектов, и многие репозитории, направленные на развитие метода YOLO, начинают с YOLOv5 в качестве базовой линии и предлагают аналогичный API (или просто разветвляют проект и строят поверх него). Так обстоит дело YOLOR (вы изучаете только одно представление) и YOLOv7, построенный поверх YOLOR (тот же автор). YOLOv7 — это последнее усовершенствование методологии YOLO, и, что наиболее примечательно, YOLOv7 предоставляет новые головки моделей, которые могут выводить ключевые точки (скелеты) и выполнять сегментацию экземпляров, помимо только регрессии ограничивающей рамки, которая не была стандартной для предыдущих моделей YOLO.

Это делает сегментацию экземпляров и обнаружение ключевых точек быстрее, чем когда-либо прежде!

Кроме того, YOLOv7 работает быстрее и с большей степенью точности, чем предыдущие модели, благодаря меньшему количеству параметров и более высокой вычислительной эффективности:

Вывод обнаружения объектов в реальном времени в Python с помощью YOLOv7 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

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

Установка YOLOv7

Установка и использование YOLOv7 сводится к загрузке репозитория GitHub на локальный компьютер и запуску сценариев, которые поставляются вместе с ним.

Примечание: К сожалению, на момент написания YOLOv7 не предлагает чистого программного API, такого как YOLOv5, который обычно загружается из torch.hub(), передавая репозиторий GitHub. Похоже, это функция, которая должна работать, но в настоящее время она не работает. Как только это будет исправлено, я обновлю руководство или опубликую новое в программном API. А пока сосредоточимся на сценариях вывода, представленных в репозитории.

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

Давайте загрузим репозиторий и выполним некоторые выводы:

! git clone https://github.com/WongKinYiu/yolov7.git

Это создает yolov7 каталог в вашем текущем рабочем каталоге, в котором находится проект. Давайте перейдем в этот каталог и посмотрим на файлы:

%cd yolov7
!ls
/Users/macbookpro/jup/yolov7
LICENSE.md       detect.py        models           tools
README.md        export.py        paper            train.py
cfg              figure           requirements.txt train_aux.py
data             hubconf.py       scripts          utils
deploy           inference        test.py          runs

Примечание: На блокноте Google Colab вам придется запустить волшебство %cd команду в каждой ячейке, в которую вы хотите изменить свой каталог yolov7, а следующая ячейка возвращает вас обратно в исходный рабочий каталог. На локальных ноутбуках Jupyter изменение каталога консолидировать удерживает вас в нем, поэтому нет необходимости повторять команду несколько раз.

Ассоциация detect.py — это сценарии вывода, которые запускают обнаружения и сохраняют результаты в runs/detect/video_name, где можно указать video_name при вызове detect.py скрипты. export.py экспортирует модель в различные форматы, такие как ONNX, TFLite и т.д. train.py можно использовать для обучения пользовательского детектора YOLOv7 (тема другого руководства) и test.py может использоваться для тестирования детектора (загружается из файла весов).

Несколько дополнительных каталогов содержат конфигурации (cfg), пример данных (inference), данные о построении моделей и конфигурациях КОСО (data) И т.д.

YOLOv7 Размеры

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

YOLOv7 предлагает несколько размеров и сравнивал их с MS COCO:

Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!

Модель Размер теста APтестXNUMX AP50test AP75test партия 1 кадр/с партия 32 среднее время
YOLOv7 640 51.4% 69.7% 55.9% 161 кадров в секунду 2.8 мс
YOLOV7-X 640 53.1% 71.2% 57.8% 114 кадров в секунду 4.3 мс
YOLOv7-W6 1280 54.9% 72.6% 60.1% 84 кадров в секунду 7.6 мс
YOLOv7-E6 1280 56.0% 73.5% 61.2% 56 кадров в секунду 12.3 мс
YOLOv7-D6 1280 56.6% 74.0% 61.8% 44 кадров в секунду 15.0 мс
YOLOv7-E6E 1280 56.8% 74.4% 62.1% 36 кадров в секунду 18.7 мс

В зависимости от базового оборудования, на котором вы ожидаете, что модель будет работать, и требуемой точности — вы можете выбирать между ними. Самая маленькая модель достигает более 160 кадров в секунду на изображениях размером 640 на V100! Вы можете ожидать удовлетворительной производительности в реальном времени и на более распространенных потребительских графических процессорах.

Видеовывод с YOLOv7

Создать inference-data папку для хранения изображений и/или видео, которые вы хотите обнаружить. Предполагая, что он находится в том же каталоге, мы можем запустить скрипт обнаружения с помощью:

! python3 detect.py --source inference-data/busy_street.mp4 --weights yolov7.pt --name video_1 --view-img

Это вызовет видео на основе Qt на вашем рабочем столе, в котором вы можете увидеть живой прогресс и вывод, кадр за кадром, а также вывести статус в наш стандартный канал вывода:

Namespace(weights=['yolov7.pt'], source='inference-data/busy_street.mp4', img_size=640, conf_thres=0.25, iou_thres=0.45, device='', view_img=True, save_txt=False, save_conf=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='video_1', exist_ok=False, no_trace=False)
YOLOR 🚀 v0.1-112-g55b90e1 torch 1.12.1 CPU

Downloading https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt to yolov7.pt...
100%|██████████████████████████████████████| 72.1M/72.1M [00:18<00:00, 4.02MB/s]

Fusing layers... 
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
Model Summary: 306 layers, 36905341 parameters, 6652669 gradients
 Convert model to Traced-model... 
 traced_script_module saved! 
 model is traced! 
 
video 1/1 (1/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1071.6ms) Inference, (2.4ms) NMS
video 1/1 (2/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1070.8ms) Inference, (1.3ms) NMS

Обратите внимание, что проект будет работать медленнее на машинах с процессором (например, 1000 мс на шаг вывода в выходных данных выше, запущенный на MacBook Pro 2017 года на базе Intel) и значительно быстрее на машинах на базе графического процессора (приблизительно к ~ 5 мс/кадр). на V100). Даже в системах на базе ЦП, таких как эта, yolov7-tiny.pt работает на 172ms/frame, который, хотя и далек от реального времени, тем не менее очень пригоден для обработки этих операций на ЦП.

После завершения прогона вы можете найти полученное видео в разделе runs/video_1 (имя, которое мы указали в detect.py вызов), сохраненный как .mp4:

Вывод обнаружения объектов в реальном времени в Python с помощью YOLOv7 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Вывод на изображениях

Вывод изображений сводится к одному и тому же процессу — предоставлению URL-адреса изображения в файловой системе и вызову detect.py:

! python3 detect.py --source inference-data/desk.jpg --weights yolov7.pt

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

Вывод обнаружения объектов в реальном времени в Python с помощью YOLOv7 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Заключение

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

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

Двигаясь дальше — практическое глубокое обучение компьютерному зрению

Ваша любознательная натура заставляет вас идти дальше? Рекомендуем ознакомиться с нашим "Курс": «Практическое глубокое обучение компьютерному зрению с помощью Python».

Вывод обнаружения объектов в реальном времени в Python с помощью YOLOv7 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Еще один курс по компьютерному зрению?

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

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

Что внутри?

  • Первые принципы зрения и как научить компьютеры «видеть»
  • Различные задачи и приложения компьютерного зрения
  • Ремесленные инструменты, которые облегчат вашу работу
  • Поиск, создание и использование наборов данных для компьютерного зрения
  • Теория и применение сверточных нейронных сетей
  • Обработка смещения домена, совпадения и других смещений в наборах данных
  • Передача обучения и использование времени обучения и вычислительных ресурсов других в ваших интересах
  • Создание и обучение современного классификатора рака молочной железы
  • Как применить здоровую дозу скептицизма к господствующим идеям и понять последствия широко распространенных методов
  • Визуализация «концептуального пространства» ConvNet с использованием t-SNE и PCA
  • Тематические исследования того, как компании используют методы компьютерного зрения для достижения лучших результатов
  • Правильная оценка модели, визуализация скрытого пространства и выявление внимания модели
  • Выполнение исследования предметной области, обработка ваших собственных наборов данных и создание модельных тестов
  • Передовые архитектуры, развитие идей, что делает их уникальными и как их реализовать
  • KerasCV — WIP-библиотека для создания современных пайплайнов и моделей.
  • Как разбирать и читать статьи и реализовывать их самостоятельно
  • Выбор моделей в зависимости от вашего применения
  • Создание сквозного конвейера машинного обучения
  • Ландшафт и интуиция при обнаружении объектов с помощью Faster R-CNN, RetinaNets, SSD и YOLO
  • Экземпляр и семантическая сегментация
  • Распознавание объектов в реальном времени с помощью YOLOv5
  • Обучение детекторам объектов YOLOv5
  • Работа с трансформерами с использованием KerasNLP (надежная библиотека WIP)
  • Интеграция Transformers с ConvNets для создания подписей к изображениям
  • DeepDream
  • Оптимизация модели глубокого обучения для компьютерного зрения

Отметка времени:

Больше от Стекабьюс