RetinaNet Object Detection s PyTorch in torchvision PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Zaznavanje predmetov RetinaNet s PyTorch in torchvision

Predstavitev

Zaznavanje predmetov je obsežno področje računalniškega vida in ena pomembnejših aplikacij računalniškega vida »v naravi«. Na eni strani se lahko uporablja za gradnjo avtonomnih sistemov, ki krmarijo agente skozi okolja – naj bodo to roboti, ki opravljajo naloge, ali samovozeči avtomobili, vendar to zahteva presečišče z drugimi področji. Vendar pa je zaznavanje nepravilnosti (kot so okvarjeni izdelki na liniji), lociranje predmetov na slikah, zaznavanje obrazov in različne druge aplikacije zaznavanja predmetov mogoče izvesti brez presekanja drugih področij.

Zaznavanje objektov ni tako standardizirano kot klasifikacija slik, predvsem zato, ker večino novega razvoja običajno opravijo posamezni raziskovalci, vzdrževalci in razvijalci, ne pa velike knjižnice in ogrodja. Težko je zapakirati potrebne pomožne skripte v ogrodje, kot sta TensorFlow ali PyTorch, in vzdrževati smernice API-ja, ki so usmerjale dosedanji razvoj.

Zaradi tega je zaznavanje objektov nekoliko bolj zapleteno, običajno bolj podrobno (vendar ne vedno) in manj dostopno kot klasifikacija slik. Ena od glavnih prednosti bivanja v ekosistemu je, da vam omogoča, da ne iščete koristnih informacij o dobrih praksah, orodjih in pristopih za uporabo. Z zaznavanjem predmetov – večina mora veliko bolj raziskati pokrajino polja, da se dobro oprime.

Zaznavanje predmetov z RetinaNet podjetja PyTorch/TorchVision

torchvision je PyTorchov projekt Computer Vision in želi olajšati razvoj modelov življenjepisov, ki temeljijo na PyTorchu, z zagotavljanjem skriptov za preoblikovanje in razširitev, modelnega živalskega vrta z vnaprej pripravljenimi utežmi, nabori podatkov in pripomočki, ki so lahko uporabni za praktike.

Medtem ko je še vedno v različici beta in zelo eksperimentalno – torchvision ponuja razmeroma preprost API za zaznavanje predmetov z nekaj modeli, med katerimi lahko izbirate:

  • Hitrejši R-CNN
  • RetinaNet
  • FCOS (Fully convolutional RetinaNet)
  • SSD (hrbtenica VGG16 ... fuj)
  • SSDLite (hrbtenica MobileNetV3)

Čeprav API ni tako uglajen ali preprost kot nekateri drugi API-ji tretjih oseb, je zelo spodobno izhodišče za tiste, ki bi vseeno raje imeli varnost v ekosistemu, ki ga poznajo. Preden nadaljujete, se prepričajte, da ste namestili PyTorch in Torchvision:

$ pip install torch torchvision

