Inferență de detectare a obiectelor în Python cu YOLOv5 și PyTorch PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Inferență de detectare a obiectelor în Python cu YOLOv5 și PyTorch

Introducere

Detectarea obiectelor este un domeniu larg în viziunea computerizată și una dintre cele mai importante aplicații ale vederii computerizate „în sălbăticie”. La un capăt, poate fi folosit pentru a construi sisteme autonome care navighează agenții prin medii – fie că este vorba de roboți care execută sarcini sau de mașini care se conduc singure, dar acest lucru necesită intersecția cu alte domenii. Cu toate acestea, detectarea anomaliilor (cum ar fi produsele defecte pe o linie), localizarea obiectelor în cadrul imaginilor, detectarea facială și diverse alte aplicații ale detectării obiectelor se pot face fără a intersecta alte câmpuri.

Detectarea obiectelor nu este la fel de standardizată precum clasificarea imaginilor, în principal pentru că majoritatea noilor dezvoltări sunt realizate de obicei de către cercetători, întreținerii și dezvoltatori individuali, mai degrabă decât de biblioteci și cadre mari. Este dificil să împachetați scripturile utilitare necesare într-un cadru precum TensorFlow sau PyTorch și să mențineți ghidurile API care au ghidat dezvoltarea până acum.

Acest lucru face ca detectarea obiectelor să fie oarecum mai complexă, de obicei mai pronunțată (dar nu întotdeauna) și mai puțin accesibilă decât clasificarea imaginilor. Unul dintre avantajele majore de a fi într-un ecosistem este că vă oferă o modalitate de a nu căuta informații utile despre bunele practici, instrumente și abordări de utilizat. Cu detectarea obiectelor – majoritatea oamenilor trebuie să facă mult mai multe cercetări asupra peisajului câmpului pentru a obține o aderență bună.

Din fericire pentru mase – Ultralytics a dezvoltat un API simplu, foarte puternic și frumos de detectare a obiectelor în jurul implementării YOLOv5.

În acest scurt ghid, vom efectua Detectarea obiectelor în Python, cu YOLOv5 construit de Ultralytics în PyTorch, folosind un set de greutăți pre-antrenate antrenate pe MS COCO.

YOLOv5

YOLO (Te uiți doar o dată) este o metodologie, precum și o familie de modele construite pentru detectarea obiectelor. De la înființarea în 2015, YOLOv1, YOLOv2 (YOLO9000) și YOLOv3 au fost propuse de același(i) autori – iar comunitatea de învățare profundă a continuat cu progrese open-source în anii următori.

YOLOv5 de la Ultralytics este prima implementare la scară largă a YOLO în PyTorch, ceea ce l-a făcut mai accesibil decât oricând înainte, dar principalul motiv pentru care YOLOv5 a câștigat un astfel de punct de sprijin este, de asemenea, API-ul minunat de simplu și puternic construit în jurul lui. Proiectul abstrage detaliile inutile, permițând în același timp personalizarea, practic toate formatele de export utilizabile și folosește practici uimitoare care fac întregul proiect atât eficient, cât și cât se poate de optim. Într-adevăr, este un exemplu al frumuseții implementării software-ului open source și al modului în care acesta alimentează lumea în care trăim.

Proiectul oferă ponderi pre-antrenate pe MS COCO, un set de date de bază privind obiectele în context, care poate fi folosit atât pentru compararea, cât și pentru a construi sisteme generale de detectare a obiectelor - dar, cel mai important, poate fi folosit pentru a transfera cunoștințele generale despre obiecte în context la personalizare. seturi de date.

Detectarea obiectelor cu YOLOv5

Înainte de a merge mai departe, asigurați-vă că aveți torch și torchvision instalate:

! python -m pip install torch torchvision

YOLOv5 are o documentație detaliată și simplă și un API foarte simplu, așa cum se arată în depozitul în sine și în următorul exemplu:

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

Al doilea argument al hub.load() metoda specifică greutățile pe care dorim să le folosim. Alegând oriunde între yolov5n la yolov5l6 – încărcăm greutățile pre-antrenate MS COCO. Pentru modele personalizate:

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

În orice caz - odată ce treceți intrarea prin model, obiectul returnat include metode utile de interpretare a rezultatelor și am ales să render() acestea, care returnează o matrice NumPy pe care o putem arunca într-un imshow() apel. Rezultă un format frumos:

Salvarea rezultatelor ca fișiere

Puteți salva rezultatele inferenței ca fișier, utilizând results.save() metodă:

results.save(save_dir='results')

Acest lucru va crea un nou director dacă nu este deja prezent și va salva aceeași imagine pe care tocmai am trasat-o ca fișier.

Decuparea obiectelor

De asemenea, puteți decide să decupați obiectele detectate ca fișiere individuale. În cazul nostru, pentru fiecare etichetă detectată, pot fi extrase un număr de imagini. Acest lucru este ușor de realizat prin intermediul results.crop() metoda, care creează a runs/detect/ director, cu expN/crops (unde N crește pentru fiecare rulare), în care se face un director cu imagini decupate pentru fiecare etichetă:

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],

