Modèle de segment rapide de n'importe quoi (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 en fonction 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.
Regarde : Suivi d'objets Ă l'aide de FastSAM avec Ultralytics
Architecture du modèle
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 : la segmentation 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 "segment anything", ce qui la rend précieuse pour les applications industrielles qui nécessitent des résultats rapides.
-
Efficacité et performance : FastSAM offre une réduction significative des exigences en matière de calcul et de ressources sans compromettre la qualité des performances. Il atteint 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 : Pour la tâche de proposition d'objets sur MS COCO, FastSAM obtient des scores élevés à une vitesse nettement supérieure à celle de la tâche de proposition d'objets sur un seul RTX 3090, ce qui démontre son efficacité et sa capacité. 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 de modèle : 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 à 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 spécifiques pré-entraînés, les tâches qu'ils prennent en charge et leur compatibilité avec différents modes de fonctionnement comme Inference, Validation, Training et Export, indiqués par des emojis ✅ pour les modes pris en charge et des emojis ❌ 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 | Exporter |
---|---|---|---|---|---|---|
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 tes applications Python . Ultralytics fournit une API Python et des commandes CLI conviviales pour rationaliser le développement.
Prévoir l'utilisation
Pour effectuer une détection d'objet sur une image, utilise 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 façon, tu peux effectuer une inférence sur l'image et 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 se faire de la manière suivante :
Exemple
Note 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, tu dois convertir tous les ID de catégories d'objets en 0.
Utilisation des pistes
Pour effectuer un suivi d'objet sur une image, utilise 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 que tu pourrais suivre pour utiliser FastSAM:
Installation
-
Clone le dépôt FastSAM :
-
Crée et active un environnement Conda avec Python 3.9 :
-
Navigue vers le dépôt cloné et installe les paquets nécessaires :
-
Installe le modèle CLIP :
Exemple d'utilisation
-
Télécharge un modèle de point de contrôle.
-
Utilise FastSAM pour l'inférence. Exemple de commandes :
-
Segmente tout ce qui se trouve dans une image :
-
Segmente des objets spécifiques à l'aide d'une invite textuelle :
-
Segmente les objets à l'intérieur d'une boîte de délimitation (fournis les coordonnées de la boîte au format xywh) :
-
Segmente les objets près de points spécifiques :
-
De plus, tu peux 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 mis leur travail à la disposition du 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 l'ensemble des instances suivie d'une sélection guidée par l'invite.
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 nécessitent 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 des objets
- L'imagerie médicale pour des tâches de segmentation précises et rapides.
Sa capacité à gérer diverses invites d'interaction 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, tu peux 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, consulte la section Prédire l'utilisation de la documentation.
Quels types d'invites 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 :
- Tout invite: Génère une segmentation pour tous les objets visibles.
- Boîte de délimitation (BBox) Invite: Segments les objets à l'intérieur d'une boîte de délimitation spécifiée.
- Invite Ă lire le texte : Utilise un texte descriptif pour segmenter les objets correspondant Ă la description.
- Point Prompt: Segments d'objets à 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, reporte-toi à la section Caractéristiques principales.