Realtime objectdetectie-inferentie in Python met YOLOv7 PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Realtime objectdetectie-inferentie in Python met YOLOv7

Introductie

Objectdetectie is een groot gebied in computervisie en een van de belangrijkste toepassingen van computervisie "in het wild".

Objectdetectie is niet zo gestandaardiseerd als beeldclassificatie, vooral omdat de meeste nieuwe ontwikkelingen doorgaans worden gedaan door individuele onderzoekers, beheerders en ontwikkelaars, in plaats van door grote bibliotheken en frameworks. Het is moeilijk om de benodigde hulpprogrammascripts in een framework als TensorFlow of PyTorch te verpakken en de API-richtlijnen te handhaven die de ontwikkeling tot dusver hebben geleid.

Dit maakt objectdetectie iets complexer, doorgaans uitgebreider (maar niet altijd) en minder benaderbaar dan beeldclassificatie.

Gelukkig voor de massa heeft Ultralytics een eenvoudige, zeer krachtige en mooie objectdetectie-API ontwikkeld rond hun YOLOv5, die door andere onderzoeks- en ontwikkelingsteams is uitgebreid naar nieuwere versies, zoals YOLOv7.

In deze korte handleiding voeren we objectdetectie uit in Python, met ultramoderne YOLOv7.

YOLO Landschap en YOLOv7

YOLO (je kijkt maar รฉรฉn keer) is een methodologie, evenals een familie van modellen die zijn gebouwd voor objectdetectie. Sinds de oprichting in 2015 zijn YOLOv1, YOLOv2 (YOLO9000) en YOLOv3 voorgesteld door dezelfde auteur(s) - en de deep learning-gemeenschap ging door met open source-ontwikkelingen in de daaropvolgende jaren.

YOLov5 . van ultralytica is de eerste grootschalige implementatie van YOLO in PyTorch, waardoor het toegankelijker is dan ooit tevoren, maar de belangrijkste reden waarom YOLOv5 zo'n voet aan de grond heeft gekregen, is ook de prachtig eenvoudige en krachtige API die eromheen is gebouwd. Het project abstraheert de onnodige details, terwijl het aanpasbaarheid mogelijk maakt, praktisch alle bruikbare exportformaten, en maakt gebruik van verbazingwekkende praktijken die het hele project zowel efficiรซnt als optimaal maken.

YOLOv5 is nog steeds het belangrijkste project om objectdetectiemodellen mee te bouwen, en veel repositories die de YOLO-methode willen bevorderen, beginnen met YOLOv5 als basislijn en bieden een vergelijkbare API (of gewoon het project splitsen en er bovenop bouwen). Zo is het geval van YOLOR (je leert maar รฉรฉn representatie) en YOLOv7 die bovenop YOLOR is gebouwd (dezelfde auteur). YOLOv7 is de nieuwste vooruitgang in de YOLO-methodologie en het meest opvallende is dat YOLOv7 nieuwe modelkoppen biedt, die keypoints (skeletten) kunnen uitvoeren en instantiesegmentatie kunnen uitvoeren, naast alleen begrenzingsvakregressie, wat niet standaard was bij eerdere YOLO-modellen.

Dit maakt instance-segmentatie en keypoint-detectie sneller dan ooit tevoren!

Bovendien presteert YOLOv7 sneller en met een hogere mate van nauwkeurigheid dan eerdere modellen vanwege een lager aantal parameters en een hogere rekenefficiรซntie:

Realtime objectdetectie-inferentie in Python met YOLOv7 PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Het model zelf is gemaakt door middel van architecturale veranderingen, evenals het optimaliseren van aspecten van training, genaamd "bag-of-freebies", die de nauwkeurigheid verhoogden zonder de kosten voor gevolgtrekkingen te verhogen.

YOLOv7 . installeren

Het installeren en gebruiken van YOLOv7 komt neer op het downloaden van de GitHub-repository naar uw lokale computer en het uitvoeren van de meegeleverde scripts.

Opmerking: Helaas biedt YOLOv7 op het moment van schrijven geen schone programmatische API zoals YOLOv5, die meestal wordt geladen vanuit torch.hub(), waarbij de GitHub-repository wordt doorgegeven. Dit lijkt een functie te zijn die zou moeten werken, maar die momenteel niet werkt. Als het wordt opgelost, zal ik de gids bijwerken of een nieuwe publiceren op de programmatische API. Voor nu zullen we ons concentreren op de inferentiescripts in de repository.

