Sanntidsobjektdeteksjonsslutning i Python med YOLOv7 PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Sanntidsobjektdeteksjonsslutning i Python med YOLOv7

Introduksjon

Objektdeteksjon er et stort felt innen datasyn, og en av de viktigste bruksområdene for datasyn "i naturen".

Objektdeteksjon er ikke like standardisert som bildeklassifisering, hovedsakelig fordi de fleste av de nye utviklingene vanligvis gjøres av individuelle forskere, vedlikeholdere og utviklere, i stedet for store biblioteker og rammeverk. Det er vanskelig å pakke de nødvendige verktøyskriptene i et rammeverk som TensorFlow eller PyTorch og opprettholde API-retningslinjene som har ledet utviklingen så langt.

Dette gjør gjenstandsgjenkjenning noe mer kompleks, vanligvis mer detaljert (men ikke alltid), og mindre tilgjengelig enn bildeklassifisering.

Heldigvis for massene – Ultralytics har utviklet et enkelt, veldig kraftig og vakkert objektdeteksjons-API rundt deres YOLOv5 som har blitt utvidet av andre forsknings- og utviklingsteam til nyere versjoner, som YOLOv7.

I denne korte veiledningen skal vi utføre objektdeteksjon i Python, med toppmoderne YOLOv7.

YOLO Landscape og YOLOv7

YOLO (Du ser bare en gang) er en metodikk, samt familie av modeller bygget for gjenstandsdeteksjon. Siden oppstarten i 2015 har YOLOv1, YOLOv2 (YOLO9000) og YOLOv3 blitt foreslått av samme forfatter(e) – og dyplæringsfellesskapet fortsatte med fremskritt med åpen kildekode i de påfølgende årene.

Ultralytics' YOLOv5 er den første storskalaimplementeringen av YOLO i PyTorch, som gjorde den mer tilgjengelig enn noen gang før, men hovedårsaken til at YOLOv5 har fått et slikt fotfeste er også den vakkert enkle og kraftige APIen bygget rundt den. Prosjektet abstraherer bort de unødvendige detaljene, samtidig som det tillater tilpasning, praktisk talt alle brukbare eksportformater, og benytter utrolige fremgangsmåter som gjør hele prosjektet både effektivt og så optimalt som det kan bli.

YOLOv5 er fortsatt hovedprosjektet å bygge objektdeteksjonsmodeller med, og mange depoter som tar sikte på å fremme YOLO-metoden starter med YOLOv5 som en baseline og tilbyr en lignende API (eller ganske enkelt fordeler prosjektet og bygger på toppen av det). Slik er tilfellet med YOLOR (Du lærer bare én representasjon) og YOLOv7 som bygget på toppen av YOLOR (samme forfatter). YOLOv7 er det siste fremskrittet innen YOLO-metodikken, og spesielt gir YOLOv7 nye modellhoder, som kan sende ut nøkkelpunkter (skjeletter) og utføre instanssegmentering i tillegg til bare regresjon av grensebokser, som ikke var standard med tidligere YOLO-modeller.

Dette gjør forekomstsegmentering og nøkkelpunktdeteksjon raskere enn noen gang før!

I tillegg yter YOLOv7 raskere og med en høyere grad av nøyaktighet enn tidligere modeller på grunn av redusert parameterantall og høyere beregningseffektivitet:

Sanntidsobjektdeteksjonsslutning i Python med YOLOv7 PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Selve modellen ble skapt gjennom arkitektoniske endringer, samt optimalisering av aspekter ved trening, kalt "bag-of-freebies", som økte nøyaktigheten uten å øke slutningskostnadene.

Installerer YOLOv7

Installering og bruk av YOLOv7 koker ned til å laste ned GitHub-depotet til din lokale maskin og kjøre skriptene som følger med.

OBS: Dessverre, i skrivende stund, tilbyr ikke YOLOv7 et rent programmatisk API som YOLOv5, som vanligvis lastes fra torch.hub(), sender GitHub-depotet inn. Dette ser ut til å være en funksjon som burde fungere, men som for øyeblikket mislykkes. Etter hvert som det blir fikset, vil jeg oppdatere veiledningen eller publisere en ny på det programmatiske API. Foreløpig vil vi fokusere på slutningsskriptene som er gitt i depotet.

