Modèle de segment rapide de tout (FastSAM)
Le modèle Fast Segment Anything (FastSAM) est une nouvelle solution en temps réel basée sur le CNN pour la tâche Segment Anything. Cette tâche est conçue pour segmenter n'importe quel objet dans une image sur la base de diverses invites d'interaction possibles avec l'utilisateur. FastSAM réduit considérablement les demandes de calcul tout en maintenant des performances compétitives, ce qui en fait un choix pratique pour une variété de tâches de vision.
Regarder : Suivi d'objets Ă l'aide de FastSAM avec Ultralytics
Modèle d'architecture
Vue d'ensemble
FastSAM est conçu pour répondre aux limites du modèle Segment Anything (SAM), un modèle Transformer lourd qui nécessite des ressources informatiques considérables. Le site FastSAM découple la tâche Segment Anything en deux étapes séquentielles : lasegmentation de toutes les instances et la sélection guidée par l'invite. La première étape utilise YOLOv8-seg pour produire les masques de segmentation de toutes les instances de l'image. Dans la deuxième étape, elle produit la région d'intérêt correspondant à l'invite.
Caractéristiques principales
-
Solution en temps réel : En tirant parti de l'efficacité de calcul des CNN, FastSAM fournit une solution en temps réel pour la tâche de segmentation, ce qui en fait un outil précieux pour les applications industrielles qui exigent des résultats rapides.
-
Efficacité et performances : FastSAM offre une réduction significative des exigences en matière de calcul et de ressources sans compromettre la qualité des performances. Il permet d'obtenir des performances comparables à celles de SAM , mais avec des ressources informatiques considérablement réduites, ce qui permet une application en temps réel.
-
Segmentation guidée par des invites : FastSAM peut segmenter n'importe quel objet dans une image en se laissant guider par diverses invites d'interaction avec l'utilisateur, ce qui offre une grande souplesse et une grande adaptabilité dans différents scénarios.
-
Basé sur YOLOv8 -seg : FastSAM est basé sur YOLOv8-seg, un détecteur d'objets équipé d'une branche de segmentation d'instances. Cela lui permet de produire efficacement les masques de segmentation de toutes les instances d'une image.
-
Résultats compétitifs sur les tests de référence : Dans la tâche de proposition d'objets sur MS COCO, FastSAM obtient des scores élevés à une vitesse nettement supérieure à celle d'une seule RTX 3090 de , ce qui démontre son efficacité. SAM sur un seul NVIDIA RTX 3090, démontrant ainsi son efficacité et sa capacité.
-
Applications pratiques : L'approche proposée fournit une nouvelle solution pratique pour un grand nombre de tâches de vision à une vitesse vraiment élevée, des dizaines ou des centaines de fois plus rapide que les méthodes actuelles.
-
Faisabilité de la compression des modèles : FastSAM démontre la faisabilité d'une voie qui peut réduire de manière significative l'effort de calcul en introduisant un antécédent artificiel dans la structure, ouvrant ainsi de nouvelles possibilités pour l'architecture de grands modèles pour les tâches de vision générale.
Modèles disponibles, tâches prises en charge et modes de fonctionnement
Ce tableau présente les modèles disponibles avec leurs poids pré-entraînés spécifiques, les tâches qu'ils prennent en charge et leur compatibilité avec différents modes de fonctionnement tels que l'inférence, la validation, l'entraînement et l'exportation, indiqués par des émojis ✅ pour les modes pris en charge et des émojis ❌ pour les modes non pris en charge.
Type de modèle | Poids pré-entraînés | Tâches prises en charge | Inférence | Validation | Formation | Exportation |
---|---|---|---|---|---|---|
FastSAM-s | FastSAM-s.pt | Segmentation des instances | ✅ | ❌ | ❌ | ✅ |
FastSAM-x | FastSAM-x.pt | Segmentation des instances | ✅ | ❌ | ❌ | ✅ |
Exemples d'utilisation
Les modèles FastSAM sont faciles à intégrer dans vos applications Python . Ultralytics fournit une API Python et des commandes CLI conviviales pour rationaliser le développement.
Prévoir l'utilisation
Pour effectuer détection d'objets sur une image, utilisez la fonction predict
comme indiqué ci-dessous :
Exemple
from ultralytics import FastSAM
# Define an inference source
source = "path/to/bus.jpg"
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])
# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])
# Run inference with texts prompt
results = model(source, texts="a photo of a dog")
# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")
Cet extrait démontre la simplicité du chargement d'un modèle pré-entraîné et de l'exécution d'une prédiction sur une image.
Exemple de FastSAMPredictor
De cette manière, il est possible d'effectuer une inférence sur l'image et d'obtenir tous les segments. results
une fois et exécuter plusieurs fois l'inférence des invites sans exécuter plusieurs fois l'inférence.
from ultralytics.models.fastsam import FastSAMPredictor
# Create FastSAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", model="FastSAM-s.pt", save=False, imgsz=1024)
predictor = FastSAMPredictor(overrides=overrides)
# Segment everything
everything_results = predictor("ultralytics/assets/bus.jpg")
# Prompt inference
bbox_results = predictor.prompt(everything_results, bboxes=[[200, 200, 300, 300]])
point_results = predictor.prompt(everything_results, points=[200, 200])
text_results = predictor.prompt(everything_results, texts="a photo of a dog")
Note
Tous les retours results
dans les exemples ci-dessus sont Résultats qui permet d'accéder facilement aux masques prédits et à l'image source.
Utilisation du val
La validation du modèle sur un ensemble de données peut être effectuée comme suit :
Exemple
Veuillez noter que FastSAM ne prend en charge que la détection et la segmentation d'une seule classe d'objets. Cela signifie qu'il reconnaîtra et segmentera tous les objets comme étant de la même classe. Par conséquent, lors de la préparation de l'ensemble de données, vous devez convertir tous les ID de catégories d'objets en 0.
Utilisation de la voie
Pour effectuer un suivi d'objet sur une image, utilisez la fonction track
comme indiqué ci-dessous :
Exemple
FastSAM Utilisation officielle
FastSAM est également disponible directement à partir du dépôt https://github.com/CASIA-IVA-Lab/FastSAM. Voici un bref aperçu des étapes typiques à suivre pour utiliser FastSAM:
Installation
-
Cloner le dépôt FastSAM :
-
Créer et activer un environnement Conda avec Python 3.9 :
-
Naviguez vers le dépôt cloné et installez les paquets requis :
-
Installer le modèle CLIP :
Exemple d'utilisation
-
Télécharger un modèle de point de contrôle.
-
Utilisez FastSAM pour l'inférence. Exemple de commandes :
-
Segmenter tout dans une image :
-
Segmenter des objets spécifiques à l'aide d'un texte explicatif :
-
Segmenter les objets à l'intérieur d'une boîte de délimitation (fournir les coordonnées de la boîte au format xywh) :
-
Segmenter des objets à proximité de points spécifiques :
-
En outre, vous pouvez essayer FastSAM à travers une démo Colab ou sur la démo webHuggingFace pour une expérience visuelle.
Citations et remerciements
Nous tenons à remercier les auteurs de FastSAM pour leurs contributions significatives dans le domaine de la segmentation d'instances en temps réel :
L'article original FastSAM est disponible sur arXiv. Les auteurs ont rendu leur travail public et la base de code est accessible sur GitHub. Nous apprécions leurs efforts pour faire avancer le domaine et rendre leur travail accessible à la communauté élargie.
FAQ
Qu'est-ce que FastSAM et en quoi diffère-t-il de SAM?
FastSAM, abréviation de Fast Segment Anything Model, est une solution en temps réel basée sur un réseau de neurones convolutifs (CNN) conçue pour réduire les exigences de calcul tout en maintenant des performances élevées dans les tâches de segmentation d'objets. Contrairement au modèle Segment Anything (SAM), qui utilise une architecture plus lourde basée sur un transformateur, FastSAM s'appuie sur Ultralytics YOLOv8 -seg pour une segmentation efficace des instances en deux étapes : une segmentation de toutes les instances suivie d'une sélection guidée par des invites.
Comment FastSAM parvient-il à réaliser une segmentation en temps réel ?
FastSAM réalise une segmentation en temps réel en découplant la tâche de segmentation en une segmentation tout-en-un avec YOLOv8-seg et des étapes de sélection guidées par l'invite. En utilisant l'efficacité de calcul des CNN, FastSAM permet de réduire considérablement les exigences en matière de calcul et de ressources tout en maintenant des performances compétitives. Cette approche en deux étapes permet à FastSAM de fournir une segmentation rapide et efficace adaptée aux applications nécessitant des résultats rapides.
Quelles sont les applications pratiques de FastSAM?
FastSAM est pratique pour une variété de tâches de vision par ordinateur qui requièrent une performance de segmentation en temps réel. Les applications comprennent
- Automatisation industrielle pour le contrôle et l'assurance de la qualité
- Analyse vidéo en temps réel pour la sécurité et la surveillance
- Véhicules autonomes pour la détection et la segmentation d'objets
- L'imagerie médicale pour des tâches de segmentation précises et rapides
Sa capacité à gérer diverses interactions avec l'utilisateur rend FastSAM adaptable et flexible pour divers scénarios.
Comment utiliser le modèle FastSAM pour l'inférence dans Python?
Pour utiliser FastSAM pour l'inférence dans Python, vous pouvez suivre l'exemple ci-dessous :
from ultralytics import FastSAM
# Define an inference source
source = "path/to/bus.jpg"
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])
# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])
# Run inference with texts prompt
results = model(source, texts="a photo of a dog")
# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")
Pour plus de détails sur les méthodes d'inférence, consultez la section Prédire l'utilisation de la documentation.
Quels types d'invites le site FastSAM prend-il en charge pour les tâches de segmentation ?
FastSAM prend en charge plusieurs types d'invites pour guider les tâches de segmentation :
- Invite à tout: Génère une segmentation pour tous les objets visibles.
- Boîte de délimitation (BBox) Invite: Segments d'objets à l'intérieur d'une boîte de délimitation spécifiée.
- Invitation textuelle: Utilise un texte descriptif pour segmenter les objets correspondant Ă la description.
- Point Prompt: Permet de segmenter les objets situés à proximité de points spécifiques définis par l'utilisateur.
Cette flexibilité permet à FastSAM de s'adapter à un large éventail de scénarios d'interaction avec l'utilisateur, améliorant ainsi son utilité dans différentes applications. Pour plus d'informations sur l'utilisation de ces invites, reportez-vous à la section Caractéristiques principales.