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 : Object Tracking using FastSAM with 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 d'une seule NVIDIA RTX 3090, ce qui démontre son efficacité et ses capacités. SAM sur une seule NVIDIA RTX 3090, démontrant ainsi son efficacité et ses capacités.

  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
ann = prompt_process.everything_prompt()

# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
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
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, 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.

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.



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (11), RizwanMunawar (2), Laughing-q (1), berry-ding (1)

Commentaires