Ultralytics YOLO27:
Get Started

Mô hình Segment Anything nhanh (FastSAM)#

Mô hình Segment Anything nhanh (FastSAM) là một giải pháp mới dựa trên CNN, hoạt động theo thời gian thực cho tác vụ 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 loại prompt tương tác có thể có từ người dùng. FastSAM giảm đáng kể nhu cầu tính toán mà vẫn duy trì hiệu năng cạnh tranh, trở thành lựa chọn thiết thực cho nhiều tác vụ thị giác máy tính.



Xem: Theo dõi đối tượng bằng FastSAM với Ultralytics

Kiến trúc model#

Tổng quan kiến trúc của Mô hình Segment Anything nhanh (FastSAM)

Tổng quan#

FastSAM được thiết kế để giải quyết những hạn chế của Mô hình Segment Anything (SAM), một model Transformer nặng, đòi hỏi nhiều tài nguyên tính toán. FastSAM tách tác vụ segment anything thành hai giai đoạn tuần tự: phân đoạn instance toàn bộ và lựa chọn theo prompt. Giai đoạn đầu sử dụng YOLOv8-seg để tạo mask phân đoạn cho tất cả instance trong ảnh. Ở giai đoạn thứ hai, model xuất ra vùng quan tâm tương ứng với prompt.

Tính năng chính#

  1. Giải pháp thời gian thực: Tận dụng hiệu quả tính toán của CNN, FastSAM cung cấp giải pháp thời gian thực cho tác vụ segment anything, hữu ích cho các ứng dụng công nghiệp cần kết quả nhanh.

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

  3. Phân đoạn theo prompt: FastSAM có thể phân đoạn bất kỳ đối tượng nào trong ảnh theo nhiều loại prompt tương tác có thể có từ người dùng, mang lại tính 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 model phát hiện đối tượng có nhánh phân đoạn instance. Nhờ đó, model có thể tạo hiệu quả mask phân đoạn cho tất cả instance trong ảnh.

  5. Kết quả cạnh tranh trên benchmark: 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 khi chạy trên một NVIDIA RTX 3090, cho thấy hiệu quả và năng lực của model.

  6. Ứng dụng thực tế: Phương pháp được đề xuất mang đến một giải pháp mới, thiết thực cho nhiều tác vụ thị giác máy tính với tốc độ rất cao, nhanh hơn 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 nén model: FastSAM cho thấy tính khả thi của một hướng tiếp cận có thể giảm đáng kể khối lượng tính toán bằng cách đưa prior 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 model lớn trong các tác vụ thị giác tổng quát.

Các model hiện có, tác vụ được hỗ trợ và chế độ hoạt động#

Bảng này trình bày các model hiện có cùng pretrained weights tương ứng, các tác vụ được hỗ trợ và khả năng tương thích với những chế độ hoạt động khác nhau như Suy luận, Đánh giá, Huấn luyện và Xuất; emoji ✅ biểu thị chế độ được hỗ trợ và emoji ❌ biểu thị chế độ không được hỗ trợ.

Loại modelWeights pretrainedCác tác vụ được hỗ trợHuấn luyệnValidationSuy luậnExport
FastSAM-sFastSAM-s.ptPhân đoạn đối tượng❌✅✅✅
FastSAM-xFastSAM-x.ptPhân đoạn đối tượng❌✅✅✅

So sánh FastSAM với YOLO#

Ở đây, chúng tôi so sánh FastSAM-s với các biến thể SAM của Meta và các model phân đoạn của Ultralytics, bao gồm YOLO26n-seg:

ModelKích thước
(MB)
Tham số
(M)
Tốc độ (CPU)
(ms/ảnh)
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.0 lần)3.4 (ít hơn 11.4 lần)24.8 (nhanh hơn 945 lần)
Ultralytics YOLO11n-seg6.2 (nhỏ hơn 12.6 lần)2.9 (ít hơn 13.4 lần)24.3 (nhanh hơn 964 lần)
Ultralytics YOLO26n-seg6.7 (nhỏ hơn 11.7 lần)2.7 (ít hơn 14.4 lần)25.2 (nhanh hơn 930 lần)

