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

Вывод об обнаружении объектов в Python с YOLOv5 и PyTorch

Введение

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

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

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

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

В этом кратком руководстве мы будем выполнять обнаружение объектов в Python с помощью YOLOv5, созданного Ultralytics в PyTorch, с использованием набора предварительно обученных весов, обученных на MS COCO.

YOLOv5

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

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

Проект предоставляет предварительно обученные веса в MS COCO, основном наборе данных об объектах в контексте, который можно использовать как для тестирования, так и для создания общих систем обнаружения объектов, но, что наиболее важно, его можно использовать для передачи общих знаний об объектах в контексте в пользовательские наборы данных.

Обнаружение объектов с помощью YOLOv5

Прежде чем двигаться дальше, убедитесь, что у вас есть torch и torchvision установлены:

! python -m pip install torch torchvision

YOLOv5 имеет подробную, серьезную документацию и прекрасно простой API, как показано в самом репозитории и в следующем примере:

import torch

model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
img = 'https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg'  
results = model(img)
fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(results.render()[0])
plt.show()

Второй аргумент hub.load() Метод указывает веса, которые мы хотели бы использовать. Выбирая где-нибудь между yolov5n в yolov5l6 - мы загружаем в MS COCO предварительно обученные веса. Для нестандартных моделей:

model = torch.hub.load('ultralytics/yolov5', 'custom', path='path_to_weights.pt')

В любом случае — как только вы пропустите входные данные через модель, возвращаемый объект будет включать в себя полезные методы для интерпретации результатов, и мы решили render() их, который возвращает массив NumPy, который мы можем вставить в imshow() вызов. Это приводит к красиво отформатированному:

Сохранение результатов в виде файлов

Вы можете сохранить результаты вывода в виде файла, используя results.save() Метод:

results.save(save_dir='results')

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

Вырезание объектов

Вы также можете обрезать обнаруженные объекты как отдельные файлы. В нашем случае для каждой обнаруженной метки можно извлечь несколько изображений. Это легко достигается с помощью results.crop() метод, который воссоздает runs/detect/ каталог, с expN/crops (где N увеличивается для каждого прогона), в котором для каждой этикетки делается каталог с обрезанными изображениями:

results.crop()
Saved 1 image to runs/detect/exp2
Saved results to runs/detect/exp2

[{'box': [tensor(295.09409),
   tensor(277.03699),
   tensor(514.16113),
   tensor(494.83691)],
  'conf': tensor(0.25112),
  'cls': tensor(0.),
  'label': 'person 0.25',
  'im': array([[[167, 186, 165],
          [174, 184, 167],
          [173, 184, 164],

Вы также можете проверить структуру выходного файла с помощью:

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

! ls runs/detect/exp2/crops


! ls runs/detect/exp2/crops

Подсчет объектов

По умолчанию при выполнении обнаружения или печати results объект — вы получите количество изображений, на которых был сделан вывод для этого results объект (YOLOv5 также работает с пакетами изображений), его разрешение и количество обнаруженных меток:

print(results)

Это приводит к:

image 1/1: 720x1280 14 persons, 1 car, 3 buss, 6 traffic lights, 1 backpack, 1 umbrella, 1 handbag
Speed: 35.0ms pre-process, 256.2ms inference, 0.7ms NMS per image at shape (1, 3, 384, 640)

Вывод со сценариями

Кроме того, вы можете запустить скрипт обнаружения, detect.py, клонировав репозиторий YOLOv5:

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

А потом запускаем:

$ python detect.py --source img.jpg

В качестве альтернативы вы можете указать URL-адрес, видеофайл, путь к каталогу с несколькими файлами, глобус в пути, который будет соответствовать только определенным файлам, ссылку на YouTube или любой другой поток HTTP. Результаты сохраняются в runs/detect каталог.

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

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

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

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

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

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

Что внутри?

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

Заключение

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

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

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