Inferenza di rilevamento di oggetti in tempo reale in Python con YOLOv7 PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Inferenza di rilevamento di oggetti in tempo reale in Python con YOLOv7

Introduzione

Il rilevamento di oggetti è un ampio campo nella visione artificiale e una delle applicazioni più importanti della visione artificiale "in natura".

Il rilevamento degli oggetti non è standardizzato come la classificazione delle immagini, principalmente perché la maggior parte dei nuovi sviluppi viene in genere eseguita da singoli ricercatori, manutentori e sviluppatori, piuttosto che da grandi librerie e framework. È difficile impacchettare gli script di utilità necessari in un framework come TensorFlow o PyTorch e mantenere le linee guida API che hanno guidato lo sviluppo finora.

Ciò rende il rilevamento degli oggetti un po' più complesso, in genere più dettagliato (ma non sempre) e meno accessibile rispetto alla classificazione delle immagini.

Fortunatamente per le masse, Ultralytics ha sviluppato un'API di rilevamento oggetti semplice, molto potente e bella attorno a YOLOv5 che è stata estesa da altri team di ricerca e sviluppo a versioni più recenti, come YOLOv7.

In questa breve guida, eseguiremo il rilevamento di oggetti in Python, con YOLOv7 all'avanguardia.

YOLO Landscape e YOLOv7

YOLO (Guardi solo una volta) è una metodologia, nonché una famiglia di modelli costruiti per il rilevamento di oggetti. Fin dall'inizio nel 2015, YOLOv1, YOLOv2 (YOLO9000) e YOLOv3 sono stati proposti dagli stessi autori e la comunità di deep learning ha continuato negli anni a venire con progressi open source.

YOLOv5 di Ultralytics è la prima implementazione su larga scala di YOLO in PyTorch, che lo ha reso più accessibile che mai, ma il motivo principale per cui YOLOv5 ha guadagnato un tale punto d'appoggio è anche l'API meravigliosamente semplice e potente costruita attorno ad esso. Il progetto astrae i dettagli non necessari, consentendo al contempo la personalizzazione, praticamente tutti i formati di esportazione utilizzabili e impiega pratiche straordinarie che rendono l'intero progetto efficiente e ottimale.

YOLOv5 è ancora il progetto base con cui costruire modelli di Object Detection e molti repository che mirano a far avanzare il metodo YOLO iniziano con YOLOv5 come linea di base e offrono un'API simile (o semplicemente biforca il progetto e costruisci su di esso). Tale è il caso di YOLOR (Impari solo una rappresentazione) e YOLOv7 che si basa su YOLOR (stesso autore). YOLOv7 è l'ultimo progresso nella metodologia YOLO e, in particolare, YOLOv7 fornisce nuove teste di modello, che possono generare punti chiave (scheletri) ed eseguire la segmentazione dell'istanza oltre alla sola regressione del riquadro di delimitazione, che non era standard con i precedenti modelli YOLO.

Ciò rende la segmentazione delle istanze e il rilevamento dei punti chiave più veloci che mai!

Inoltre, YOLOv7 offre prestazioni più rapide e con un grado di accuratezza superiore rispetto ai modelli precedenti grazie a un numero ridotto di parametri e una maggiore efficienza computazionale:

Inferenza di rilevamento di oggetti in tempo reale in Python con YOLOv7 PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Il modello stesso è stato creato attraverso modifiche all'architettura, nonché ottimizzando aspetti dell'allenamento, soprannominati "bag-of-freebies", che hanno aumentato la precisione senza aumentare i costi di inferenza.

Installazione di YOLOv7

L'installazione e l'utilizzo di YOLOv7 si riducono al download del repository GitHub sul computer locale e all'esecuzione degli script forniti con esso.

Nota: Sfortunatamente, al momento della scrittura, YOLOv7 non offre un'API programmatica pulita come YOLOv5, che in genere viene caricata da torch.hub(), passando il repository GitHub. Questa sembra essere una funzionalità che dovrebbe funzionare ma al momento non funziona. Una volta risolto, aggiornerò la guida o ne pubblicherò una nuova sull'API programmatica. Per ora, ci concentreremo sugli script di inferenza forniti nel repository.

