Inférence de détection d'objets en temps réel en Python avec YOLOv7 PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Inférence de détection d'objets en temps réel en Python avec YOLOv7

Introduction

La détection d'objets est un vaste domaine de la vision par ordinateur et l'une des applications les plus importantes de la vision par ordinateur "dans la nature".

La détection d'objets n'est pas aussi standardisée que la classification d'images, principalement parce que la plupart des nouveaux développements sont généralement réalisés par des chercheurs, des mainteneurs et des développeurs individuels, plutôt que par de grandes bibliothèques et frameworks. Il est difficile de regrouper les scripts utilitaires nécessaires dans un cadre tel que TensorFlow ou PyTorch et de maintenir les directives de l'API qui ont guidé le développement jusqu'à présent.

Cela rend la détection d'objets un peu plus complexe, généralement plus détaillée (mais pas toujours) et moins accessible que la classification d'images.

Heureusement pour les masses - Ultralytics a développé une API de détection d'objets simple, très puissante et belle autour de leur YOLOv5 qui a été étendue par d'autres équipes de recherche et développement dans des versions plus récentes, telles que YOLOv7.

Dans ce petit guide, nous effectuerons la détection d'objets en Python, avec YOLOv7 à la pointe de la technologie.

Paysage YOLO et YOLOv7

