Skip to content

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

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 : 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

  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 "segment anything", ce qui la rend précieuse pour les applications industrielles qui nécessitent des résultats rapides.

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

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

  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 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
from ultralytics.models.fastsam import FastSAMPrompt

# 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)

# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device="cpu")

# Everything prompt
results = prompt_process.everything_prompt()

# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
results = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
results = prompt_process.text_prompt(text="a photo of a dog")

# Point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
results = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=results, output="./")
# 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.

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

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

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

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 que tu pourrais suivre pour utiliser FastSAM:

Installation

  1. Clone le dépôt FastSAM :

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

    conda create -n FastSAM python=3.9
    conda activate FastSAM
    
  3. Navigue vers le dépôt cloné et installe les paquets nécessaires :

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

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

Exemple d'utilisation

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

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

    • Segmente tout ce qui se trouve dans une image :

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
      
    • Segmente des objets spĂ©cifiques Ă  l'aide d'une invite textuelle :

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
      
    • Segmente les objets Ă  l'intĂ©rieur d'une boĂ®te de dĂ©limitation (fournis 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]"
      
    • Segmente les objets près 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]"
      

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 :

@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 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
from ultralytics.models.fastsam import FastSAMPrompt

# 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)

# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device="cpu")

# Everything prompt
ann = prompt_process.everything_prompt()

# Bounding box prompt
ann = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
ann = prompt_process.text_prompt(text="a photo of a dog")

# Point prompt
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output="./")

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.



Créé le 2023-11-12, Mis à jour le 2024-07-18
Auteurs : Laughing-q (2), glenn-jocher (13), RizwanMunawar (2), berry-ding (1)

Commentaires