Mô hình Phân đoạn Mọi thứ Nhanh (FastSAM)

Fast Segment Anything Model (FastSAM) là một giải pháp mới, dựa trên CNN thời gian thực cho tác vụ Phân đoạn Mọi thứ (Segment Anything). Tác vụ này được thiết kế để phân đoạn bất kỳ đối tượng nào trong ảnh dựa trên nhiều gợi ý tương tác khác nhau từ người dùng. FastSAM giảm đáng kể nhu cầu tính toán trong khi vẫn duy trì hiệu suất cạnh tranh, biến nó thành lựa chọn thực tế cho nhiều tác vụ thị giác máy tính.



Watch: Object Tracking using FastSAM with Ultralytics

Kiến trúc Model

Tổng quan kiến trúc Fast Segment Anything Model (FastSAM)

Tổng quan

FastSAM được thiết kế để giải quyết các hạn chế của Segment Anything Model (SAM), một mô hình Transformer nặng với yêu cầu tài nguyên tính toán đáng kể. FastSAM tách tác vụ phân đoạn mọi thứ thành hai giai đoạn tuần tự: phân đoạn instance segmentation toàn bộ và lựa chọn có hướng dẫn từ gợi ý. Giai đoạn đầu sử dụng YOLOv8-seg để tạo mặt nạ phân đoạn cho tất cả các instance trong ảnh. Trong giai đoạn thứ hai, nó xuất ra vùng quan tâm (ROI) tương ứng với gợi ý.

Các tính năng chính

  1. Giải pháp thời gian thực: Bằng cách tận dụng hiệu suất tính toán của các CNN, FastSAM cung cấp một giải pháp thời gian thực cho tác vụ phân đoạn mọi thứ, khiến nó trở nên có giá trị cho các ứng dụng công nghiệp yêu cầu kết quả nhanh.

  2. Hiệu suất và tính năng: FastSAM giảm đáng kể nhu cầu về tài nguyên và tính toán mà không làm giảm chất lượng hiệu suất. Nó đạt được hiệu suất tương đương với SAM nhưng với tài nguyên tính toán giảm đáng kể, cho phép triển khai ứng dụng thời gian thực.

  3. Phân đoạn có hướng dẫn bởi gợi ý: FastSAM có thể phân đoạn bất kỳ đối tượng nào trong ảnh dựa trên nhiều gợi ý tương tác từ người dùng, mang lại sự linh hoạt và khả năng thích ứng trong các tình huống khác nhau.

  4. Dựa trên YOLOv8-seg: FastSAM dựa trên YOLOv8-seg, một bộ dò đối tượng được trang bị nhánh phân đoạn instance. Điều này cho phép nó tạo mặt nạ phân đoạn cho tất cả các instance trong ảnh một cách hiệu quả.

  5. Kết quả cạnh tranh trên các Benchmarks: Trong tác vụ đề xuất đối tượng trên MS COCO, FastSAM đạt điểm số cao với tốc độ nhanh hơn đáng kể so với SAM trên một GPU NVIDIA RTX 3090 duy nhất, chứng minh hiệu quả và khả năng của nó.

  6. Ứng dụng thực tế: Phương pháp tiếp cận được đề xuất cung cấp một giải pháp mới, thiết thực cho một số lượng lớn các tác vụ thị giác với tốc độ rất cao, nhanh gấp hàng chục hoặc hàng trăm lần so với các phương pháp hiện tại.

  7. Tính khả thi của việc nén mô hình: FastSAM chứng minh tính khả thi của một hướng đi có thể giảm đáng kể nỗ lực tính toán bằng cách giới thiệu một tham số ưu tiên nhân tạo vào cấu trúc, từ đó mở ra những khả năng mới cho kiến trúc mô hình lớn cho các tác vụ thị giác tổng quát.

Các model khả dụng, tác vụ được hỗ trợ và chế độ vận hành

Bảng này trình bày các model khả dụng với trọng số pretrained cụ thể của chúng, các tác vụ chúng hỗ trợ và khả năng tương thích với các chế độ vận hành khác nhau như Inference (Dự đoán), Validation (Đánh giá), Training (Huấn luyện), và Export (Xuất), được biểu thị bằng biểu tượng ✅ cho các chế độ được hỗ trợ và biểu tượng ❌ cho các chế độ không được hỗ trợ.

Loại ModelWeights Tiền huấn luyệnTác vụ được hỗ trợInferenceValidationTrainingExport
FastSAM-sFastSAM-s.ptInstance Segmentation
FastSAM-xFastSAM-x.ptInstance Segmentation