YOLO (vous ne regardez qu'une seule fois) est une méthodologie, ainsi qu'une famille de modèles construits pour la détection d'objets. Depuis la création en 2015, YOLOv1, YOLOv2 (YOLO9000) et YOLOv3 ont été proposés par le(s) même(s) auteur(s) - et la communauté d'apprentissage en profondeur a continué avec des avancées open source au fil des années.

YOLOv5 d'Ultralytics est la première implémentation à grande échelle de YOLO dans PyTorch, ce qui l'a rendu plus accessible que jamais, mais la principale raison pour laquelle YOLOv5 a pris une telle place est également l'API magnifiquement simple et puissante construite autour de lui. Le projet élimine les détails inutiles, tout en permettant la personnalisation, pratiquement tous les formats d'exportation utilisables, et utilise des pratiques étonnantes qui rendent l'ensemble du projet à la fois efficace et aussi optimal que possible.

YOLOv5 est toujours le projet de base pour créer des modèles de détection d'objets, et de nombreux référentiels qui visent à faire progresser la méthode YOLO commencent avec YOLOv5 comme base et offrent une API similaire (ou simplement bifurquent le projet et construisent dessus). Tel est le cas de YOLOR (Vous n'apprenez qu'une seule représentation) et YOLOv7 qui s'appuie sur YOLOR (même auteur). YOLOv7 est la dernière avancée de la méthodologie YOLO et plus particulièrement, YOLOv7 fournit de nouvelles têtes de modèle, qui peuvent produire des points clés (squelettes) et effectuer une segmentation d'instance en plus de la régression par boîte englobante, qui n'était pas standard avec les modèles YOLO précédents.

Cela rend la segmentation des instances et la détection des points clés plus rapides que jamais !

De plus, YOLOv7 fonctionne plus rapidement et avec un degré de précision plus élevé que les modèles précédents en raison d'un nombre de paramètres réduit et d'une efficacité de calcul plus élevée :

Inférence de détection d'objets en temps réel en Python avec YOLOv7 PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Le modèle lui-même a été créé grâce à des changements architecturaux, ainsi qu'à l'optimisation d'aspects de la formation, surnommé "sac de cadeaux", qui a augmenté la précision sans augmenter le coût d'inférence.

Installation de YOLOv7

L'installation et l'utilisation de YOLOv7 se résument à télécharger le référentiel GitHub sur votre machine locale et à exécuter les scripts qui l'accompagnent.

Remarque: Malheureusement, au moment de l'écriture, YOLOv7 n'offre pas d'API de programmation propre telle que YOLOv5, qui est généralement chargée à partir de torch.hub(), en transmettant le référentiel GitHub. Cela semble être une fonctionnalité qui devrait fonctionner mais qui échoue actuellement. Au fur et à mesure qu'il sera corrigé, je mettrai à jour le guide ou en publierai un nouveau sur l'API programmatique. Pour l'instant, nous allons nous concentrer sur les scripts d'inférence fournis dans le référentiel.

Même ainsi, vous pouvez effectuer une détection en temps réel sur des vidéos, des images, etc. et enregistrer facilement les résultats. Le projet suit les mêmes conventions que YOLOv5, qui dispose d'une documentation complète, vous trouverez donc probablement des réponses à des questions plus spécifiques dans le référentiel YOLOv5 si vous en avez.

Téléchargeons le référentiel et effectuons quelques inférences :

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

Cela crée un yolov7 répertoire dans votre répertoire de travail actuel, qui héberge le projet. Déplaçons-nous dans ce répertoire et examinons les fichiers :

%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

Remarque: Sur un bloc-notes Google Colab, vous devrez exécuter la magie %cd commande dans chaque cellule dans laquelle vous souhaitez modifier votre répertoire yolov7, tandis que la cellule suivante vous ramène à votre répertoire de travail d'origine. Sur les blocs-notes Jupyter locaux, modification du répertoire une fois vous garde dedans, il n'est donc pas nécessaire de relancer la commande plusieurs fois.

La detect.py est le script d'inférence qui exécute les détections et enregistre les résultats sous runs/detect/video_name, où vous pouvez spécifier le video_name en appelant le detect.py scripts. export.py exporte le modèle vers différents formats, tels que ONNX, TFLite, etc. train.py peut être utilisé pour former un détecteur YOLOv7 personnalisé (le sujet d'un autre guide), et test.py peut être utilisé pour tester un détecteur (chargé à partir d'un fichier de poids).

Plusieurs répertoires supplémentaires contiennent les configurations (cfg), exemple de données (inference), des données sur la construction de modèles et de configurations COCO (data, Etc.)

Tailles YOLOv7

Les modèles basés sur YOLO évoluent bien et sont généralement exportés sous forme de modèles plus petits et moins précis, et de modèles plus grands et plus précis. Ceux-ci sont ensuite déployés respectivement sur des appareils plus faibles ou plus puissants.

YOLOv7 propose plusieurs tailles et les a comparées à MS COCO :

Consultez notre guide pratique et pratique pour apprendre Git, avec les meilleures pratiques, les normes acceptées par l'industrie et la feuille de triche incluse. Arrêtez de googler les commandes Git et en fait apprendre il!

Modèle Taille de l'essai APtester AP50test AP75test lot 1 ips temps moyen du lot 32
YOLOv7 640 51.4% 69.7% 55.9% 161 images/s 2.8 ms
YOLOv7-X 640 53.1% 71.2% 57.8% 114 images/s 4.3 ms
YOLOv7-W6 1280 54.9% 72.6% 60.1% 84 images/s 7.6 ms
YOLOv7-E6 1280 56.0% 73.5% 61.2% 56 images/s 12.3 ms
YOLOv7-D6 1280 56.6% 74.0% 61.8% 44 images/s 15.0 ms
YOLOv7-E6E 1280 56.8% 74.4% 62.1% 36 images/s 18.7 ms

En fonction du matériel sous-jacent sur lequel vous vous attendez à ce que le modèle s'exécute et de la précision requise, vous pouvez choisir entre eux. Le plus petit modèle atteint plus de 160FPS sur des images de taille 640, sur un V100 ! Vous pouvez également vous attendre à des performances en temps réel satisfaisantes sur les GPU grand public les plus courants.

Inférence vidéo avec YOLOv7

Créer un inference-data dossier pour stocker les images et/ou les vidéos que vous souhaitez détecter. En supposant qu'il se trouve dans le même répertoire, nous pouvons exécuter un script de détection avec :

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

Cela affichera une vidéo basée sur Qt sur votre bureau dans laquelle vous pourrez voir la progression et l'inférence en direct, image par image, ainsi que la sortie de l'état vers notre canal de sortie 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

Notez que le projet s'exécutera lentement sur les machines à processeur (comme 1000 ms par étape d'inférence dans la sortie ci-dessus, exécuté sur un MacBook Pro 2017 basé sur Intel), et beaucoup plus rapidement sur les machines à processeur graphique (plus proche de ~ 5 ms/image sur un V100). Même sur des systèmes basés sur CPU comme celui-ci, yolov7-tiny.pt court à 172ms/frame, qui, bien que loin d'être en temps réel, est toujours très convenable pour gérer ces opérations sur un processeur.

Une fois la course terminée, vous pouvez trouver la vidéo résultante sous runs/video_1 (le nom que nous avons fourni dans le detect.py appel), enregistré en tant que .mp4:

Inférence de détection d'objets en temps réel en Python avec YOLOv7 PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Inférence sur les images

