Reaalajas objektituvastuse järeldus Pythonis koos YOLOv7 PlatoBlockchaini andmeluurega. Vertikaalne otsing. Ai.

Reaalajas objektituvastuse järeldus Pythonis koos YOLOv7-ga

Sissejuhatus

Objektide tuvastamine on arvutinägemise suur valdkond ja üks olulisemaid arvutinägemise rakendusi "looduses".

Objektide tuvastamine ei ole nii standardiseeritud kui piltide klassifitseerimine, peamiselt seetõttu, et enamiku uutest arendustest teevad tavaliselt üksikud teadlased, hooldajad ja arendajad, mitte suured raamatukogud ja raamistikud. Raske on pakkida vajalikke utiliidi skripte raamistikku, nagu TensorFlow või PyTorch, ja säilitada API juhiseid, mis seni arendust juhtisid.

See muudab objektide tuvastamise mõnevõrra keerukamaks, tavaliselt paljusõnalisemaks (kuid mitte alati) ja vähem ligipääsetavaks kui kujutiste klassifitseerimine.

Suurte inimeste õnneks – Ultralytics on oma YOLOv5 ümber välja töötanud lihtsa, väga võimsa ja kauni objektituvastuse API, mida teised uurimis- ja arendusmeeskonnad on laiendanud uuemateks versioonideks, näiteks YOLOv7.

Selles lühikeses juhendis teostame objektide tuvastamise Pythonis koos tipptasemel YOLOv7-ga.

YOLO maastik ja YOLOv7

YOLO (sa vaatad ainult korra) on metoodika, samuti objektide tuvastamiseks loodud mudelite perekond. Alates loomisest 2015. aastal on YOLOv1, YOLOv2 (YOLO9000) ja YOLOv3 pakkunud sama(d) autor(id) – ja süvaõppekogukond jätkas jätkuvatel aastatel avatud lähtekoodiga edusammudega.

Ultralytics YOLOv5 on YOLO esimene suuremahuline juurutus PyTorchis, mis muutis selle ligipääsetavamaks kui kunagi varem, kuid peamine põhjus, miks YOLOv5 niisuguse jalad alla on saanud, on ka selle ümber ehitatud kaunilt lihtne ja võimas API. Projekt abstraheerib mittevajalikud üksikasjad, võimaldades samal ajal kohandamist, praktiliselt kõiki kasutatavaid ekspordivorminguid ja kasutab hämmastavaid tavasid, mis muudavad kogu projekti nii tõhusaks kui ka optimaalseks.

YOLOv5 on endiselt põhiprojekt objektide tuvastamise mudelite koostamiseks ja paljud hoidlad, mille eesmärk on YOLO meetodit edendada, alustavad YOLOv5-st lähtetasemena ja pakuvad sarnast API-t (või lihtsalt ühendage projekt ja ehitage sellele edasi). Selline on juhtum YOLOR (õpid ainult ühe esituse) ja YOLOv7, mis ehitati YOLORi peale (sama autor). YOLOv7 on YOLO metoodika uusim edasiminek ja mis kõige olulisem, YOLOv7 pakub uusi mudelipäid, mis suudavad väljastada võtmepunkte (skelette) ja teostada eksemplari segmenteerimist lisaks piirdekasti regressioonile, mis ei olnud eelmiste YOLO mudelite puhul standardne.

See muudab eksemplari segmenteerimise ja võtmepunkti tuvastamise kiiremaks kui kunagi varem!

Lisaks töötab YOLOv7 varasematest mudelitest kiiremini ja suurema täpsusega tänu väiksemale parameetrite arvule ja suuremale arvutuslikule efektiivsusele:

Reaalajas objektituvastuse järeldus Pythonis koos YOLOv7 PlatoBlockchaini andmeluurega. Vertikaalne otsing. Ai.

Mudel ise loodi nii arhitektuursete muudatuste kui ka koolituse optimeerimise kaudu, mida nimetati "tasuta tasuta kottideks", mis suurendas täpsust ilma järelduskulusid suurendamata.

YOLOv7 installimine

YOLOv7 installimine ja kasutamine taandub GitHubi hoidla allalaadimisega kohalikku arvutisse ja sellega kaasas olevate skriptide käivitamisega.

Märge: Kahjuks ei paku YOLOv7 kirjutamise seisuga puhast programmilist API-d, nagu YOLOv5, mis tavaliselt laaditakse torch.hub(), edastades GitHubi hoidla. See näib olevat funktsioon, mis peaks töötama, kuid praegu ei tööta. Kui see parandatakse, värskendan juhendit või avaldan programmilises API-s uue. Praegu keskendume hoidlas pakutavatele järeldusskriptidele.