So sánh FastSAM với YOLO

Dưới đây là bảng so sánh các mô hình SAM 2 của Meta, bao gồm cả biến thể nhỏ nhất SAM2-t, với các mô hình phân đoạn của Ultralytics bao gồm YOLO26n-seg:

ModelKích thước
(MB)
Tham số
(M)
Tốc độ (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s với backbone YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (nhỏ hơn 11.0x)3.4 (ít hơn 11.4x)24.8 (nhanh hơn 945x)
Ultralytics YOLO11n-seg6.2 (nhỏ hơn 12.6x)2.9 (ít hơn 13.4x)24.3 (nhanh hơn 964x)
Ultralytics YOLO26n-seg6.7 (nhỏ hơn 11.7x)2.7 (ít hơn 14.4x)25.2 (nhanh hơn 930x)

Sự so sánh này chứng minh sự khác biệt đáng kể về kích thước và tốc độ model giữa các biến thể SAM và các model phân đoạn YOLO. Trong khi SAM cung cấp các khả năng phân đoạn tự động độc đáo, các model YOLO, đặc biệt là YOLOv8n-seg, YOLO11n-seg và YOLO26n-seg, nhỏ hơn, nhanh hơn và hiệu quả về tính toán hơn đáng kể.

Tốc độ SAM được đo bằng PyTorch, tốc độ YOLO được đo bằng ONNX Runtime. Các bài kiểm tra chạy trên Apple M4 Air 2025 với 16GB RAM sử dụng torch==2.10.0, ultralytics==8.4.31, và onnxruntime==1.24.4. Để tái tạo bài kiểm tra này:

Ví dụ
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLO models (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True)
    model = YOLO(onnx_path)
    model(ASSETS)

Ví dụ sử dụng

Các mô hình FastSAM rất dễ tích hợp vào các ứng dụng Python của bạn. Ultralytics cung cấp các lệnh CLI và Python API thân thiện với người dùng để tối ưu hóa quá trình phát triển.

Cách sử dụng Dự đoán (Predict)

Để thực hiện object detection trên một ảnh, hãy sử dụng phương thức predict như dưới đây:

Ví dụ
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")

Đoạn mã này minh họa sự đơn giản của việc tải một mô hình đã được huấn luyện sẵn và chạy dự đoán trên một ảnh.

Ví dụ về FastSAMPredictor

Bằng cách này, bạn có thể chạy suy luận trên ảnh và nhận tất cả các results phân đoạn một lần, sau đó chạy suy luận cho các gợi ý nhiều lần mà không cần chạy suy luận lại nhiều lần.

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")
Lưu ý

Tất cả các results được trả về trong các ví dụ trên là các đối tượng Results, cho phép truy cập dễ dàng vào các mặt nạ được dự đoán và hình ảnh nguồn.

Cách sử dụng Val

Việc kiểm chứng (Validation) mô hình trên một tập dữ liệu có thể được thực hiện như sau:

Ví dụ
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")

Xin lưu ý rằng FastSAM chỉ hỗ trợ phát hiện và phân đoạn một lớp đối tượng duy nhất. Điều này có nghĩa là nó sẽ nhận diện và phân đoạn tất cả các đối tượng dưới cùng một lớp. Do đó, khi chuẩn bị tập dữ liệu, bạn cần chuyển đổi tất cả ID danh mục đối tượng thành 0.

Cách sử dụng Track

Để thực hiện theo dõi đối tượng trên một ảnh, hãy sử dụng phương thức track như dưới đây:

Ví dụ
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)

Cách sử dụng chính thức của FastSAM

FastSAM cũng có sẵn trực tiếp từ kho lưu trữ https://github.com/CASIA-IVA-Lab/FastSAM. Dưới đây là tổng quan ngắn gọn về các bước điển hình bạn có thể thực hiện để sử dụng FastSAM:

Cài đặt

  1. Sao chép kho lưu trữ FastSAM:

    git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
  2. Tạo và kích hoạt một môi trường Conda với Python 3.9:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
  3. Điều hướng đến kho lưu trữ đã sao chép và cài đặt các gói cần thiết:

    cd FastSAM
    pip install -r requirements.txt
  4. Cài đặt mô hình CLIP:

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

Ví dụ về cách sử dụng

  1. Tải xuống một model checkpoint.

  2. Sử dụng FastSAM để suy luận. Các lệnh ví dụ:

    • Phân đoạn mọi thứ trong ảnh:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
    • Phân đoạn các đối tượng cụ thể bằng cách sử dụng gợi ý văn bản:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
    • Phân đoạn các đối tượng trong một bounding box (cung cấp tọa độ hộp theo định dạng xywh):

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
    • Phân đoạn các đối tượng gần các điểm cụ thể:

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