So sánh này cho thấy sự khác biệt đáng kể về kích thước và tốc độ giữa các biến thể SAM và model phân đoạn YOLO. SAM có khả năng phân đoạn tự động độc đáo, nhưng 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ả 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 thử nghiệm được chạy trên Apple M4 Air 2025 với RAM 16GB, sử dụng torch==2.10.0, ultralytics==8.4.31 và onnxruntime==1.24.4. Để tái tạo thử nghiệm này:

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

# Đo hiệu năng 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)

# Lập hồ sơ FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Đo hiệu năng các model YOLO (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, nms=False)  # Đầu NMS-free của YOLO26; không có tác dụng với YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Ví dụ sử dụng#

Các model FastSAM dễ tích hợp vào ứng dụng Python. Ultralytics cung cấp API Python và lệnh CLI thân thiện với người dùng để đơn giản hóa quá trình phát triển.

Cách sử dụng Predict#

Để phân đoạn ảnh, hãy dùng phương thức predict như minh họa bên dưới:

Ví dụ
from ultralytics import FastSAM

# Xác định nguồn inference
source = "path/to/bus.jpg"

# Tạo model FastSAM
model = FastSAM("FastSAM-s.pt")  # hoặc FastSAM-x.pt

# Chạy suy luận trên một ảnh
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# Chạy suy luận với prompt bboxes
results = model(source, bboxes=[439, 437, 524, 709])

# Chạy inference với prompt điểm
results = model(source, points=[[200, 200]], labels=[1])

# Chạy inference với prompt văn bản
results = model(source, texts="a photo of a dog")

# Chạy inference đồng thời với prompt bbox, điểm và văn bản
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 cách tải pretrained model và chạy dự đoán trên ảnh một cách đơn giản.

Ví dụ về FastSAMPredictor

Bằng cách này, bạn có thể chạy inference trên ảnh và lấy tất cả segment results một lần, sau đó chạy inference với prompt nhiều lần mà không cần chạy inference nhiều lần.

from ultralytics.models.fastsam import FastSAMPredictor

# Tạo FastSAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "model": "FastSAM-s.pt", "save": False, "imgsz": 1024}
predictor = FastSAMPredictor(overrides=overrides)

# Phân đoạn tất cả
everything_results = predictor("ultralytics/assets/bus.jpg")

# Inference với prompt
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ả results được trả về trong các ví dụ trên đều là các đối tượng Results, cho phép dễ dàng truy cập mask dự đoán và hình ảnh nguồn.

Cách sử dụng Val#

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à model sẽ nhận diện và phân đoạn tất cả đối tượng thành cùng một lớp. Vì vậy, khi chuẩn bị dataset, bạn cần chuyển tất cả ID danh mục đối tượng thành 0.

Có thể xác thực model trên một dataset như sau:

Ví dụ
from ultralytics import FastSAM

# Tạo model FastSAM
model = FastSAM("FastSAM-s.pt")  # hoặc FastSAM-x.pt

# Xác thực model
results = model.val(data="coco8-seg.yaml")

Theo dõi sử dụng#

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

Ví dụ
from ultralytics import FastSAM

# Tạo model FastSAM
model = FastSAM("FastSAM-s.pt")  # hoặc FastSAM-x.pt

# # Theo dõi bằng model FastSAM trên video
results = model.track(source="path/to/video.mp4", imgsz=640)

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

FastSAM cũng có sẵn trực tiếp trong repository CASIA-LMC-Lab/FastSAM. Dưới đây là tổng quan ngắn về các bước thường thực hiện để sử dụng FastSAM:

Cài đặt#

  1. Clone repository FastSAM:

    git clone https://github.com/CASIA-LMC-Lab/FastSAM.git
  2. Tạo và kích hoạ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 repository đã clone và cài đặt các package cần thiết:

    cd FastSAM
    pip install -r requirements.txt
  4. Cài đặt model CLIP:

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

