Segmentation d’images avec SAM 2.1 - Tout-en-un 🖼️
Introduction
La segmentation d’images est une tâche cruciale en vision par ordinateur, utilisĂ©e pour identifier et localiser des objets dans les images. Dans ce tutoriel, nous allons explorer comment utiliser le modèle Segment Anything Model (SAM) version 2.1 pour la segmentation d’images tout-en-un - une fonctionnalitĂ© puissante qui permet au modèle de segmenter n’importe quel objet sans nĂ©cessiter de donnĂ©es d’apprentissage supplĂ©mentaires ou de rĂ©glage fin. Cette capacitĂ© est particulièrement utile dans des applications diverses telles que l’imagerie mĂ©dicale, les vĂ©hicules autonomes et la rĂ©alitĂ© augmentĂ©e.
Prérequis
Pour commencer avec ce tutoriel, assurez-vous d’avoir installĂ© :
📺 Regardez : Les réseaux de neurones expliqués
Vidéo par 3Blue1Brown
- Python 3.10+
- SAM version 2.1
torchnumpy>= 1.24.3matplotlib
Commandes d’installation :
pip install sam-api torch numpy matplotlib
Étape 1 : Configuration du projet
Tout d’abord, clonez le rĂ©fĂ©rentiel contenant le modèle Segment Anything Model (SAM) et ses dĂ©pendances. Cela Setup les Ă©tapes :
- Clonez le référentiel SAM à partir de GitHub.
- Accédez au répertoire cloné.
- Installez les packages Python requis listés dans
requirements.txt.
git clone https://github.com/facebookresearch/segment-anything.git
cd segment-anything
pip install -r requirements.txt
Étape 2 : Mise en œuvre centrale
Dans cette Ă©tape, nous allons charger un modèle prĂ©entraĂ®nĂ© Ă partir de SAM et l’utiliser pour gĂ©nĂ©rer des masques pour les objets dans une image. Cela implique d’initialiser le modèle, de charger l’image d’entrĂ©e et d’appeler la fonction de segmentation.
import torch
from segment_anything import sam_model_registry, SamPredictor
# Initialisez le modèle SAM avec le chemin de point de contrôle approprié.
def initialiser_sam(chemin_point_de_contrĂ´le: str):
"""Initialisez le modèle SAM."""
device = "cuda" if torch.cuda.is_available() else "cpu"
sam = sam_model_registry["vit_h"](point_de_contrĂ´le=chemin_point_de_contrĂ´le)
return SamPredictor(sam.to(device))
# Chargez une image et passez-la à travers le prédicteur SAM.
def générer_mask(chemin_image: str, prédicteur):
"""Générez un masque de segmentation en utilisant l'image chargée."""
prédicteur.set_image(chemin_image)
point_d'entrée = torch.tensor([256., 384.]) # Exemple d'emplacement du point
étiquette_point = torch.tensor([1])
masques, _, _ = prédicteur.prédire(coords_point=point_d'entrée, étiquettes_point=étiquette_point, sortie_multimask=False)
return masques
def principale():
chemin_point_de_contrôle = "./sam_vit_h_4b8939.pth" # Chemin vers les poids du modèle SAM
prédicteur = initialiser_sam(chemin_point_de_contrôle)
chemin_image = "chemin/vers/votre/image.jpg"
masque = générer_mask(chemin_image, prédicteur)
if __name__ == "__main__":
principale()
Étape 3 : Configuration
La configuration de votre Setup SAM implique de dĂ©finir les chemins vers le point de contrĂ´le du modèle et de spĂ©cifier comment les images d’entrĂ©e sont traitĂ©es. Dans cet exemple, nous avons durci certains paramètres pour simplifier mais dans la pratique, ceux-ci seraient configurable via un fichier de configuration ou des arguments en ligne de commande.
# Exemple de configuration du chemin vers le point de contrĂ´le SAM.
CHEMIN_POINT_DE_CONTRÔLE_SAM = "./sam_vit_h_4b8939.pth"
def configurer_sam(chemin_point_de_contrĂ´le: str):
prédicteur = initialiser_sam(CHEMIN_POINT_DE_CONTRÔLE_SAM)
return prédicteur
def configurer_image_d'entrée(chemin_image: str):
chemin_image = "chemin/vers/votre/image.jpg"
prédicteur.set_image(chemin_image)
prédicteur = configurer_sam(CHEMIN_POINT_DE_CONTRÔLE_SAM)
configurer_image_d'entrée("chemin/vers/votre/image.jpg")
Étape 4 : Exécution du code
Pour exĂ©cuter le script, assurez-vous d’avoir un fichier de point de contrĂ´le SAM appropriĂ© dans votre rĂ©pertoire de travail et une image Ă segmenter. ExĂ©cutez la fonction principale qui traitera l’image d’entrĂ©e et gĂ©nĂ©rera des masques de segmentation.
python main.py
# Sortie attendue :
# Un ensemble de masques binaires représentant différents segments dans l'image.
Étape 5 : Conseils avancés
Pour optimiser les performances,considerer utiliser une GPU si disponible pour des temps d’infĂ©rence plus rapides. De plus,expĂ©rimentez avec diffĂ©rents points et Ă©tiquettes d’entrĂ©e pour obtenir des rĂ©sultats de segmentation plus prĂ©cis.
- Optimisation : Utilisez
sortie_multimask=Truelors de l’appel ĂprĂ©dire()pour plusieurs segmentations d’un objet. - Meilleures pratiques : Utilisez la dernière version de SAM (2.1) et mettez rĂ©gulièrement Ă jour vos dĂ©pendances.
Résultats
Ă€ l’issue, vous devriez voir un ensemble de masques binaires correspondant Ă diffĂ©rents objets ou rĂ©gions dans votre image d’entrĂ©e. Ceux-ci peuvent ĂŞtre utilisĂ©s directement pour une analyse ultĂ©rieure telle que la dĂ©tection d’objets, le suivi ou la comprĂ©hension sĂ©mantique.
Aller plus loin
- Explorez la documentation officielle : Documentation SAM 2.1
- Plongez dans le référentiel GitHub SAM : Référentiel du modèle Segment Anything
- En savoir plus sur les cas d’utilisation avancĂ©s tels que la segmentation d’instances et la segmentation panoptique avec SAM.
Conclusion
En utilisant le modèle Segment Anything Model (SAM) 2.1, vous pouvez effectuer une segmentation d’images tout-en-un sur une variĂ©tĂ© d’objets sans nĂ©cessiter de donnĂ©es d’apprentissage spĂ©cialisĂ©es ou de rĂ©glage fin. Ce tutoriel a fourni une vue d’ensemble de la façon de configurer votre environnement, de configurer le modèle et d’effectuer des tâches de segmentation de base.
Bonne codification !
đź’¬ Comments
Comments are coming soon! We're setting up our discussion system.
In the meantime, feel free to contact us with your feedback.