Objektdetekteringsinferens i realtid i Python med YOLOv7 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Objektdetekteringsinferens i realtid i Python med YOLOv7

Beskrivning

Objektdetektering är ett stort fält inom datorseende och en av de viktigaste tillämpningarna för datorseende "i det vilda".

Objektdetektering är inte lika standardiserad som bildklassificering, främst eftersom de flesta av de nya utvecklingarna vanligtvis görs av enskilda forskare, underhållare och utvecklare, snarare än stora bibliotek och ramverk. Det är svårt att paketera de nödvändiga verktygsskripten i ett ramverk som TensorFlow eller PyTorch och behålla API-riktlinjerna som väglett utvecklingen hittills.

Detta gör objektdetektering något mer komplex, vanligtvis mer omfattande (men inte alltid) och mindre lättillgänglig än bildklassificering.

Lyckligtvis för massorna – Ultralytics har utvecklat ett enkelt, mycket kraftfullt och vackert objektdetekterings-API kring deras YOLOv5 som har utökats av andra forsknings- och utvecklingsteam till nyare versioner, som YOLOv7.

I den här korta guiden kommer vi att utföra Objektdetektion i Python, med toppmoderna YOLOv7.

YOLO Landscape och YOLOv7

YOLO (Du tittar bara en gång) är en metodik, såväl som en familj av modeller byggda för objektdetektering. Sedan starten 2015 har YOLOv1, YOLOv2 (YOLO9000) och YOLOv3 föreslagits av samma författare – och djupinlärningsgemenskapen fortsatte med framsteg med öppen källkod under de pågående åren.

Ultralytics YOLOv5 är den första storskaliga implementeringen av YOLO i PyTorch, vilket gjorde den mer tillgänglig än någonsin tidigare, men den främsta anledningen till att YOLOv5 har fått ett sådant fotfäste är också det vackert enkla och kraftfulla API som är byggt runt det. Projektet abstraherar bort de onödiga detaljerna, samtidigt som det tillåter anpassningsbarhet, praktiskt taget alla användbara exportformat, och använder fantastiska metoder som gör hela projektet både effektivt och så optimalt som det kan bli.

YOLOv5 är fortfarande huvudprojektet att bygga objektdetekteringsmodeller med, och många arkiv som syftar till att avancera YOLO-metoden börjar med YOLOv5 som baslinje och erbjuder ett liknande API (eller helt enkelt splittra projektet och bygga ovanpå det). Så är fallet med YOLOR (Du lär dig bara en representation) och YOLOv7 som byggdes ovanpå YOLOR (samma författare). YOLOv7 är det senaste framstegen inom YOLO-metoden och framförallt tillhandahåller YOLOv7 nya modellhuvuden, som kan mata ut nyckelpunkter (skelett) och utföra instanssegmentering förutom bara bounding box-regression, vilket inte var standard med tidigare YOLO-modeller.

Detta gör instanssegmentering och nyckelpunktsdetektering snabbare än någonsin tidigare!

Dessutom presterar YOLOv7 snabbare och med en högre grad av noggrannhet än tidigare modeller på grund av ett minskat antal parametrar och högre beräkningseffektivitet:

Objektdetekteringsinferens i realtid i Python med YOLOv7 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Själva modellen skapades genom arkitektoniska förändringar, såväl som genom att optimera aspekter av träning, kallad "bag-of-freebies", vilket ökade noggrannheten utan att öka slutsatskostnaden.

Installerar YOLOv7

Att installera och använda YOLOv7 handlar om att ladda ner GitHub-förvaret till din lokala maskin och köra skripten som följer med.

Notera: Tyvärr, i skrivande stund, erbjuder YOLOv7 inte ett rent programmatiskt API som YOLOv5, som vanligtvis laddas från torch.hub(), skickar in GitHub-förvaret. Detta verkar vara en funktion som borde fungera men som för närvarande misslyckas. När det fixar sig kommer jag att uppdatera guiden eller publicera en ny på det programmatiska API:et. För nu – kommer vi att fokusera på slutledningsskripten som tillhandahålls i förvaret.

Trots det kan du utföra upptäckt i realtid på videor, bilder etc. och spara resultaten enkelt. Projektet följer samma konventioner som YOLOv5, som har en omfattande dokumentation, så du kommer sannolikt att hitta svar på fler nischfrågor i YOLOv5-förvaret om du har några.

Låt oss ladda ner arkivet och göra några slutsatser:

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

Detta skapar en yolov7 katalogen i din nuvarande arbetskatalog, som innehåller projektet. Låt oss gå in i den katalogen och ta en titt på filerna:

%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

Notera: På en Google Colab Notebook måste du köra magin %cd kommandot i varje cell du vill ändra din katalog till yolov7, medan nästa cell returnerar dig till din ursprungliga arbetskatalog. På lokala Jupyter Notebooks, ändra katalogen gång håller dig kvar, så det finns ingen anledning att ge kommandot igen flera gånger.

Smakämnen detect.py är slutledningsskripten som kör upptäckter och sparar resultaten under runs/detect/video_name, där du kan ange video_name medan du ringer till detect.py skript. export.py exporterar modellen till olika format, såsom ONNX, TFLite, etc. train.py kan användas för att träna en anpassad YOLOv7-detektor (ämnet för en annan guide), och test.py kan användas för att testa en detektor (laddad från en viktfil).

Flera ytterligare kataloger innehåller konfigurationerna (cfg), exempeldata (inference), data om att konstruera modeller och COCO-konfigurationer (data), Etc

YOLOv7 storlekar

YOLO-baserade modeller skalar bra och exporteras vanligtvis som mindre, mindre exakta modeller och större, mer exakta modeller. Dessa distribueras sedan till svagare respektive starkare enheter.