Anche così, puoi eseguire il rilevamento in tempo reale su video, immagini, ecc. e salvare facilmente i risultati. Il progetto segue le stesse convenzioni di YOLOv5, che ha un'ampia documentazione, quindi è probabile che troverai risposte a domande più di nicchia nel repository YOLOv5, se ne hai alcune.

Scarichiamo il repository ed eseguiamo alcune inferenze:

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

Questo crea a yolov7 directory nella directory di lavoro corrente, che ospita il progetto. Spostiamoci in quella directory e diamo un'occhiata ai file:

%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

Nota: Su un taccuino di Google Colab, dovrai eseguire la magia %cd comando in ogni cella in cui desideri modificare la directory yolov7, mentre la cella successiva ti riporta alla directory di lavoro originale. Sui notebook Jupyter locali, modifica della directory una volta ti tiene dentro, quindi non è necessario emettere nuovamente il comando più volte.

I detect.py è lo script di inferenza che esegue i rilevamenti e salva i risultati in runs/detect/video_name, dove è possibile specificare il video_name mentre chiami il detect.py script. export.py esporta il modello in vari formati, come ONNX, TFLite, ecc. train.py può essere utilizzato per addestrare un rilevatore YOLOv7 personalizzato (l'argomento di un'altra guida) e test.py può essere utilizzato per testare un rilevatore (caricato da un file di pesi).

Diverse directory aggiuntive contengono le configurazioni (cfg), dati di esempio (inference), dati sulla costruzione di modelli e configurazioni COCO (data), eccetera.

YOLOv7 Taglie

I modelli basati su YOLO si adattano bene e vengono in genere esportati come modelli più piccoli e meno accurati e modelli più grandi e più accurati. Questi vengono quindi distribuiti rispettivamente su dispositivi più deboli o più potenti.

YOLOv7 offre diverse dimensioni e le ha confrontate con MS COCO:

Dai un'occhiata alla nostra guida pratica e pratica per l'apprendimento di Git, con le migliori pratiche, gli standard accettati dal settore e il cheat sheet incluso. Smetti di cercare su Google i comandi Git e in realtà imparare esso!

Modello Dimensioni di prova APtest AP50test AP75test lotto 1 fps lotto 32 tempo medio
YOLOv7 640 51.4% 69.7% 55.9% 161 fps ms 2.8
YOLOv7-X 640 53.1% 71.2% 57.8% 114 fps ms 4.3
YOLOv7-W6 1280 54.9% 72.6% 60.1% 84 fps ms 7.6
YOLOv7-E6 1280 56.0% 73.5% 61.2% 56 fps ms 12.3
YOLOv7-D6 1280 56.6% 74.0% 61.8% 44 fps ms 15.0
YOLOv7-E6E 1280 56.8% 74.4% 62.1% 36 fps ms 18.7

A seconda dell'hardware sottostante su cui ti aspetti che il modello funzioni e della precisione richiesta, puoi scegliere tra di loro. Il modello più piccolo raggiunge oltre 160FPS su immagini di dimensione 640, su un V100! Puoi aspettarti prestazioni soddisfacenti in tempo reale anche sulle GPU consumer più comuni.

Video inferenza con YOLOv7

Creare un inference-data cartella in cui archiviare le immagini e/o i video da cui desideri rilevare. Supponendo che si trovi nella stessa directory, possiamo eseguire uno script di rilevamento con:

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

Ciò richiederà un video basato su Qt sul desktop in cui puoi vedere l'avanzamento in tempo reale e l'inferenza, fotogramma per fotogramma, nonché inviare lo stato al nostro pipe di output standard:

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

