Виявлення об’єктів RetinaNet за допомогою PyTorch і torchvision PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Виявлення об’єктів RetinaNet за допомогою PyTorch і torchvision

Вступ

Виявлення об’єктів — це велика область комп’ютерного зору та одне з найважливіших застосувань комп’ютерного зору «в дикій природі». З одного боку, його можна використовувати для створення автономних систем, які переміщують агентів у середовищі – будь то роботи, що виконують завдання, або самокеровані автомобілі, але для цього потрібен перетин з іншими сферами. Проте виявлення аномалій (наприклад, бракованих продуктів на лінії), визначення місцезнаходження об’єктів на зображеннях, розпізнавання обличчя та інші інші застосування виявлення об’єктів можна виконати без перетину з іншими полями.

Виявлення об’єктів не є настільки стандартизованим, як класифікація зображень, головним чином тому, що більшість нових розробок зазвичай виконуються окремими дослідниками, супроводжувачами та розробниками, а не великими бібліотеками та фреймворками. Важко упакувати необхідні службові сценарії в такий фреймворк, як TensorFlow або PyTorch, і підтримувати інструкції щодо API, якими досі керувалася розробка.

Це робить виявлення об’єктів дещо складнішим, зазвичай більш детальним (але не завжди) і менш доступним, ніж класифікація зображень. Одна з головних переваг перебування в екосистемі полягає в тому, що вона дає вам можливість не шукати корисну інформацію про хороші практики, інструменти та підходи до використання. З виявленням об’єктів – більшості доводиться більше досліджувати ландшафт поля, щоб отримати гарний контроль.

Виявлення об’єктів за допомогою RetinaNet від PyTorch/TorchVision

torchvision є проектом PyTorch Computer Vision, який має на меті полегшити розробку моделей CV на основі PyTorch, надаючи сценарії трансформації та доповнення, модельний зоопарк із попередньо навченими ваговими коефіцієнтами, наборами даних і утилітами, які можуть бути корисними для практикуючого.

Поки все ще в бета-версії та дуже експериментально – torchvision пропонує відносно простий API виявлення об’єктів із кількома моделями на вибір:

  • Швидший R-CNN
  • RetinaNet
  • FCOS (повністю згортка RetinaNet)
  • SSD (магістраль VGG16… ой)
  • SSDLite (магістраль MobileNetV3)

Хоча API не такий відшліфований або простий, як деякі сторонні API, він є дуже гідною відправною точкою для тих, хто все ж віддає перевагу безпеці перебування в екосистемі, з якою вони знайомі. Перш ніж продовжувати, переконайтеся, що ви встановили PyTorch і Torchvision:

$ pip install torch torchvision

Давайте завантажимо деякі службові функції, наприклад read_image(), draw_bounding_boxes() та to_pil_image() щоб полегшити читання, малювання та виведення зображень, а потім імпортувати RetinaNet і його попередньо навчені ваги (MS COCO):

from torchvision.io.image import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.transforms.functional import to_pil_image
from torchvision.models.detection import retinanet_resnet50_fpn_v2, RetinaNet_ResNet50_FPN_V2_Weights

import matplotlib.pyplot as plt

RetinaNet використовує магістраль ResNet50 і мережу піраміди функцій (FPN) на її вершині. Хоча назва класу є багатослівною, вона вказує на архітектуру. Давайте отримаємо зображення за допомогою requests бібліотеку та збережіть її як файл на нашому локальному диску:

import requests
response = requests.get('https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg')
open("obj_det.jpeg", "wb").write(response.content)

img = read_image("obj_det.jpeg")

Маючи зображення на місці, ми можемо створити екземпляр нашої моделі та ваги:

weights = RetinaNet_ResNet50_FPN_V2_Weights.DEFAULT
model = retinanet_resnet50_fpn_v2(weights=weights, score_thresh=0.35)

model.eval()

preprocess = weights.transforms()

Команда score_thresh Аргумент визначає поріг, за яким об’єкт виявляється як об’єкт класу. Інтуїтивно зрозуміло, що це поріг впевненості, і ми не будемо класифікувати об’єкт як належний до класу, якщо модель менш ніж на 35% впевнена, що він належить до класу.

Давайте попередньо обробимо зображення, використовуючи перетворення з наших ваг, створимо пакет і запустимо висновок:

batch = [preprocess(img)]
prediction = model(batch)[0]

Ось воно, наше prediction словник містить виведені класи об’єктів і розташування! Тепер результати не дуже корисні для нас у цій формі – ми захочемо отримати мітки щодо метаданих із ваг і намалювати обмежувальні прямокутники, що можна зробити за допомогою draw_bounding_boxes():

labels = [weights.meta["categories"][i] for i in prediction["labels"]]

box = draw_bounding_boxes(img, boxes=prediction["boxes"],
                          labels=labels,
                          colors="cyan",
                          width=2, 
                          font_size=30,
                          font='Arial')