Ngoài ra, bạn có thể thử FastSAM thông qua Colab demo của CASIA-IVA-Lab.

Trích dẫn và Ghi nhận

Chúng tôi muốn ghi nhận các tác giả của FastSAM vì những đóng góp đáng kể của họ trong lĩnh vực phân đoạn instance thời gian thực:

Trích dẫn
  @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}
  }

Bài báo gốc về FastSAM có thể được tìm thấy trên arXiv. Các tác giả đã công bố công khai công trình của họ và có thể truy cập mã nguồn trên GitHub. Chúng tôi đánh giá cao nỗ lực của họ trong việc thúc đẩy lĩnh vực này và làm cho công trình của họ dễ tiếp cận hơn với cộng đồng rộng lớn.

Câu hỏi thường gặp (FAQ)

FastSAM là gì và nó khác biệt thế nào so với SAM?

FastSAM, viết tắt của Fast Segment Anything Model, là một giải pháp dựa trên convolutional neural network (CNN) thời gian thực được thiết kế để giảm nhu cầu tính toán trong khi vẫn duy trì hiệu suất cao trong các tác vụ phân đoạn đối tượng. Không giống như Segment Anything Model (SAM), sử dụng kiến trúc dựa trên Transformer nặng nề hơn, FastSAM tận dụng Ultralytics YOLOv8-seg để phân đoạn instance hiệu quả theo hai giai đoạn: phân đoạn toàn bộ instance theo sau là lựa chọn có hướng dẫn bởi gợi ý.

FastSAM đạt được hiệu suất phân đoạn thời gian thực như thế nào?

FastSAM đạt được phân đoạn thời gian thực bằng cách tách tác vụ phân đoạn thành phân đoạn toàn bộ instance với YOLOv8-seg và các giai đoạn lựa chọn có hướng dẫn bởi gợi ý. Bằng cách tận dụng hiệu suất tính toán của CNN, FastSAM mang lại sự giảm đáng kể về nhu cầu tài nguyên và tính toán mà vẫn duy trì hiệu suất cạnh tranh. Phương pháp tiếp cận hai giai đoạn này cho phép FastSAM cung cấp khả năng phân đoạn nhanh và hiệu quả, phù hợp cho các ứng dụng đòi hỏi kết quả nhanh chóng.

Các ứng dụng thực tế của FastSAM là gì?

FastSAM rất thiết thực cho nhiều tác vụ computer vision yêu cầu hiệu suất phân đoạn thời gian thực. Các ứng dụng bao gồm:

  • Tự động hóa công nghiệp để kiểm tra và đảm bảo chất lượng
  • Phân tích video thời gian thực cho an ninh và giám sát
  • Autonomous vehicles để phát hiện và phân đoạn đối tượng
  • Hình ảnh y tế cho các tác vụ phân đoạn chính xác và nhanh chóng

Khả năng xử lý nhiều gợi ý tương tác từ người dùng giúp FastSAM trở nên linh hoạt và thích ứng cho các tình huống đa dạng.

Làm thế nào để sử dụng mô hình FastSAM cho việc suy luận trong Python?

Để sử dụng FastSAM cho việc suy luận trong Python, bạn có thể làm theo ví dụ dưới đây:

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

Để biết thêm chi tiết về các phương thức suy luận, hãy xem phần Predict Usage của tài liệu.

FastSAM hỗ trợ những loại gợi ý nào cho các tác vụ phân đoạn?

FastSAM hỗ trợ nhiều loại gợi ý để hướng dẫn các tác vụ phân đoạn:

  • Gợi ý Everything (Mọi thứ): Tạo phân đoạn cho tất cả các đối tượng hiển thị.
  • Gợi ý Bounding Box (BBox): Phân đoạn các đối tượng trong một bounding box được chỉ định.
  • Gợi ý Văn bản (Text): Sử dụng văn bản mô tả để phân đoạn các đối tượng khớp với mô tả đó.
  • Gợi ý Điểm (Point): Phân đoạn các đối tượng gần các điểm cụ thể do người dùng xác định.

Sự linh hoạt này cho phép FastSAM thích ứng với nhiều tình huống tương tác người dùng khác nhau, nâng cao tính hữu dụng của nó trên các ứng dụng khác nhau. Để biết thêm thông tin về việc sử dụng các gợi ý này, hãy tham khảo phần Key Features.

Bình luận