Si noti che il progetto funzionerà lentamente su macchine basate su CPU (come 1000 ms per passaggio di inferenza nell'output sopra, eseguito su un MacBook Pro 2017 basato su Intel) e significativamente più veloce su macchine basate su GPU (più vicino a ~ 5 ms/frame su un V100). Anche su sistemi basati su CPU come questo, yolov7-tiny.pt corre a 172ms/frame, che sebbene lontano dal tempo reale, è comunque molto decente per gestire queste operazioni su una CPU.

Una volta terminata la corsa, puoi trovare il video risultante sotto runs/video_1 (il nome che abbiamo fornito nel detect.py chiamata), salvato come un .mp4:

Inferenza di rilevamento di oggetti in tempo reale in Python con YOLOv7 PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Inferenza sulle immagini

L'inferenza sulle immagini si riduce allo stesso processo: fornire l'URL a un'immagine nel filesystem e chiamare detect.py:

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

Nota: Al momento della scrittura, l'output non ridimensiona le etichette alle dimensioni dell'immagine, anche se impostate --img SIZE. Ciò significa che le immagini di grandi dimensioni avranno linee di delimitazione molto sottili e piccole etichette.

Inferenza di rilevamento di oggetti in tempo reale in Python con YOLOv7 PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Conclusione

In questa breve guida, abbiamo dato una breve occhiata a YOLOv7, l'ultimo avanzamento della famiglia YOLO, che si basa su YOLOR. Abbiamo dato un'occhiata a come installare il repository sul tuo computer locale ed eseguire script di inferenza per il rilevamento di oggetti con una rete pre-addestrata su video e immagini.

In ulteriori guide tratteremo il rilevamento dei punti chiave e la segmentazione delle istanze.

Andare oltre - Apprendimento profondo pratico per la visione artificiale

La tua natura curiosa ti fa venire voglia di andare oltre? Ti consigliamo di dare un'occhiata al nostro Portata: "Apprendimento profondo pratico per la visione artificiale con Python".

Inferenza di rilevamento di oggetti in tempo reale in Python con YOLOv7 PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Un altro corso di visione artificiale?

Non faremo la classificazione delle cifre MNIST o della moda MNIST. Hanno servito la loro parte molto tempo fa. Troppe risorse di apprendimento si stanno concentrando su set di dati di base e architetture di base prima di lasciare che le architetture black-box avanzate si assumano il peso delle prestazioni.

Vogliamo concentrarci demistificazione, praticità, e una comprensione reciproca, intuizione ed progetti reali. Vuoi imparare come Puoi fare la differenza? Ti porteremo in un viaggio dal modo in cui il nostro cervello elabora le immagini alla scrittura di un classificatore di apprendimento profondo per la ricerca per il cancro al seno alle reti di apprendimento profondo che "allucinano", insegnandoti i principi e la teoria attraverso il lavoro pratico, fornendoti il know-how e strumenti per diventare un esperto nell'applicazione del deep learning per risolvere la visione artificiale.

Cosa c'è dentro?

  • I primi principi della visione e come si può insegnare ai computer a "vedere"
  • Diversi compiti e applicazioni della visione artificiale
  • Gli strumenti del mestiere che ti semplificheranno il lavoro
  • Trovare, creare e utilizzare set di dati per la visione artificiale
  • La teoria e l'applicazione delle reti neurali convoluzionali
  • Gestione del cambio di dominio, della co-occorrenza e di altri pregiudizi nei set di dati
  • Trasferisci l'apprendimento e utilizza il tempo di formazione e le risorse di calcolo degli altri a tuo vantaggio
  • Costruire e formare un classificatore di cancro al seno all'avanguardia
  • Come applicare una sana dose di scetticismo alle idee tradizionali e comprendere le implicazioni delle tecniche ampiamente adottate
  • Visualizzazione dello "spazio concettuale" di una ConvNet utilizzando t-SNE e PCA
  • Casi di studio su come le aziende utilizzano le tecniche di visione artificiale per ottenere risultati migliori
  • Valutazione corretta del modello, visualizzazione dello spazio latente e identificazione dell'attenzione del modello
  • Esecuzione di ricerche di dominio, elaborazione dei propri set di dati e creazione di test di modello
  • Architetture all'avanguardia, la progressione delle idee, cosa le rende uniche e come realizzarle
  • KerasCV – una libreria WIP per la creazione di pipeline e modelli all'avanguardia
  • Come analizzare e leggere documenti e implementarli da soli
  • Selezione dei modelli in base all'applicazione
  • Creazione di una pipeline di machine learning end-to-end
  • Paesaggio e intuizione sul rilevamento di oggetti con R-CNN, RetinaNet, SSD e YOLO più veloci
  • Istanza e segmentazione semantica
  • Riconoscimento di oggetti in tempo reale con YOLOv5
  • Formazione dei rilevatori di oggetti YOLOv5
  • Utilizzo di Transformers tramite KerasNLP (libreria WIP di livello industriale)
  • Integrazione di Transformers con ConvNets per generare didascalie di immagini
  • Deepdream
  • Ottimizzazione del modello di deep learning per la visione artificiale

Timestamp:

Di più da Impilamento