Inferență de detectare a obiectelor în timp real în Python cu YOLOv7 PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Inferență de detectare a obiectelor în timp real în Python cu YOLOv7

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”.

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.

Din fericire pentru mase – Ultralytics a dezvoltat un API simplu, foarte puternic și frumos de detectare a obiectelor în jurul lui YOLOv5, care a fost extins de alte echipe de cercetare și dezvoltare în versiuni mai noi, cum ar fi YOLOv7.

În acest scurt ghid, vom efectua detectarea obiectelor în Python, cu YOLOv7 de ultimă generație.

YOLO Landscape și YOLOv7

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.

YOLOv5 este încă proiectul de bază cu care se construiește modele de detectare a obiectelor, iar multe depozite care urmăresc să avanseze metoda YOLO încep cu YOLOv5 ca linie de bază și oferă un API similar (sau pur și simplu bifurcă proiectul și construiește deasupra acestuia). Acesta este cazul YOLOR (Înveți doar o reprezentare) și YOLOv7 care a construit deasupra lui YOLOR (același autor). YOLOv7 este cea mai recentă avansare în metodologia YOLO și, mai ales, YOLOv7 oferă noi capete de model, care pot scoate puncte cheie (schelete) și pot realiza segmentarea instanțelor pe lângă doar regresia cu caseta de delimitare, care nu era standard cu modelele YOLO anterioare.

Acest lucru face ca segmentarea instanțelor și detectarea punctelor cheie să fie mai rapide decât oricând!

În plus, YOLOv7 funcționează mai rapid și cu un grad mai mare de precizie decât modelele anterioare datorită numărului redus de parametri și eficienței de calcul mai mari:

Inferență de detectare a obiectelor în timp real în Python cu YOLOv7 PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Modelul în sine a fost creat prin modificări arhitecturale, precum și prin optimizarea aspectelor de antrenament, numite „bag-of-freebies”, care au crescut precizia fără a crește costul de inferență.

Instalarea YOLOv7

Instalarea și utilizarea YOLOv7 se rezumă la descărcarea depozitului GitHub pe mașina dvs. locală și la rularea scripturilor care vin împreună cu acesta.

Notă: Din păcate, în momentul scrierii, YOLOv7 nu oferă un API programatic curat, cum ar fi YOLOv5, care este de obicei încărcat de la torch.hub(), transmițând depozitul GitHub. Aceasta pare a fi o caracteristică care ar trebui să funcționeze, dar în prezent eșuează. Pe măsură ce se remediază, voi actualiza ghidul sau voi publica unul nou pe API-ul programatic. Deocamdată – ne vom concentra pe scripturile de inferență furnizate în depozit.

Chiar și așa, puteți efectua detectarea în timp real a videoclipurilor, imaginilor etc. și puteți salva rezultatele cu ușurință. Proiectul urmează aceleași convenții ca YOLOv5, care are o documentație extinsă, așa că este posibil să găsiți răspunsuri la mai multe întrebări de nișă în depozitul YOLOv5 dacă aveți unele.

Să descarcăm depozitul și să facem câteva inferențe:

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

Aceasta creează un yolov7 directorul din directorul de lucru curent, care găzduiește proiectul. Să ne mutăm în acel director și să aruncăm o privire la fișiere:

%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

Notă: Pe un blocnotes Google Colab, va trebui să rulați magia %cd comandă în fiecare celulă în care doriți să vă schimbați directorul yolov7, în timp ce următoarea celulă vă întoarce înapoi la directorul de lucru original. Pe Notebook-urile Jupyter locale, schimbarea directorului dată te menține în ea, așa că nu este nevoie să lansezi comanda de mai multe ori.

detect.py este scripturile de inferență care rulează detectările și salvează rezultatele sub runs/detect/video_name, unde puteți specifica video_name în timp ce sunați la detect.py script-ul. export.py exportă modelul în diverse formate, cum ar fi ONNX, TFLite etc. train.py poate fi folosit pentru a antrena un detector personalizat YOLOv7 (subiectul unui alt ghid) și test.py poate fi folosit pentru a testa un detector (încărcat dintr-un fișier de greutăți).

