Inférence de détection d'objets en Python avec YOLOv5 et PyTorch PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Inférence de détection d'objets en Python avec YOLOv5 et PyTorch

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". D'un côté, il peut être utilisé pour construire des systèmes autonomes qui guident les agents dans des environnements - qu'il s'agisse de robots effectuant des tâches ou de voitures autonomes, mais cela nécessite une intersection avec d'autres domaines. Cependant, la détection d'anomalies (telles que des produits défectueux sur une ligne), la localisation d'objets dans des images, la détection faciale et diverses autres applications de détection d'objets peuvent être effectuées sans recouper d'autres champs.

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. L'un des principaux avantages d'être dans un écosystème est qu'il vous permet de ne pas rechercher d'informations utiles sur les bonnes pratiques, les outils et les approches à utiliser. Avec la détection d'objets, la plupart des gens doivent faire beaucoup plus de recherches sur le paysage du terrain pour avoir une bonne prise en main.

Heureusement pour les masses - Ultralytics a développé une API de détection d'objets simple, très puissante et belle autour de leur implémentation YOLOv5.

Dans ce petit guide, nous effectuerons la détection d'objets en Python, avec YOLOv5 construit par Ultralytics dans PyTorch, en utilisant un ensemble de poids pré-formés formés sur MS COCO.

YOLOv5

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. Vraiment, c'est un exemple de la beauté de la mise en œuvre de logiciels open source et de la façon dont il alimente le monde dans lequel nous vivons.

Le projet fournit des pondérations pré-formées sur MS COCO, un ensemble de données de base sur les objets en contexte, qui peut être utilisé à la fois pour comparer et créer des systèmes généraux de détection d'objets - mais surtout, peut être utilisé pour transférer des connaissances générales sur les objets en contexte à la personnalisation. ensembles de données.

Détection d'objets avec YOLOv5

Avant d'aller de l'avant, assurez-vous d'avoir torch ainsi que le torchvision installée:

! python -m pip install torch torchvision

YOLOv5 dispose d'une documentation détaillée et simple et d'une API magnifiquement simple, comme indiqué sur le référentiel lui-même et dans l'exemple suivant :

import torch

model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
img = 'https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg'  
results = model(img)
fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(results.render()[0])
plt.show()

Le deuxième argument de la hub.load() La méthode spécifie les poids que nous aimerions utiliser. En choisissant n'importe où entre yolov5n à yolov5l6 – nous chargeons dans les poids pré-entraînés MS COCO. Pour les modèles personnalisés :

model = torch.hub.load('ultralytics/yolov5', 'custom', path='path_to_weights.pt')

Dans tous les cas, une fois que vous avez transmis l'entrée au modèle, l'objet renvoyé inclut des méthodes utiles pour interpréter les résultats, et nous avons choisi de render() eux, qui renvoie un tableau NumPy que nous pouvons jeter dans un imshow() appel. Il en résulte un joli format :

Enregistrement des résultats sous forme de fichiers

Vous pouvez enregistrer les résultats de l'inférence sous forme de fichier, à l'aide de la results.save() méthode:

results.save(save_dir='results')

Cela créera un nouveau répertoire s'il n'est pas déjà présent et enregistrera la même image que nous venons de tracer en tant que fichier.

Découper des objets

Vous pouvez également décider de recadrer les objets détectés en tant que fichiers individuels. Dans notre cas, pour chaque étiquette détectée, un certain nombre d'images peuvent être extraites. Ceci est facilement réalisé via le results.crop() méthode, qui recrée un runs/detect/ répertoire, avec expN/crops (où N augmente à chaque exécution), dans lequel un répertoire avec des images recadrées est créé pour chaque étiquette :

results.crop()
Saved 1 image to runs/detect/exp2
Saved results to runs/detect/exp2

[{'box': [tensor(295.09409),
   tensor(277.03699),
   tensor(514.16113),
   tensor(494.83691)],
  'conf': tensor(0.25112),
  'cls': tensor(0.),
  'label': 'person 0.25',
  'im': array([[[167, 186, 165],
          [174, 184, 167],
          [173, 184, 164],

Vous pouvez également vérifier la structure du fichier de sortie avec :

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!

! ls runs/detect/exp2/crops


! ls runs/detect/exp2/crops

Comptage d'objets

Par défaut, lorsque vous effectuez une détection ou imprimez le results objet - vous obtiendrez le nombre d'images sur lesquelles l'inférence a été effectuée pour cet objet results objet (YOLOv5 fonctionne également avec des lots d'images), sa résolution et le nombre de chaque étiquette détectée :

print(results)

Cela se traduit par:

image 1/1: 720x1280 14 persons, 1 car, 3 buss, 6 traffic lights, 1 backpack, 1 umbrella, 1 handbag
Speed: 35.0ms pre-process, 256.2ms inference, 0.7ms NMS per image at shape (1, 3, 384, 640)

Inférence avec des scripts

Vous pouvez également exécuter le script de détection, detect.py, en clonant le dépôt YOLOv5 :

$ git clone https://github.com/ultralytics/yolov5 
$ cd yolov5
$ pip install -r requirements.txt

Et puis en cours d'exécution :

$ python detect.py --source img.jpg

Alternativement, vous pouvez fournir une URL, un fichier vidéo, un chemin vers un répertoire avec plusieurs fichiers, un glob dans un chemin pour ne correspondre qu'à certains fichiers, un lien YouTube ou tout autre flux HTTP. Les résultats sont enregistrés dans le runs/detect répertoire.

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 Python avec YOLOv5 et PyTorch 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 le 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

Conclusion

Dans ce petit guide, nous avons examiné comment effectuer la détection d'objets avec YOLOv5 construit à l'aide de PyTorch.

Horodatage:

Plus de Stackabuse