Naložimo nekaj pomožnih funkcij, kot je npr read_image(), draw_bounding_boxes() in to_pil_image() za lažje branje, risanje in izpisovanje slik, čemur sledi uvoz RetinaNet in njegovih vnaprej pripravljenih uteži (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 uporablja hrbtenico ResNet50 in omrežje funkcijske piramide (FPN) na vrhu. Čeprav je ime razreda podrobno, nakazuje arhitekturo. Pridobimo sliko z uporabo requests knjižnico in jo shranimo kot datoteko na naš lokalni disk:

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")

S sliko na mestu lahko ustvarimo svoj model in uteži:

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

model.eval()

preprocess = weights.transforms()

O score_thresh argument definira prag, pri katerem je objekt zaznan kot objekt razreda. Intuitivno je to prag zaupanja in predmeta ne bomo razvrstili v razred, če je model manj kot 35-odstotno prepričan, da pripada razredu.

Predobdelajmo sliko s transformacijami iz naših uteži, ustvarimo serijo in zaženimo sklepanje:

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

To je to, naš prediction slovar vsebuje izpeljane razrede objektov in lokacije! Rezultati v tej obliki za nas niso zelo uporabni – želeli bomo iz uteži izvleči oznake glede na metapodatke in narisati omejevalne okvirje, kar lahko storimo prek 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()

Rezultat tega je:

RetinaNet je dejansko razvrstil osebo, ki kuka izza avtomobila! To je precej težka klasifikacija.

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

RetinaNet lahko preklopite na FCOS (popolnoma konvolucijski RetinaNet) z zamenjavo retinanet_resnet50_fpn_v2 z fcos_resnet50_fpn, in uporabite FCOS_ResNet50_FPN_Weights uteži:

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()

Naprej – Praktično poglobljeno učenje za računalniški vid

Ali zaradi vaše radovedne narave želite iti dlje? Priporočamo, da si ogledate naše Tečaj: »Praktično poglobljeno učenje za računalniški vid s Pythonom«.

RetinaNet Object Detection s PyTorch in torchvision PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Še en tečaj računalniškega vida?

Ne bomo izvajali klasifikacije števk MNIST ali načina MNIST. Svojo so že zdavnaj odslužili. Preveč učnih virov se osredotoča na osnovne nabore podatkov in osnovne arhitekture, preden prepusti naprednim arhitekturam črnih skrinjic breme zmogljivosti.

Želimo se osredotočiti na demistifikacija, praktičnosti, razumevanje, intuicija in pravi projekti. Želim se naučiti kako lahko kaj spremeniš? Popeljali vas bomo od načina, na katerega naši možgani obdelujejo slike, do pisanja raziskovalnega klasifikatorja globokega učenja za raka dojke do omrežij globokega učenja, ki »halucinirajo«, vas naučijo načel in teorije s praktičnim delom ter vas opremijo z znanje in izkušnje ter orodja, da postanete strokovnjak za uporabo globokega učenja za reševanje računalniškega vida.

Kaj je notri?

  • Prva načela vida in kako lahko računalnike naučimo "videti"
  • Različne naloge in aplikacije računalniškega vida
  • Strokovna orodja, ki vam bodo olajšala delo
  • Iskanje, ustvarjanje in uporaba naborov podatkov za računalniški vid
  • Teorija in uporaba konvolucijskih nevronskih mrež
  • Obravnava premikov domene, sopojavljanja in drugih pristranskosti v nizih podatkov
  • Prenos učenja in uporaba časa za usposabljanje in računalniških virov drugih v vašo korist
  • Izdelava in usposabljanje najsodobnejšega klasifikatorja raka dojke
  • Kako uporabiti zdrav odmerek skepticizma za glavne ideje in razumeti posledice splošno sprejetih tehnik
  • Vizualizacija »konceptnega prostora« ConvNet z uporabo t-SNE in PCA
  • Študije primerov o tem, kako podjetja uporabljajo tehnike računalniškega vida za doseganje boljših rezultatov
  • Pravilno vrednotenje modela, vizualizacija latentnega prostora in prepoznavanje pozornosti modela
  • Izvajanje domenskih raziskav, obdelava lastnih naborov podatkov in vzpostavljanje testov modelov
  • Vrhunske arhitekture, razvoj idej, kaj jih dela edinstvene in kako jih uresničiti
  • KerasCV – knjižnica WIP za ustvarjanje najsodobnejših cevovodov in modelov
  • Kako razčleniti in brati prispevke ter jih implementirati sami
  • Izbira modelov glede na vašo aplikacijo
  • Ustvarjanje cevovoda strojnega učenja od konca do konca
  • Pokrajina in intuicija pri zaznavanju predmetov s hitrejšimi R-CNN, RetinaNets, SSD in YOLO
  • Instančna in pomenska segmentacija
  • Prepoznavanje predmetov v realnem času z YOLOv5
  • Usposabljanje detektorjev predmetov YOLOv5
  • Delo s transformatorji z uporabo KerasNLP (industrijska knjižnica WIP)
  • Integracija Transformers s ConvNets za ustvarjanje napisov slik
  • Deepdream

zaključek

Zaznavanje predmetov je pomembno področje računalniškega vida, ki je na žalost manj dostopno, kot bi moralo biti.

V tem kratkem vodniku smo si ogledali, kako torchvision, PyTorchov paket Computer Vision, olajša izvajanje zaznavanja objektov na slikah z uporabo RetinaNet.

Časovni žig:

Več od Stackabuse