Toch kunt u in realtime detectie uitvoeren op video's, afbeeldingen, enz. en de resultaten eenvoudig opslaan. Het project volgt dezelfde conventies als YOLOv5, dat een uitgebreide documentatie heeft, dus je zult waarschijnlijk antwoorden op meer nichevragen vinden in de YOLOv5-repository als je die hebt.

Laten we de repository downloaden en wat conclusies trekken:

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

Dit creรซert een yolov7 directory in uw huidige werkdirectory, waarin het project is ondergebracht. Laten we naar die map gaan en de bestanden bekijken:

%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

Opmerking: Op een Google Colab Notebook moet je de magie uitvoeren %cd commando in elke cel waarnaar u uw directory wilt wijzigen yolov7, terwijl de volgende cel u terugbrengt naar uw oorspronkelijke werkmap. Op lokale Jupyter-notebooks, de directory wijzigen eens houdt je erin, dus het is niet nodig om de opdracht meerdere keren opnieuw te geven.

De detect.py zijn de inferentiescripts die detecties uitvoeren en de resultaten opslaan onder runs/detect/video_name, waar u de . kunt specificeren video_name tijdens het bellen naar de detect.py scripts. export.py exporteert het model naar verschillende formaten, zoals ONNX, TFLite, enz. train.py kan worden gebruikt om een โ€‹โ€‹aangepaste YOLOv7-detector te trainen (het onderwerp van een andere handleiding), en test.py kan worden gebruikt om een โ€‹โ€‹detector te testen (geladen uit een bestand met gewichten).

Verschillende extra mappen bevatten de configuraties (cfg), voorbeeldgegevens (inference), gegevens over het construeren van modellen en COCO-configuraties (data), enz.

YOLOv7-maten

Op YOLO gebaseerde modellen schalen goed en worden doorgaans geรซxporteerd als kleinere, minder nauwkeurige modellen en grotere, nauwkeurigere modellen. Deze worden vervolgens ingezet op respectievelijk zwakkere of sterkere apparaten.

YOLOv7 biedt verschillende maten aan en vergelijkt deze met MS COCO:

Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!

Model Testgrootte: APproef AP50test AP75test groep 1 fps batch 32 gemiddelde tijd
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

Afhankelijk van de onderliggende hardware waarop u het model verwacht en de vereiste nauwkeurigheid, kunt u hiertussen kiezen. Het kleinste model haalt meer dan 160FPS op afbeeldingen van formaat 640, op een V100! U kunt ook bevredigende realtime prestaties verwachten op meer gebruikelijke consumenten-GPU's.

Video-inferentie met YOLOv7

Maak een inference-data map om de afbeeldingen en/of video's op te slaan waaruit u wilt detecteren. Ervan uitgaande dat het zich in dezelfde map bevindt, kunnen we een detectiescript uitvoeren met:

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

Dit zal een Qt-gebaseerde video op uw bureaublad oproepen waarin u de live voortgang en gevolgtrekking, frame voor frame kunt zien, evenals de status naar onze standaard uitvoerpijp kunt uitvoeren:

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

Merk op dat het project traag verloopt op CPU-gebaseerde machines (zoals 1000 ms per inferentiestap in de bovenstaande uitvoer, uitgevoerd op een Intel-gebaseerde MacBook Pro uit 2017), en aanzienlijk sneller op GPU-gebaseerde machines (dichter bij ~ 5ms/frame op een V100). Zelfs op CPU-gebaseerde systemen zoals deze, yolov7-tiny.pt draait om 172ms/frame, die weliswaar verre van realtime is, maar toch zeer goed is voor het uitvoeren van deze bewerkingen op een CPU.

Als de run klaar is, kun je de resulterende video vinden onder runs/video_1 (de naam die we hebben opgegeven in de detect.py oproep), opgeslagen als een .mp4:

Realtime objectdetectie-inferentie in Python met YOLOv7 PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Inferentie op afbeeldingen

Inferentie op afbeeldingen komt neer op hetzelfde proces - het leveren van de URL aan een afbeelding in het bestandssysteem en het aanroepen van detect.py:

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