Ví dụ sử dụng#

  1. Tải xuống checkpoint của model.

  2. Sử dụng FastSAM để suy luận. Ví dụ lệnh:

    • Phân đoạn tất cả đối tượng trong một hình ả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 prompt 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 bên trong bounding box (cung cấp tọa độ box 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 những đ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 bản demo Colab của CASIA-LMC-Lab.

Trích dẫn và lời cảm ơn#

Chúng tôi xin ghi nhận những đóng góp đáng kể của các tác giả FastSAM trong lĩnh vực phân đoạn instance theo 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 FastSAM gốc có thể được tìm thấy trên arXiv. Các tác giả đã công khai công trình của mình và mã nguồn có thể truy cập trên GitHub. Chúng tôi trân trọng nỗ lực của họ trong việc thúc đẩy lĩnh vực này và giúp cộng đồng rộng lớn hơn tiếp cận công trình.

Câu hỏi thường gặp#

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

  • FastSAM đạt được khả năng phân đoạn theo thời gian thực bằng cách chia tác vụ thành hai giai đoạn: phân đoạn tất cả instance bằng YOLOv8-seg và chọn theo prompt. Nhờ tận dụng hiệu quả tính toán của CNN, FastSAM giúp giảm đáng kể nhu cầu tính toán và tài nguyên trong khi vẫn duy trì hiệu suất cạnh tranh. Cách tiếp cận hai giai đoạn này cho phép FastSAM thực hiện phân đoạn nhanh và hiệu quả, phù hợp với các ứng dụng cần kết quả nhanh chóng.

  • FastSAM phù hợp với nhiều tác vụ thị giác máy tính cần hiệu suất phân đoạn theo thời gian thực. Các ứng dụng bao gồm:

    • Tự động hóa công nghiệp để kiểm soát và đảm bảo chất lượng
    • Phân tích video theo thời gian thực phục vụ an ninh và giám sát
    • Phương tiện tự hành để phát hiện và phân đoạn đối tượng
    • Chẩn đoán 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 loại prompt tương tác của người dùng giúp FastSAM thích ứng linh hoạt với các tình huống đa dạng.

  • Để sử dụng FastSAM suy luận bằng Python, bạn có thể làm theo ví dụ bên dưới:

    from ultralytics import FastSAM
    
    # Xác định nguồn inference
    source = "path/to/bus.jpg"
    
    # Tạo model FastSAM
    model = FastSAM("FastSAM-s.pt")  # hoặc FastSAM-x.pt
    
    # Chạy suy luận trên một ảnh
    everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
    
    # Chạy suy luận với prompt bboxes
    results = model(source, bboxes=[439, 437, 524, 709])
    
    # Chạy inference với prompt điểm
    results = model(source, points=[[200, 200]], labels=[1])
    
    # Chạy inference với prompt văn bản
    results = model(source, texts="a photo of a dog")
    
    # Chạy inference đồng thời với prompt bbox, điểm và văn bản
    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 mục Cách sử dụng Predict trong tài liệu.

  • FastSAM hỗ trợ nhiều loại prompt để định hướng các tác vụ phân đoạn:

    • Prompt Everything: Tạo kết quả phân đoạn cho tất cả đối tượng nhìn thấy được.
    • Prompt Bounding Box (BBox): Phân đoạn các đối tượng bên trong bounding box được chỉ định.
    • Prompt văn bản: Sử dụng văn bản mô tả để phân đoạn các đối tượng khớp với nội dung mô tả.
    • Prompt điểm: Phân đoạn các đối tượng gần những điểm do người dùng xác định.

    Tính linh hoạt này giúp FastSAM thích ứng với nhiều tình huống tương tác của người dùng, tăng khả năng ứng dụng trong các lĩnh vực khác nhau. Để biết thêm thông tin về cách sử dụng các prompt này, hãy tham khảo mục Tính năng chính.

Bình luận