Skip to content

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

Aperçu de l'architecture du modèle Fast Segment Anything (FastSAM)

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

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

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

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

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

  5. 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é.

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

  7. 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")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640

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

from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Validate the model
results = model.val(data="coco8-seg.yaml")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640

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

from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Track with a FastSAM model on a video
results = model.track(source="path/to/video.mp4", imgsz=640)
yolo segment track model=FastSAM-s.pt source="path/to/video/file.mp4" imgsz=640

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

  1. Cloner le dépôt FastSAM :

    git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
    
  2. Créer et activer un environnement Conda avec Python 3.9 :

    conda create -n FastSAM python=3.9
    conda activate FastSAM
    
  3. Naviguez vers le dépôt cloné et installez les paquets requis :

    cd FastSAM
    pip install -r requirements.txt
    
  4. Installer le modèle CLIP :

    pip install git+https://github.com/ultralytics/CLIP.git
    

Exemple d'utilisation

  1. Télécharger un modèle de point de contrôle.

  2. Utilisez FastSAM pour l'inférence. Exemple de commandes :

    • Segmenter tout dans une image :

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
      
    • Segmenter des objets spĂ©cifiques Ă  l'aide d'un texte explicatif :

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
      
    • Segmenter les objets Ă  l'intĂ©rieur d'une boĂ®te de dĂ©limitation (fournir les coordonnĂ©es de la boĂ®te au format xywh) :

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
      
    • Segmenter des objets Ă  proximitĂ© de points spĂ©cifiques :

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"
      

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 :

@misc{zhao2023fast,
      title={Fast Segment Anything},
      author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
      year={2023},
      eprint={2306.12156},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

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.

📅C réé il y a 1 an ✏️ Mis à jour il y a 2 mois

Commentaires