De asemenea, puteți verifica structura fișierului de ieșire cu:

Consultați ghidul nostru practic și practic pentru a învăța Git, cu cele mai bune practici, standarde acceptate de industrie și fisa de cheat incluse. Opriți căutarea pe Google a comenzilor Git și de fapt învăţa aceasta!

! ls runs/detect/exp2/crops


! ls runs/detect/exp2/crops

Numărarea obiectelor

În mod implicit, atunci când efectuați detectarea sau imprimați results obiect – veți obține numărul de imagini pe care a fost efectuată inferența pentru asta results obiect (YOLOv5 funcționează și cu loturi de imagini), rezoluția acestuia și numărul fiecărei etichete detectate:

print(results)

Rezultă:

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)

Inferență cu Scripturi

Alternativ, puteți rula scriptul de detectare, detect.py, prin clonarea depozitului YOLOv5:

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

Și apoi alergând:

$ python detect.py --source img.jpg

Alternativ, puteți furniza o adresă URL, un fișier video, o cale către un director cu mai multe fișiere, un glob într-o cale care să se potrivească numai pentru anumite fișiere, un link YouTube sau orice alt flux HTTP. Rezultatele sunt salvate în runs/detect director.

Mergând mai departe – Învățare profundă practică pentru viziunea computerizată

Natura ta curios te face să vrei să mergi mai departe? Vă recomandăm să verificați Curs: „Învățare profundă practică pentru viziunea computerizată cu Python”.

Inferență de detectare a obiectelor în Python cu YOLOv5 și PyTorch PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Un alt curs de Computer Vision?

Nu vom face clasificarea cifrelor MNIST sau a modei MNIST. Și-au servit rolul cu mult timp în urmă. Prea multe resurse de învățare se concentrează pe seturile de date de bază și pe arhitecturile de bază înainte de a lăsa arhitecturile avansate de tip cutie neagră să asume povara performanței.

Vrem să ne concentrăm asupra demistificare, practic, înţelegere, intuiţie și proiecte reale. Vreau sa invat cum poți face o diferență? Vă vom duce într-o plimbare de la modul în care creierul nostru procesează imaginile până la scrierea unui clasificator de învățare profundă de nivel de cercetare pentru cancerul de sân la rețele de învățare profundă care „halucinează”, învățându-vă principiile și teoria prin muncă practică, echipându-vă cu know-how și instrumente pentru a deveni un expert în aplicarea învățării profunde pentru a rezolva viziunea computerizată.

Ce e inauntru?

  • Primele principii ale vederii și modul în care computerele pot fi învățate să „vadă”
  • Diferite sarcini și aplicații ale vederii computerizate
  • Instrumentele meseriei care vă vor ușura munca
  • Găsirea, crearea și utilizarea seturilor de date pentru viziune computerizată
  • Teoria și aplicarea rețelelor neuronale convoluționale
  • Gestionarea deplasării de domeniu, apariției concomitente și a altor părtiniri în seturile de date
  • Transfer Învățați și utilizați timpul de instruire și resursele de calcul ale altora în beneficiul dumneavoastră
  • Construirea și formarea unui clasificator de ultimă generație pentru cancerul de sân
  • Cum să aplicați o doză sănătoasă de scepticism ideilor principale și să înțelegeți implicațiile tehnicilor adoptate pe scară largă
  • Vizualizarea unui „spațiu conceptual” al unui ConvNet folosind t-SNE și PCA
  • Studii de caz despre modul în care companiile folosesc tehnicile de viziune computerizată pentru a obține rezultate mai bune
  • Evaluarea corectă a modelului, vizualizarea spațiului latent și identificarea atenției modelului
  • Efectuarea cercetărilor de domeniu, procesarea propriilor seturi de date și stabilirea de teste de model
  • Arhitecturi de ultimă oră, progresul ideilor, ce le face unice și cum să le implementăm
  • KerasCV – o bibliotecă WIP pentru crearea de conducte și modele de ultimă generație
  • Cum să analizați și să citiți lucrările și să le implementați singur
  • Selectarea modelelor în funcție de aplicația dvs
  • Crearea unui canal de învățare automată de la capăt la capăt
  • Peisaj și intuiție în detectarea obiectelor cu R-CNN-uri mai rapide, RetinaNets, SSD-uri și YOLO
  • Instanță și segmentare semantică
  • Recunoașterea obiectelor în timp real cu YOLOv5
  • Instruirea detectoarelor de obiecte YOLOv5
  • Lucrul cu Transformers folosind KerasNLP (bibliotecă WIP puternică în industrie)
  • Integrarea Transformers cu ConvNets pentru a genera subtitrări ale imaginilor
  • Deepdream

Concluzie

În acest scurt ghid, am aruncat o privire asupra modului în care puteți efectua detectarea obiectelor cu YOLOv5 construit folosind PyTorch.

Timestamp-ul:

Mai mult de la Stackabuse