Détection d'objets et segmentation d'instances en Python avec Detectron2 PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Détection d'objets et segmentation d'instances en Python avec Detectron2

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 doivent faire beaucoup plus de recherches sur le paysage du terrain pour avoir une bonne prise en main.

Detectron2 de Meta AI - Segmentation d'instance et détection d'objets

Détecteur2 est le package open source de détection, de segmentation et d'estimation de pose d'objets de Meta AI (anciennement FAIR - Facebook AI Research) - tout en un. Étant donné une image d'entrée, il peut renvoyer les étiquettes, les cadres de délimitation, les scores de confiance, les masques et les squelettes d'objets. Ceci est bien représenté sur la page du référentiel :

Il est destiné à être utilisé comme une bibliothèque sur laquelle vous pouvez construire des projets de recherche. Il offre une zoo modèle la plupart des implémentations reposant sur Mask R-CNN et les R-CNN en général, aux côtés de RetinaNet. Ils ont aussi un assez décent Documentation. Exécutons un exemple de script d'inférence !

Commençons par installer les dépendances :

$ pip install pyyaml==5.1
$ pip install 'git+https://github.com/facebookresearch/detectron2.git'

Ensuite, nous allons importer les utilitaires Detectron2 - c'est là que la connaissance du domaine-cadre entre en jeu. Vous pouvez construire un détecteur en utilisant le DefaultPredictor class, en transmettant un objet de configuration qui le configure. La Visualizer offre un support pour visualiser les résultats. MetadataCatalog ainsi que DatasetCatalog appartiennent à l'API de données de Detectron2 et offrent des informations sur les ensembles de données intégrés ainsi que leurs métadonnées.

Importons les classes et les fonctions que nous allons utiliser :

import torch, detectron2
from detectron2.utils.logger import setup_logger
setup_logger()

from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog, DatasetCatalog

En utilisant requests, nous allons télécharger une image et l'enregistrer sur notre disque local :

import matplotlib.pyplot as plt
import requests
response = requests.get('http://images.cocodataset.org/val2017/000000439715.jpg')
open("input.jpg", "wb").write(response.content)
    
im = cv2.imread("./input.jpg")
fig, ax = plt.subplots(figsize=(18, 8))
ax.imshow(cv2.cvtColor(im, cv2.COLOR_BGR2RGB))

Cela se traduit par:

Détection d'objets et segmentation d'instances en Python avec Detectron2 PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Maintenant, nous chargeons la configuration, appliquons les modifications si nécessaire (les modèles fonctionnent sur GPU par défaut, donc si vous n'avez pas de GPU, vous voudrez définir l'appareil sur "cpu" dans la configuration) :

cfg = get_cfg()

cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")


Ici, nous spécifions quel modèle nous aimerions exécuter à partir du model_zoo. Nous avons importé un modèle de segmentation d'instance, basé sur l'architecture Mask R-CNN, et avec un backbone ResNet50. En fonction de ce que vous souhaitez réaliser (détection de points clés, segmentation d'instance, segmentation panoptique ou détection d'objet), vous chargerez le modèle approprié.

Enfin, nous pouvons construire un prédicteur avec cette cfg et exécutez-le sur les entrées ! La Visualizer class est utilisé pour dessiner des prédictions sur l'image (dans ce cas, des instances segmentées, des classes et des boîtes englobantes :

predictor = DefaultPredictor(cfg)
outputs = predictor(im)

v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
fig, ax = plt.subplots(figsize=(18, 8))
ax.imshow(out.get_image()[:, :, ::-1])

Au final, cela se traduit par :

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!

Détection d'objets et segmentation d'instances en Python avec Detectron2 PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

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".

Détection d'objets et segmentation d'instances en Python avec Detectron2 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

Conclusion

La segmentation des instances va au-delà de la segmentation sémantique et note la différence qualitative entre les instances individuelles d'une classe (personne 1, personne 2, etc.) plutôt que simplement si elles appartiennent à une seule. D'une certaine manière, c'est une classification au niveau des pixels.

Dans ce petit guide, nous avons examiné rapidement comment Detectron2 rend la segmentation d'instance et la détection d'objets faciles et accessibles via leur API, à l'aide d'un masque R-CNN.

Horodatage:

Plus de Stackabuse