Opmerking: Op het moment van schrijven schaalt de uitvoer de labels niet naar de afbeeldingsgrootte, zelfs niet als u instelt --img SIZE. Dit betekent dat grote afbeeldingen zeer dunne begrenzingslijnen en kleine labels hebben.

Realtime objectdetectie-inferentie in Python met YOLOv7 PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Conclusie

In deze korte handleiding hebben we een korte blik geworpen op YOLOv7, de nieuwste ontwikkeling in de YOLO-familie, die voortbouwt op YOLOR. We hebben bekeken hoe u de repository op uw lokale computer kunt installeren en objectdetectie-inferentiescripts kunt uitvoeren met een vooraf getraind netwerk op video's en afbeeldingen.

In verdere handleidingen behandelen we keypoint-detectie en instantiesegmentatie.

Verder gaan - Praktisch diep leren voor computervisie

Je leergierige karakter maakt dat je verder wilt gaan? We raden aan om onze Type cursus: "Praktisch diep leren voor computervisie met Python".

Realtime objectdetectie-inferentie in Python met YOLOv7 PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Nog een cursus computervisie?

We zullen geen classificatie van MNIST-cijfers of MNIST-mode doen. Ze hebben lang geleden hun deel gediend. Te veel leermiddelen zijn gericht op basisgegevenssets en basisarchitecturen voordat geavanceerde black-box-architecturen de last van de prestaties op zich nemen.

We willen ons concentreren op demystificatie, uitvoerbaarheid, begrip, intuรฏtie en echte projecten. Willen leren hoe je kan een verschil maken? We nemen je mee op een reis van de manier waarop onze hersenen afbeeldingen verwerken tot het schrijven van een onderzoeksclassificatie voor diep leren voor borstkanker tot diepgaande leernetwerken die 'hallucineren', je de principes en theorie leren door middel van praktisch werk, en je uitrusten met de knowhow en tools om een โ€‹โ€‹expert te worden in het toepassen van deep learning om computervisie op te lossen.

Wat zit erin?

  • De eerste principes van visie en hoe computers kunnen worden geleerd om te "zien"
  • Verschillende taken en toepassingen van computervisie
  • De tools van het vak die uw werk gemakkelijker maken
  • Datasets zoeken, maken en gebruiken voor computervisie
  • De theorie en toepassing van convolutionele neurale netwerken
  • Omgaan met domeinverschuiving, gelijktijdig voorkomen en andere vooroordelen in datasets
  • Overdragen Leren en de trainingstijd en computerbronnen van anderen gebruiken in uw voordeel
  • Het bouwen en trainen van een state-of-the-art classifier voor borstkanker
  • Hoe je een gezonde dosis scepsis toepast op mainstream ideeรซn en de implicaties begrijpt van algemeen aanvaarde technieken?
  • De "conceptruimte" van een ConvNet visualiseren met t-SNE en PCA
  • Casestudy's van hoe bedrijven computervisietechnieken gebruiken om betere resultaten te behalen
  • Correcte modelevaluatie, visualisatie van de latente ruimte en het identificeren van de aandacht van het model
  • Domeinonderzoek doen, eigen datasets verwerken en modeltesten opzetten
  • Geavanceerde architecturen, de voortgang van ideeรซn, wat ze uniek maakt en hoe ze te implementeren
  • KerasCV โ€“ een WIP-bibliotheek voor het maken van ultramoderne pijplijnen en modellen
  • Hoe papers te ontleden en te lezen en ze zelf te implementeren?
  • Modellen selecteren afhankelijk van uw toepassing
  • Een end-to-end machine learning-pijplijn maken
  • Landschap en intuรฏtie bij objectdetectie met snellere R-CNN's, RetinaNets, SSD's en YOLO
  • Instantie en semantische segmentatie
  • Realtime objectherkenning met YOLOv5
  • YOLOv5-objectdetectoren trainen
  • Werken met Transformers met KerasNLP (industriรซle WIP-bibliotheek)
  • Transformers integreren met ConvNets om bijschriften van afbeeldingen te genereren
  • DeepDream
  • Optimalisatie van Deep Learning-modellen voor computervisie

Tijdstempel:

Meer van Stapelmisbruik