L'inférence sur les images se résume au même processus - fournir l'URL d'une image dans le système de fichiers et appeler detect.py:

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

Remarque: Au moment de l'écriture, la sortie ne redimensionne pas les étiquettes à la taille de l'image, même si vous définissez --img SIZE. Cela signifie que les grandes images auront des lignes de boîte englobantes très fines et de petites étiquettes.

Inférence de détection d'objets en temps réel en Python avec YOLOv7 PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Conclusion

Dans ce petit guide, nous avons brièvement examiné YOLOv7, la dernière avancée de la famille YOLO, qui s'appuie sur YOLOR. Nous avons examiné comment installer le référentiel sur votre machine locale et exécuter des scripts d'inférence de détection d'objets avec un réseau pré-formé sur des vidéos et des images.

Dans d'autres guides, nous couvrirons la détection des points clés et la segmentation des instances.

Aller plus loin - Apprentissage profond pratique pour la vision par ordinateur

Votre nature curieuse vous donne envie d'aller plus loin ? Nous vous recommandons de consulter notre Cours: "Apprentissage profond pratique pour la vision par ordinateur avec Python".

Inférence de détection d'objets en temps réel en Python avec YOLOv7 PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Un autre cours de vision par ordinateur ?

Nous ne ferons pas de classification des chiffres MNIST ou de la mode MNIST. Ils ont fait leur part il y a longtemps. Trop de ressources d'apprentissage se concentrent sur les ensembles de données de base et les architectures de base avant de laisser les architectures de boîte noire avancées assumer le fardeau des performances.

Nous voulons nous concentrer sur démystification, pratique, compréhension, intuition ainsi que de vrais projets. Vouloir apprendre how tu peux faire la différence? Nous vous emmènerons dans un voyage de la façon dont notre cerveau traite les images à l'écriture d'un classificateur d'apprentissage en profondeur de qualité recherche pour le cancer du sein aux réseaux d'apprentissage en profondeur qui "hallucinent", vous enseignant les principes et la théorie par le biais de travaux pratiques, vous équipant du savoir-faire et outils pour devenir un expert dans l'application de l'apprentissage profond pour résoudre la vision par ordinateur.

Qu'est-ce qu'il y a à l'intérieur?

  • Les premiers principes de la vision et comment apprendre aux ordinateurs à « voir »
  • Différentes tâches et applications de la vision par ordinateur
  • Les outils du métier qui faciliteront votre travail
  • Trouver, créer et utiliser des ensembles de données pour la vision par ordinateur
  • La théorie et l'application des réseaux de neurones convolutifs
  • Gestion du changement de domaine, de la cooccurrence et d'autres biais dans les ensembles de données
  • Transférer Apprendre et utiliser le temps de formation et les ressources informatiques des autres à votre avantage
  • Construire et former un classificateur de pointe du cancer du sein
  • Comment appliquer une bonne dose de scepticisme aux idées dominantes et comprendre les implications des techniques largement adoptées
  • Visualiser « l'espace conceptuel » d'un ConvNet à l'aide de t-SNE et PCA
  • Études de cas sur la façon dont les entreprises utilisent les techniques de vision par ordinateur pour obtenir de meilleurs résultats
  • Évaluation appropriée du modèle, visualisation de l'espace latent et identification de l'attention du modèle
  • Effectuer des recherches de domaine, traiter vos propres ensembles de données et établir des tests de modèles
  • Les architectures de pointe, la progression des idées, ce qui les rend uniques et comment les mettre en œuvre
  • KerasCV - une bibliothèque WIP pour créer des pipelines et des modèles de pointe
  • Comment analyser et lire des articles et les mettre en œuvre vous-même
  • Sélection de modèles en fonction de votre application
  • Création d'un pipeline d'apprentissage automatique de bout en bout
  • Paysage et intuition sur la détection d'objets avec Faster R-CNN, RetinaNets, SSD et YOLO
  • Instance et segmentation sémantique
  • Reconnaissance d'objets en temps réel avec YOLOv5
  • Formation aux détecteurs d'objets YOLOv5
  • Travailler avec des transformateurs à l'aide de KerasNLP (bibliothèque WIP de pointe)
  • Intégration de Transformers avec ConvNets pour générer des légendes d'images
  • Rêve profond
  • Optimisation du modèle de Deep Learning pour la vision par ordinateur

Horodatage:

Plus de Stackabuse