Sklepanje o zaznavanju predmetov v realnem času v Pythonu z YOLOv7 PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Sklepanje o odkrivanju predmetov v realnem času v Pythonu z YOLOv7

Predstavitev

Zaznavanje predmetov je obsežno področje računalniškega vida in ena pomembnejših aplikacij računalniškega vida »v naravi«.

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.

Na srečo za množice – Ultralytics je razvil preprost, zelo zmogljiv in lep API za zaznavanje predmetov okoli svojega YOLOv5, ki so ga druge raziskovalne in razvojne ekipe razširile v novejše različice, kot je YOLOv7.

V tem kratkem vodniku bomo izvajali zaznavanje predmetov v Pythonu z najsodobnejšim YOLOv7.

YOLO Landscape in YOLOv7

YOLO (pogledaš samo enkrat) je metodologija, pa tudi družina modelov, zgrajenih za odkrivanje objektov. Od ustanovitve leta 2015 so YOLOv1, YOLOv2 (YOLO9000) in YOLOv3 predlagali isti avtorji – in skupnost za globoko učenje je v naslednjih letih nadaljevala z odprtokodnim napredkom.

Ultralytics' YOLOv5 je prva obsežna implementacija YOLO v PyTorch, zaradi katere je postal bolj dostopen kot kdaj koli prej, vendar je glavni razlog, da je YOLOv5 pridobil tako oporo, tudi čudovito preprost in zmogljiv API, zgrajen okoli njega. Projekt abstrahira nepotrebne podrobnosti, hkrati pa omogoča prilagodljivost, praktično vse uporabne izvozne formate in uporablja neverjetne prakse, zaradi katerih je celoten projekt hkrati učinkovit in čim bolj optimalen.

YOLOv5 je še vedno glavni projekt za izgradnjo modelov zaznavanja objektov in številna skladišča, ki si prizadevajo za napredek metode YOLO, se začnejo z YOLOv5 kot osnovo in ponujajo podoben API (ali preprosto razcepijo projekt in nadgradijo). Takšen je primer YOLOR (Naučiš se samo enega prikaza) in YOLOv7, ki je zgrajen na vrhu YOLOR (isti avtor). YOLOv7 je najnovejši napredek v metodologiji YOLO in zlasti YOLOv7 zagotavlja nove glave modelov, ki lahko izpišejo ključne točke (okostja) in izvedejo segmentacijo primerkov poleg samo regresije omejevalnih okvirjev, kar ni bilo standardno pri prejšnjih modelih YOLO.

Zaradi tega sta segmentacija primerkov in zaznavanje ključnih točk hitrejša kot kadar koli prej!

Poleg tega YOLOv7 deluje hitreje in z višjo stopnjo natančnosti kot prejšnji modeli zaradi zmanjšanega števila parametrov in večje računalniške učinkovitosti:

Sklepanje o zaznavanju predmetov v realnem času v Pythonu z YOLOv7 PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Sam model je bil ustvarjen z arhitekturnimi spremembami, pa tudi z optimiziranimi vidiki usposabljanja, imenovanimi »bag-of-freebies«, kar je povečalo natančnost brez povečanja stroškov sklepanja.

Namestitev YOLOv7

Namestitev in uporaba YOLOv7 se zmanjša na prenos repozitorija GitHub na vaš lokalni računalnik in izvajanje skriptov, ki so priloženi.

Opomba: Na žalost v času pisanja YOLOv7 ne ponuja čistega programskega API-ja, kot je YOLOv5, ki se običajno naloži iz torch.hub(), ki posreduje repozitorij GitHub. Zdi se, da je to funkcija, ki bi morala delovati, vendar trenutno ne deluje. Ko bo popravljeno, bom posodobil vodnik ali objavil novega v programskem API-ju. Zaenkrat se bomo osredotočili na sklepne skripte, ki so na voljo v repozitoriju.

Kljub temu lahko izvedete zaznavanje v realnem času na videoposnetkih, slikah itd. in enostavno shranite rezultate. Projekt sledi istim konvencijam kot YOLOv5, ki ima obsežno dokumentacijo, tako da boste verjetno našli odgovore na več nišnih vprašanj v repozitoriju YOLOv5, če jih imate.

Prenesimo repozitorij in naredimo nekaj sklepanja:

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

To ustvari a yolov7 v vašem trenutnem delovnem imeniku, v katerem je projekt. Pomaknimo se v ta imenik in si oglejmo datoteke:

%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

Opomba: V zvezku Google Colab boste morali zagnati čarovnijo %cd v vsaki celici, v katero želite spremeniti svoj imenik yolov7, medtem ko vas naslednja celica vrne nazaj v prvotni delovni imenik. V lokalnih prenosnikih Jupyter spreminjanje imenika enkrat vas obdrži v njem, zato vam ni treba večkrat izdati ukaza.

O detect.py je sklepni skript, ki zažene zaznavanje in shrani rezultate pod runs/detect/video_name, kjer lahko določite video_name med klicanjem detect.py skripta. export.py izvozi model v različne formate, kot so ONNX, TFLite itd. train.py se lahko uporablja za usposabljanje prilagojenega detektorja YOLOv7 (tema drugega vodnika) in test.py se lahko uporablja za testiranje detektorja (naložen iz datoteke uteži).

Več dodatnih imenikov hrani konfiguracije (cfg), primer podatkov (inference), podatki o izdelavi modelov in konfiguracijah COCO (data), Itd

Velikosti YOLOv7

Modeli, ki temeljijo na YOLO, se dobro prilagajajo in se običajno izvažajo kot manjši, manj natančni modeli in večji, bolj natančni modeli. Te se nato namestijo na šibkejše oziroma močnejše naprave.

YOLOv7 ponuja več velikosti in jih je primerjal z MS COCO:

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!

Model Testna velikost APTest AP50test AP75test serija 1 fps serija 32 povprečni čas
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

Odvisno od osnovne strojne opreme, na kateri pričakujete, da bo model deloval, in zahtevane natančnosti – lahko izbirate med njima. Najmanjši model doseže več kot 160 FPS na slikah velikosti 640, na V100! Zadovoljivo delovanje v realnem času lahko pričakujete tudi na pogostejših potrošniških grafičnih procesorjih.

Video sklepanje z YOLOv7

Ustvari inference-data mapo za shranjevanje slik in/ali videoposnetkov, iz katerih želite zaznati. Ob predpostavki, da je v istem imeniku, lahko zaženemo skript za odkrivanje z:

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

To bo na namizju prikazalo videoposnetek, ki temelji na Qt, v katerem si lahko ogledate napredek in sklepanje v živo, sličico za sličico, kot tudi izpišete stanje v našo standardno izhodno cev:

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

Upoštevajte, da bo projekt deloval počasi na strojih, ki temeljijo na CPE (na primer 1000 ms na korak sklepanja v zgornjem izhodu, ki se je izvajal na MacBook Pro 2017 s procesorjem Intel) in znatno hitreje na strojih, ki temeljijo na GPU (bližje ~5 ms/okvir na V100). Tudi v sistemih, ki temeljijo na procesorju, kot je ta, yolov7-tiny.pt teče ob 172ms/frame, ki je sicer daleč od realnega časa, vendar je še vedno zelo spodoben za upravljanje teh operacij v CPE.

Ko je tek končan, lahko videoposnetek najdete pod runs/video_1 (ime, ki smo ga navedli v detect.py klic), shranjen kot an .mp4:

Sklepanje o zaznavanju predmetov v realnem času v Pythonu z YOLOv7 PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Sklepanje o slikah

Sklepanje o slikah se zmanjša na isti postopek – posredovanje URL-ja sliki v datotečnem sistemu in klic detect.py:

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

Opomba: V času pisanja izhod ne prilagodi velikosti oznak glede na velikost slike, tudi če nastavite --img SIZE. To pomeni, da bodo velike slike imele zelo tanke črte omejevalnega okvirja in majhne oznake.

Sklepanje o zaznavanju predmetov v realnem času v Pythonu z YOLOv7 PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

zaključek

V tem kratkem vodniku – na kratko smo si ogledali YOLOv7, najnovejši napredek v družini YOLO, ki nadgrajuje YOLOR. Ogledali smo si, kako namestiti repozitorij na vaš lokalni računalnik in zagnati skripte sklepanja za zaznavanje predmetov z vnaprej usposobljenim omrežjem na videoposnetkih in slikah.

V nadaljnjih vodnikih bomo obravnavali odkrivanje ključnih točk in segmentacijo primerkov.

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

Sklepanje o zaznavanju predmetov v realnem času v Pythonu z YOLOv7 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
  • Optimizacija modela globokega učenja za računalniški vid

Časovni žig:

Več od Stackabuse