Sellegipoolest saate videote, piltide jms tuvastamist reaalajas teha ja tulemusi hõlpsalt salvestada. Projekt järgib samu tavasid nagu YOLOv5, millel on ulatuslik dokumentatsioon, nii et tõenäoliselt leiate YOLOv5 hoidlast vastuseid rohkematele nišiküsimustele, kui teil neid on.

Laadime hoidla alla ja teeme järeldused:

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

See loob a yolov7 kataloogi teie praeguses töökataloogis, kus projekt asub. Liigume sellesse kataloogi ja vaatame faile:

%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

Märge: Google Colabi märkmikus peate selle võlu käivitama %cd käsk igas lahtris, kuhu soovite oma kataloogi muuta yolov7, samas kui järgmine lahter viib teid tagasi algsesse töökataloogi. Kohalikes Jupyteri sülearvutites kataloogi muutmine kunagi hoiab teid selles, nii et pole vaja käsku mitu korda uuesti välja anda.

. detect.py on järeldusskript, mis käivitab tuvastamised ja salvestab tulemused alla runs/detect/video_name, kus saate määrata video_name helistamise ajal detect.py skript. export.py ekspordib mudeli erinevatesse vormingutesse, nagu ONNX, TFLite jne. train.py saab kasutada kohandatud YOLOv7 detektori koolitamiseks (teise juhendi teema) ja test.py saab kasutada detektori testimiseks (laetud kaalufailist).

Mitmed täiendavad kataloogid sisaldavad seadistusi (cfg), näidisandmed (inference), andmed mudelite ja COCO konfiguratsioonide ehitamise kohta (data) Jne.

YOLOv7 suurused

YOLO-põhised mudelid skaleeruvad hästi ja neid eksporditakse tavaliselt väiksemate, vähemtäpsete mudelitena ja suuremate ja täpsemate mudelitena. Seejärel rakendatakse need vastavalt nõrgematele või tugevamatele seadmetele.

YOLOv7 pakub mitut suurust ja võrdles neid MS COCO-ga:

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

MUDEL Testi suurus APtest AP50 test AP75 test partii 1 kaadrit sekundis partii 32 keskmine aeg
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

Olenevalt aluseks olevast riistvarast, millel mudel töötab, ja nõutavast täpsusest – saate nende vahel valida. Väikseim mudel saavutab üle 160 kaadrit sekundis 640 suuruste piltide puhul V100-l! Rahuldavat reaalajas jõudlust võite oodata ka tavalisemate GPU-de puhul.

Video järeldus YOLOv7 abil

Loo inference-data kausta piltide ja/või videote salvestamiseks, mida soovite tuvastada. Eeldades, et see asub samas kataloogis, saame käivitada tuvastamisskripti järgmisega:

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

See kuvab teie töölaual Qt-põhise video, milles näete reaalajas edenemist ja järeldusi kaadri haaval, samuti saate oleku meie standardsesse väljundtorusse:

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

Pange tähele, et projekt töötab CPU-põhistes masinates aeglaselt (nt 1000 ms ühe järeldusetapi kohta ülaltoodud väljundis, töötas Inteli-põhises 2017 MacBook Pro-s) ja oluliselt kiiremini GPU-põhistes masinates (ligikaudu ~5 ms/kaader mudelil V100). Isegi sellistes CPU-põhistes süsteemides nagu see, yolov7-tiny.pt jookseb kl 172ms/frame, mis on küll kaugel reaalajas, kuid on siiski väga korralik nende toimingute tegemiseks protsessoris.

Kui jooks on tehtud, leiate tulemuseks oleva video alt runs/video_1 (nimi, mille esitasime dokumendis detect.py kõne), salvestatud kui .mp4:

Reaalajas objektituvastuse järeldus Pythonis koos YOLOv7 PlatoBlockchaini andmeluurega. Vertikaalne otsing. Ai.

Järeldused piltide kohta

Piltide järeldamine taandub samale protsessile – failisüsteemis oleva pildi URL-i andmine ja väljakutsumine detect.py:

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

Märge: Kirjutamise seisuga ei skaleerita väljund silte pildi suuruse järgi, isegi kui olete selle määranud --img SIZE. See tähendab, et suurtel piltidel on väga õhukesed piirdekasti jooned ja väikesed sildid.