im = to_pil_image(box.detach())

fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(im)
plt.show()

Це призводить до:

RetinaNet справді класифікував людину, яка визирала позаду автомобіля! Це досить складна класифікація.

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

Ви можете переключити RetinaNet на FCOS (повністю згортка RetinaNet), замінивши retinanet_resnet50_fpn_v2 з fcos_resnet50_fpn, і використовуйте FCOS_ResNet50_FPN_Weights ваги:

from torchvision.io.image import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.transforms.functional import to_pil_image
from torchvision.models.detection import fcos_resnet50_fpn, FCOS_ResNet50_FPN_Weights

import matplotlib.pyplot as plt
import requests
response = requests.get('https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg')
open("obj_det.jpeg", "wb").write(response.content)

img = read_image("obj_det.jpeg")
weights = FCOS_ResNet50_FPN_Weights.DEFAULT
model = fcos_resnet50_fpn(weights=weights, score_thresh=0.35)
model.eval()

preprocess = weights.transforms()
batch = [preprocess(img)]
prediction = model(batch)[0]

labels = [weights.meta["categories"][i] for i in prediction["labels"]]

box = draw_bounding_boxes(img, boxes=prediction["boxes"],
                          labels=labels,
                          colors="cyan",
                          width=2, 
                          font_size=30,
                          font='Arial')

im = to_pil_image(box.detach())

fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(im)
plt.show()

Йти далі – практичне глибоке навчання для комп’ютерного зору

Ваша допитлива природа змушує вас йти далі? Ми рекомендуємо перевірити наш Курс: «Практичне глибоке навчання комп’ютерного бачення за допомогою Python».

Виявлення об’єктів RetinaNet за допомогою PyTorch і torchvision PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Ще один курс комп’ютерного зору?

Ми не будемо класифікувати цифри MNIST або моди MNIST. Вони свою роль давно відслужили. Занадто багато навчальних ресурсів зосереджені на базових наборах даних і базових архітектурах, перш ніж дозволити просунутим архітектурам чорної скриньки взяти на себе тягар продуктивності.

Ми хочемо зосередитися на демістифікація, практичність, розуміння, інтуїція та реальні проекти. Хочеться навчитися як ти можеш змінити ситуацію? Ми проведемо вас у подорожі від того, як наш мозок обробляє зображення, до написання дослідницького класифікатора глибокого навчання для раку молочної залози до мереж глибокого навчання, які «галюцинують», навчаючи вас принципам і теорії через практичну роботу, озброюючи вас ноу-хау та інструменти, щоб стати експертом у застосуванні глибокого навчання для вирішення проблем комп’ютерного зору.

Що всередині?

  • Перші принципи бачення та те, як комп’ютери можна навчити «бачити»
  • Різні задачі та застосування комп'ютерного зору
  • Інструменти, які полегшать вашу роботу
  • Пошук, створення та використання наборів даних для комп’ютерного зору
  • Теорія та застосування згорткових нейронних мереж
  • Обробка зсуву домену, спільного входження та інших упереджень у наборах даних
  • Передача навчання та використання часу навчання та обчислювальних ресурсів інших для вашої вигоди
  • Створення та навчання сучасного класифікатора раку молочної залози
  • Як застосувати здорову дозу скептицизму до основних ідей і зрозуміти наслідки широко поширених методів
  • Візуалізація «концептуального простору» ConvNet за допомогою t-SNE та PCA
  • Тематичні дослідження того, як компанії використовують методи комп’ютерного зору для досягнення кращих результатів
  • Правильна оцінка моделі, візуалізація прихованого простору та ідентифікація уваги моделі
  • Виконання досліджень предметної області, обробка власних наборів даних і створення тестів моделей
  • Передові архітектури, розвиток ідей, що робить їх унікальними та як їх реалізувати
  • KerasCV – бібліотека WIP для створення найсучасніших конвеєрів і моделей
  • Як аналізувати та читати документи та реалізувати їх самостійно
  • Вибір моделей в залежності від вашого застосування
  • Створення наскрізного конвеєра машинного навчання
  • Пейзаж та інтуїція під час виявлення об’єктів за допомогою Faster R-CNN, RetinaNets, SSD та YOLO
  • Екземплярна та семантична сегментація
  • Розпізнавання об'єктів у реальному часі за допомогою YOLOv5
  • Навчання детекторам об’єктів YOLOv5
  • Робота з Transformers за допомогою KerasNLP (потужна бібліотека WIP)
  • Інтеграція Transformers із ConvNets для створення підписів до зображень
  • DeepDream

Висновок

Виявлення об’єктів є важливою сферою комп’ютерного зору, яка, на жаль, менш доступна, ніж мала б бути.

У цьому короткому посібнику ми розглянемо, як це зробити torchvision, пакет Computer Vision від PyTorch, спрощує виявлення об’єктів на зображеннях за допомогою RetinaNet.

Часова мітка:

Більше від Stackabuse