Likevel kan du utføre deteksjon i sanntid på videoer, bilder osv. og lagre resultatene enkelt. Prosjektet følger de samme konvensjonene som YOLOv5, som har en omfattende dokumentasjon, så du vil sannsynligvis finne svar på flere nisjespørsmål i YOLOv5-depotet hvis du har noen.

La oss laste ned depotet og utføre noen slutninger:

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

Dette skaper en yolov7 katalogen i din nåværende arbeidskatalog, som inneholder prosjektet. La oss gå inn i den katalogen og ta en titt på filene:

%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

OBS: På en Google Colab Notebook må du kjøre magien %cd kommandoen i hver celle du ønsker å endre katalogen til yolov7, mens neste celle returnerer deg tilbake til den opprinnelige arbeidskatalogen. På lokale Jupyter Notebooks, endre katalogen gang holder deg inne, så det er ikke nødvendig å gi kommandoen på nytt flere ganger.

De detect.py er slutningsskriptene som kjører deteksjoner og lagrer resultatene under runs/detect/video_name, hvor du kan spesifisere video_name mens du ringer til detect.py skript. export.py eksporterer modellen til ulike formater, som ONNX, TFLite, etc. train.py kan brukes til å trene en tilpasset YOLOv7-detektor (emnet for en annen guide), og test.py kan brukes til å teste en detektor (lastet fra en vektfil).

Flere ekstra kataloger inneholder konfigurasjonene (cfg), eksempeldata (inference), data om å konstruere modeller og COCO-konfigurasjoner (data), Etc.

YOLOv7 størrelser

YOLO-baserte modeller skalerer godt, og eksporteres vanligvis som mindre, mindre nøyaktige modeller og større, mer nøyaktige modeller. Disse blir deretter distribuert til henholdsvis svakere eller sterkere enheter.

YOLOv7 tilbyr flere størrelser, og sammenlignet dem med MS COCO:

Sjekk ut vår praktiske, praktiske guide for å lære Git, med beste praksis, bransjeaksepterte standarder og inkludert jukseark. Slutt å google Git-kommandoer og faktisk lære den!

Modell Teststørrelse APtest AP50 test AP75 test batch 1 fps batch 32 gjennomsnittstid
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

Avhengig av den underliggende maskinvaren du forventer at modellen skal kjøre på, og den nødvendige nøyaktigheten – kan du velge mellom dem. Den minste modellen treffer over 160 FPS på bilder i størrelse 640, på en V100! Du kan også forvente tilfredsstillende sanntidsytelse på mer vanlige forbruker-GPUer.

Videoinferens med YOLOv7

Lag en inference-data mappe for å lagre bildene og/eller videoene du ønsker å oppdage fra. Forutsatt at det er i samme katalog, kan vi kjøre et deteksjonsskript med:

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

Dette vil vise en Qt-basert video på skrivebordet ditt der du kan se fremdriften og konklusjonen i sanntid, bilde for bilde, samt sende ut statusen til vårt standard utgangsrø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

Legg merke til at prosjektet vil gå sakte på CPU-baserte maskiner (som 1000ms per slutningstrinn i utdataene ovenfor, kjørt på en Intel-basert 2017 MacBook Pro), og betydelig raskere på GPU-baserte maskiner (nærmere ~5ms/frame) på en V100). Selv på CPU-baserte systemer som dette, yolov7-tiny.pt løper kl 172ms/frame, som selv om det er langt fra sanntid, er fortsatt veldig anstendig for å håndtere disse operasjonene på en CPU.

Når kjøringen er ferdig, kan du finne den resulterende videoen under runs/video_1 (navnet vi oppga i detect.py samtale), lagret som en .mp4:

Sanntidsobjektdeteksjonsslutning i Python med YOLOv7 PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Konklusjon om bilder

Konklusjon om bilder koker ned til den samme prosessen – å oppgi URL-en til et bilde i filsystemet, og ringe detect.py:

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