Reaalajas objektituvastuse järeldus Pythonis koos YOLOv7 PlatoBlockchaini andmeluurega. Vertikaalne otsing. Ai.

Järeldus

Selles lühikeses juhendis oleme heitnud põgusa pilgu YOLOv7-le, YOLO perekonna uusimale edusammule, mis põhineb YOLORil. Vaatasime, kuidas installida hoidla oma kohalikku masinasse ja käivitada objektituvastuse järeldusskripte videote ja piltide jaoks eelnevalt koolitatud võrguga.

Edasistes juhendites käsitleme võtmepunktide tuvastamist ja eksemplari segmenteerimist.

Edasiminek – praktiline süvaõpe arvutinägemise jaoks

Sinu uudishimulik loomus tekitab sinus soovi minna kaugemale? Soovitame tutvuda meiega Kursus: "Praktiline süvaõpe arvutinägemise jaoks Pythoniga".

Reaalajas objektituvastuse järeldus Pythonis koos YOLOv7 PlatoBlockchaini andmeluurega. Vertikaalne otsing. Ai.

Veel üks arvutinägemise kursus?

Me ei klassifitseeri MNIST-i numbreid ega MNIST-moodi. Nad teenisid oma osa juba ammu. Liiga paljud õpperessursid keskenduvad põhiandmekogumitele ja põhiarhitektuuridele, enne kui lasevad täiustatud musta kasti arhitektuurid jõudluskoormuse enda kanda võtta.

Tahame keskenduda demüstifitseerimine, praktilisus, mõistmine, intuitsioon ja tõelisi projekte. Tahad õppida kuidas saate midagi muuta? Viime teid teele alates viisist, kuidas meie aju töötleb pilte, kuni rinnavähi süvaõppe klassifikaatori kirjutamiseni kuni süvaõppevõrgustikeni, mis "hallutsineerivad", õpetades teile põhimõtteid ja teooriat praktilise töö kaudu, varustades teid oskusteavet ja tööriistu, et saada eksperdiks süvaõppe rakendamisel arvutinägemise lahendamisel.

Mis seal sees on?

  • Nägemise esimesed põhimõtted ja see, kuidas arvuteid saab õpetada nägema
  • Arvutinägemise erinevad ülesanded ja rakendused
  • Tööriistad, mis muudavad teie töö lihtsamaks
  • Arvutinägemise andmestike otsimine, loomine ja kasutamine
  • Konvolutsiooniliste närvivõrkude teooria ja rakendus
  • Domeeni nihke, koosesinemise ja muude andmekogumite eelarvamuste käsitlemine
  • Teisaldage õppimine ja teiste koolitusaja ja arvutusressursside kasutamine teie kasuks
  • Kaasaegse rinnavähi klassifikaatori ehitamine ja väljaõpe
  • Kuidas rakendada tervet annust skepsist peavoolu ideede suhtes ja mõista laialdaselt kasutusele võetud tehnikate mõju
  • ConvNeti "kontseptsiooniruumi" visualiseerimine t-SNE ja PCA abil
  • Juhtumiuuringud, kuidas ettevõtted kasutavad arvutinägemise tehnikaid paremate tulemuste saavutamiseks
  • Mudeli nõuetekohane hindamine, varjatud ruumi visualiseerimine ja mudeli tähelepanu tuvastamine
  • Domeeniuuringu läbiviimine, oma andmekogumite töötlemine ja mudelitestide loomine
  • Tipptasemel arhitektuurid, ideede edenemine, mis teeb need ainulaadseks ja kuidas neid ellu viia
  • KerasCV – WIP-teek tipptasemel torujuhtmete ja mudelite loomiseks
  • Kuidas töid sõeluda ja lugeda ning neid ise rakendada
  • Mudelite valimine sõltuvalt teie rakendusest
  • Täieliku masinõppe torujuhtme loomine
  • Maastik ja intuitsioon objektide tuvastamisel kiiremate R-CNN-ide, RetinaNetside, SSD-de ja YOLO-ga
  • Eksemplar ja semantiline segmenteerimine
  • Reaalajas objektituvastus YOLOv5-ga
  • YOLOv5 objektidetektorite koolitamine
  • Transformeritega töötamine KerasNLP-ga (tööstuse tugev WIP-teek)
  • Transformerite integreerimine ConvNetsiga, et luua piltide pealdised
  • Deepdream
  • Süvaõppe mudeli optimeerimine arvutinägemise jaoks

Ajatempel:

Veel alates Stackabus