YOLOv7 erbjuder flera storlekar och jämförde dem med MS COCO:

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

Modell Teststorlek APtesta AP50 test AP75 test batch 1 fps batch 32 medeltid
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

Beroende på den underliggande hårdvaran du förväntar dig att modellen ska köras på, och vilken noggrannhet som krävs – kan du välja mellan dem. Den minsta modellen når över 160 FPS på bilder i storlek 640, på en V100! Du kan också förvänta dig tillfredsställande realtidsprestanda på vanligare GPU:er för konsumenter.

Videoinferens med YOLOv7

Skapa ett inference-data mapp för att lagra bilder och/eller videor du vill upptäcka från. Förutsatt att det är i samma katalog kan vi köra ett upptäcktsskript med:

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

Detta kommer att visa en Qt-baserad video på ditt skrivbord där du kan se liveframsteg och slutsatser, bildruta för bildruta, samt mata ut statusen till vårt standardutgångsrör:

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

Observera att projektet kommer att gå långsamt på CPU-baserade maskiner (som 1000ms per slutledningssteg i utgången ovan, körs på en Intel-baserad 2017 MacBook Pro), och betydligt snabbare på GPU-baserade maskiner (närmare ~5ms/frame) på en V100). Även på CPU-baserade system som detta, yolov7-tiny.pt kör kl 172ms/frame, som även om det är långt ifrån realtid, är fortfarande väldigt anständigt för att hantera dessa operationer på en CPU.

När körningen är klar kan du hitta den resulterande videon under runs/video_1 (namnet vi angav i detect.py samtal), sparas som en .mp4:

Objektdetekteringsinferens i realtid i Python med YOLOv7 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Slutledning om bilder

Slutledning om bilder kokar ner till samma process – att tillhandahålla URL:en till en bild i filsystemet och anropa detect.py:

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

Notera: När du skriver, skalar utdata inte etiketterna till bildstorleken, även om du ställer in --img SIZE. Detta innebär att stora bilder kommer att ha riktigt tunna ramlinjer och små etiketter.

Objektdetekteringsinferens i realtid i Python med YOLOv7 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Slutsats

I den här korta guiden – vi har tagit en kort titt på YOLOv7, det senaste framsteg i YOLO-familjen, som bygger på YOLOR. Vi har tagit en titt på hur du installerar arkivet på din lokala dator och kör skript för objektdetektering med ett förtränat nätverk på videor och bilder.

I ytterligare guider kommer vi att täcka nyckelpunktsdetektering och instanssegmentering.

Going Further – Praktisk djupinlärning för datorseende

Din nyfikna natur gör att du vill gå längre? Vi rekommenderar att du kollar in vår Kurs: "Praktisk djupinlärning för datorseende med Python".

Objektdetekteringsinferens i realtid i Python med YOLOv7 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Ännu en kurs i datorseende?

Vi kommer inte att göra klassificering av MNIST-siffror eller MNIST-mode. De tjänade sin del för länge sedan. Alltför många inlärningsresurser fokuserar på grundläggande datamängder och grundläggande arkitekturer innan de låter avancerade blackbox-arkitekturer bära bördan av prestanda.

Vi vill fokusera på avmystifiering, praktiskhet, förståelse, intuition och riktiga projekt. Vill lära sig hur du kan göra skillnad? Vi tar dig med på en tur från hur våra hjärnor bearbetar bilder till att skriva en klassificerare för djupinlärning för bröstcancer i forskningsklass till nätverk för djupinlärning som "hallucinerar", lär dig principer och teorier genom praktiskt arbete, och utrustar dig med kunskap och verktyg för att bli expert på att tillämpa djupinlärning för att lösa datorseende.

Vad är inuti?

  • De första principerna för syn och hur datorer kan läras att "se"
  • Olika uppgifter och tillämpningar av datorseende
  • Branschens verktyg som gör ditt arbete enklare
  • Hitta, skapa och använda datauppsättningar för datorseende
  • Teorin och tillämpningen av Convolutional Neural Networks
  • Hantera domänskifte, samtidig förekomst och andra fördomar i datamängder
  • Överför Lärande och utnyttja andras träningstid och beräkningsresurser till din fördel
  • Bygga och träna en toppmodern klassificerare för bröstcancer
  • Hur man applicerar en hälsosam dos av skepsis på mainstream idéer och förstår implikationerna av allmänt använda tekniker
  • Visualisera ett ConvNets "konceptutrymme" med t-SNE och PCA
  • Fallstudier av hur företag använder datorseendetekniker för att uppnå bättre resultat
  • Korrekt modellutvärdering, latent rumsvisualisering och identifiering av modellens uppmärksamhet
  • Utföra domänforskning, bearbeta dina egna datamängder och upprätta modelltester
  • Banbrytande arkitekturer, utvecklingen av idéer, vad som gör dem unika och hur man implementerar dem
  • KerasCV – ett WIP-bibliotek för att skapa toppmoderna pipelines och modeller
  • Hur man analyserar och läser uppsatser och implementerar dem själv
  • Välja modeller beroende på din applikation
  • Skapa en komplett maskininlärningspipeline
  • Landskap och intuition på objektdetektering med snabbare R-CNN, RetinaNets, SSD och YOLO
  • Instans och semantisk segmentering
  • Objektigenkänning i realtid med YOLOv5
  • Träning av YOLOv5-objektdetektorer
  • Arbeta med transformatorer med KerasNLP (industristarkt WIP-bibliotek)
  • Integrering av Transformers med ConvNets för att generera bildtexter
  • DeepDream
  • Deep Learning-modelloptimering för datorseende

Tidsstämpel:

Mer från Stackabuse