OBS: I skrivende stund skalerer ikke utdataene etikettene til bildestørrelsen, selv om du angir --img SIZE. Dette betyr at store bilder vil ha veldig tynne rammelinjer og små etiketter.

Sanntidsobjektdeteksjonsslutning i Python med YOLOv7 PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

konklusjonen

I denne korte guiden – har vi tatt en kort titt på YOLOv7, det siste fremskrittet i YOLO-familien, som bygger på toppen av YOLOR. Vi har tatt en titt på hvordan du installerer depotet på din lokale maskin og kjører inferensskript for objektdeteksjon med et forhåndsopplært nettverk på videoer og bilder.

I ytterligere veiledninger vil vi dekke nøkkelpunktdeteksjon og instanssegmentering.

Gå videre – praktisk dyp læring for datasyn

Din nysgjerrige natur gjør at du ønsker å gå lenger? Vi anbefaler å sjekke ut vår Kurs: "Praktisk dyplæring for datasyn med Python".

Sanntidsobjektdeteksjonsslutning i Python med YOLOv7 PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Et annet datasynskurs?

Vi kommer ikke til å klassifisere MNIST-sifre eller MNIST-mote. De tjente sin del for lenge siden. For mange læringsressurser fokuserer på grunnleggende datasett og grunnleggende arkitekturer før de lar avanserte svartboksarkitekturer bære byrden av ytelse.

Vi ønsker å fokusere på avmystifisering, praktisk, forståelse, intuisjon og ekte prosjekter. Vil lære hvordan du kan gjøre en forskjell? Vi tar deg med på en tur fra måten hjernen vår behandler bilder på til å skrive en dyplæringsklassifiser for brystkreft til dyplæringsnettverk som "hallusinerer", lærer deg prinsippene og teorien gjennom praktisk arbeid, og utstyrer deg med kunnskap og verktøy for å bli en ekspert på å bruke dyp læring for å løse datasyn.

Hva er inni?

  • De første prinsippene for visjon og hvordan datamaskiner kan læres å "se"
  • Ulike oppgaver og anvendelser av datasyn
  • Verktøyene i bransjen som vil gjøre arbeidet ditt enklere
  • Finne, lage og bruke datasett for datasyn
  • Teorien og anvendelsen av konvolusjonelle nevrale nettverk
  • Håndtering av domeneskift, samtidig forekomst og andre skjevheter i datasett
  • Overfør Læring og bruk av andres treningstid og beregningsressurser til din fordel
  • Bygge og trene en toppmoderne brystkreftklassifiser
  • Hvordan bruke en sunn dose skepsis til mainstream ideer og forstå implikasjonene av vidt vedtatte teknikker
  • Visualisere et ConvNets "konseptrom" ved hjelp av t-SNE og PCA
  • Kasusstudier av hvordan bedrifter bruker datasynsteknikker for å oppnå bedre resultater
  • Riktig modellevaluering, latent romvisualisering og identifisering av modellens oppmerksomhet
  • Utføre domeneforskning, behandle egne datasett og etablere modelltester
  • Nyskapende arkitekturer, utviklingen av ideer, hva som gjør dem unike og hvordan de implementeres
  • KerasCV – et WIP-bibliotek for å lage toppmoderne rørledninger og modeller
  • Hvordan analysere og lese artikler og implementere dem selv
  • Velge modeller avhengig av din applikasjon
  • Opprette en ende-til-ende maskinlæringspipeline
  • Landskap og intuisjon på objektdeteksjon med raskere R-CNN, RetinaNets, SSD og YOLO
  • Forekomst og semantisk segmentering
  • Objektgjenkjenning i sanntid med YOLOv5
  • Trening av YOLOv5-objektdetektorer
  • Arbeide med transformatorer ved å bruke KerasNLP (bransjesterkt WIP-bibliotek)
  • Integrering av transformatorer med ConvNets for å generere bildetekster
  • Deepdream
  • Deep Learning-modelloptimalisering for datasyn

Tidstempel:

Mer fra Stackabuse