Mai multe directoare suplimentare dețin configurațiile (cfg), date de exemplu (inference), date privind construirea modelelor și configurațiilor COCO (data), Etc

Mărimi YOLOv7

Modelele bazate pe YOLO se scalează bine și sunt de obicei exportate ca modele mai mici, mai puțin precise și modele mai mari și mai precise. Acestea sunt apoi implementate pe dispozitive mai slabe sau, respectiv, mai puternice.

YOLOv7 oferă mai multe dimensiuni și le-a comparat cu MS COCO:

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!

Model Dimensiunea testului APtest AP50test AP75test lot 1 fps timp mediu lot 32
YOLOv7 640 51.4% 69.7% 55.9% 161 fps 2.8 ms
YOLOv7-X 640 53.1% 71.2% 57.8% 114 fps 4.3 ms
YOLOv7-W6 1280 54.9% 72.6% 60.1% 84 fps 7.6 ms
YOLOv7-E6 1280 56.0% 73.5% 61.2% 56 fps 12.3 ms
YOLOv7-D6 1280 56.6% 74.0% 61.8% 44 fps 15.0 ms
YOLOv7-E6E 1280 56.8% 74.4% 62.1% 36 fps 18.7 ms

În funcție de hardware-ul de bază pe care vă așteptați să ruleze modelul și de precizia necesară – puteți alege dintre acestea. Cel mai mic model atinge peste 160 FPS pe imagini de dimensiunea 640, pe un V100! Vă puteți aștepta la performanțe satisfăcătoare în timp real și pe mai multe GPU-uri de consum.

Inferență video cu YOLOv7

Creați o inference-data folder pentru a stoca imaginile și/sau videoclipurile din care doriți să le detectați. Presupunând că se află în același director, putem rula un script de detectare cu:

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

Acest lucru va solicita un videoclip bazat pe Qt pe desktop, în care puteți vedea progresul și inferența în direct, cadru cu cadru, precum și să transmiteți starea în conducta noastră standard de ieșire:

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

Rețineți că proiectul va rula lent pe mașinile bazate pe CPU (cum ar fi 1000 ms per pas de inferență în rezultatul de mai sus, rulat pe un MacBook Pro 2017 bazat pe Intel) și semnificativ mai rapid pe mașinile bazate pe GPU (mai aproape de ~ 5 ms/cadru). pe un V100). Chiar și pe sisteme bazate pe CPU, cum ar fi acesta, yolov7-tiny.pt aleargă la 172ms/frame, care, deși departe de a fi în timp real, este încă foarte decent pentru a gestiona aceste operațiuni pe un procesor.

Odată ce rularea este încheiată, puteți găsi videoclipul rezultat mai jos runs/video_1 (numele pe care l-am furnizat în detect.py apel), salvat ca un .mp4:

Inferență de detectare a obiectelor în timp real în Python cu YOLOv7 PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Inferență asupra imaginilor

Inferența asupra imaginilor se rezumă la același proces - furnizarea URL-ului unei imagini din sistemul de fișiere și apelarea detect.py:

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

Notă: În momentul scrierii, rezultatul nu scalează etichetele la dimensiunea imaginii, chiar dacă ați setat --img SIZE. Aceasta înseamnă că imaginile mari vor avea linii de delimitare foarte subțiri și etichete mici.

Inferență de detectare a obiectelor în timp real în Python cu YOLOv7 PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Concluzie

În acest scurt ghid – am aruncat o scurtă privire asupra YOLOv7, cel mai recent progres din familia YOLO, care se bazează pe YOLOR. Am analizat cum să instalați depozitul pe mașina dvs. locală și să rulăm scripturi de inferență de detectare a obiectelor cu o rețea pregătită în prealabil pe videoclipuri și imagini.

În ghiduri suplimentare, vom acoperi detectarea punctelor cheie și segmentarea instanțelor.

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 timp real în Python cu YOLOv7 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
  • Optimizarea modelului de Deep Learning pentru viziunea computerizată

Timestamp-ul:

Mai mult de la Stackabuse