Mô hình Phân đoạn Mọi đối tượng Nhanh (FastSAM)#
Mô hình Phân đoạn Mọi đối tượng 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ụ Phân đoạn Mọi đối tượng. 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 khả dụng của người dùng. FastSAM giảm đáng kể yêu cầu tính toán trong khi vẫn duy trì hiệu năng cạnh tranh, trở thành lựa chọn thực tiễn cho nhiều tác vụ thị giác.
Watch: Object Tracking using FastSAM with Ultralytics
Kiến trúc model#

Tổng quan#
FastSAM được thiết kế để khắc phục các hạn chế của Mô hình Phân đoạn Mọi đối tượng (SAM), một model 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 đối tượng thành hai giai đoạn tuần tự: phân đoạn instance toàn bộ và lựa chọn có hướng dẫn bằng prompt. Giai đoạn đầu tiên sử dụng YOLOv8-seg để tạo các mask phân đoạn của tất cả instance trong ảnh. Ở giai đoạn thứ hai, model xuất vùng quan tâm tương ứng với prompt.
Tính năng chính#
-
Giải pháp thời gian thực: Bằng cách 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ụ phân đoạn mọi đối tượng, hữu ích cho các ứng dụng công nghiệp yêu cầu kết quả nhanh.
-
Hiệu quả và hiệu năng: FastSAM giảm đáng kể yêu cầu tính toán và tài nguyên mà không ảnh hưởng đến chất lượng hiệu năng. Model đạt hiệu năng tương đương SAM nhưng sử dụng ít tài nguyên tính toán hơn rất nhiều, cho phép triển khai ứng dụng theo thời gian thực.
-
Phân đoạn có hướng dẫn bằng prompt: FastSAM có thể phân đoạn bất kỳ đối tượng nào trong ảnh dưới sự hướng dẫn của nhiều loại prompt tương tác khả dụng của người dùng, mang lại tính linh hoạt và khả năng thích ứng trong các kịch bản khác nhau.
-
Dựa trên YOLOv8-seg: FastSAM dựa trên YOLOv8-seg, một bộ phát hiện đối tượng được trang bị nhánh phân đoạn instance. Điều này cho phép model tạo hiệu quả các mask phân đoạn của tất cả instance trong ảnh.
-
Kết quả cạnh tranh trên các 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 trên một NVIDIA RTX 3090 duy nhất, qua đó thể hiện hiệu quả và năng lực của model.
-
Ứng dụng thực tiễn: Phương pháp được đề xuất cung cấp một giải pháp mới, thiết thực cho nhiều tác vụ thị giác 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.
-
Tính khả thi của việc 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ể chi phí tính toán bằng cách đưa một 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ế độ vận hành#
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ế độ vận hành khác nhau như Inference, Validation, Training và Export, được biểu thị bằng emoji ✅ cho các chế độ được hỗ trợ và emoji ❌ cho các chế độ không được hỗ trợ.
| Loại model | Pretrained weight | Các tác vụ được hỗ trợ | Training | Validation | Inference | Export |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Phân đoạn instance | ❌ | ✅ | ✅ | ✅ |
| FastSAM-x | FastSAM-x.pt | Phân đoạn instance | ❌ | ✅ | ✅ | ✅ |
So sánh FastSAM với YOLO#
Tại đây, chúng tôi so sánh FastSAM-s với các biến thể SAM của Meta và các mô hình phân đoạn của Ultralytics, bao gồm YOLO26n-seg:
| Model | Kích thước (MB) | Số tham số (M) | Tốc độ (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s với backbone YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7,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-seg | 6.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-seg | 6,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 độ model giữa các biến thể SAM và các model phân đoạn YOLO. Mặc dù SAM cung cấp 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ả tính toán cao hơn đáng kể.
Tốc độ SAM được đo bằng PyTorch, còn tốc độ YOLO được đo bằng ONNX Runtime. Các phép thử được chạy trên Apple M4 Air 2025 với RAM 16GB bằng torch==2.10.0, ultralytics==8.4.31 và onnxruntime==1.24.4. Để tái hiện phép thử này:
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, nms=False) # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
model = YOLO(onnx_path)
model(ASSETS)Ví dụ sử dụng#
Các model FastSAM dễ dàng tích hợp vào ứng dụng Python của bạn. Ultralytics cung cấp API Python và các 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 một hình ảnh, hãy sử dụng phương thức predict như được hiển thị bên dưới:
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 model pretrained và chạy dự đoán trên một ảnh.
Bằng cách này, bạn có thể chạy inference trên ảnh và lấy toàn bộ results một lần, sau đó chạy inference bằng prompt nhiều lần mà không cần chạy inference nhiều lần.
from ultralytics.models.fastsam import FastSAMPredictor
# Create FastSAMPredictor
overrides = {"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")Tất cả results được trả về trong các ví dụ trên đều là các object Results, cho phép dễ dàng truy cập các mask dự đoán và ảnh nguồn.
Cách sử dụng Val#
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 dạng và phân đoạn tất cả đối tượng dưới cùng một lớp. Do đó, khi chuẩn bị dataset, bạn cần chuyển ID danh mục của tất cả đối tượng thành 0.
Có thể validation model trên một dataset như sau:
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")Cách sử dụng Track#
Để thực hiện tracking đối tượng trên một ảnh, hãy sử dụng phương thức track như minh họa bên dưới:
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 FastSAM chính thức#
FastSAM cũng có sẵn trực tiếp từ kho lưu trữ CASIA-LMC-Lab/FastSAM. Dưới đây là tổng quan ngắn gọn về các bước tiêu biểu bạn có thể thực hiện để sử dụng FastSAM:
Cài đặt#
-
Clone repository FastSAM:
git clone https://github.com/CASIA-LMC-Lab/FastSAM.git -
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 -
Đi đến repository đã clone và cài đặt các package bắt buộc:
cd FastSAM pip install -r requirements.txt -
Cài đặt model CLIP:
pip install git+https://github.com/ultralytics/CLIP.git
Ví dụ sử dụng#
-
Tải xuống một model checkpoint.
-
Sử dụng FastSAM để chạy inference. Các lệnh ví dụ:
-
Phân đoạn mọi đối tượng trong một ả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 text prompt:
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 hộp giới hạn (cung cấp tọa độ hộp ở đị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ể dùng thử FastSAM thông qua bản demo Colab của CASIA-LMC-Lab.
Trích dẫn và ghi nhận đóng góp#
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:
@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ó trên arXiv. Các tác giả đã công khai công trình của mình, và bạn có thể truy cập codebase trên GitHub. Chúng tôi trân trọng những nỗ lực của họ trong việc thúc đẩy lĩnh vực này và giúp công trình của mình dễ tiếp cận hơn với cộng đồng rộng lớn.
FAQ#
FastSAM, viết tắt của Mô hình Phân đoạn Mọi đối tượng Nhanh, là một giải pháp dựa trên mạng nơ-ron tích chập (CNN) hoạt động theo thời gian thực, được thiết kế để giảm yêu cầu tính toán mà vẫn duy trì hiệu năng cao trong các tác vụ phân đoạn đối tượng. Khác với Mô hình Phân đoạn Mọi đối tượng (SAM), vốn 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 toàn bộ instance, sau đó là lựa chọn có hướng dẫn bằng prompt.
FastSAM đạt khả năng phân đoạn theo thời gian thực bằng cách tách tác vụ phân đoạn thành các giai đoạn phân đoạn toàn bộ instance với YOLOv8-seg và lựa chọn có hướng dẫn bằng prompt. Bằng cách tận dụng hiệu quả tính toán của CNN, FastSAM giảm đáng kể yêu cầu tính toán và tài nguyên mà vẫn duy trì hiệu năng cạnh tranh. Phương pháp 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 với các ứng dụng yêu cầu kết quả nhanh.
FastSAM phù hợp với nhiều tác vụ thị giác máy tính yêu cầu hiệu năng 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 cho kiểm soát và đảm bảo chất lượng
- Phân tích video theo thời gian thực cho an ninh và giám sát
- Xe tự hành cho phát hiện và phân đoạn đối tượng
- Ảnh y khoa 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 và linh hoạt trong các kịch bản đa dạng.
Để sử dụng FastSAM cho inference 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 inference, hãy xem phần 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 phân đoạn cho tất cả đối tượng hiển thị.
- Prompt Hộp giới hạn (BBox): Phân đoạn các đối tượng nằm trong một hộp giới hạn được chỉ định.
- Text Prompt: Sử dụng văn bản mô tả để phân đoạn các đối tượng khớp với mô tả.
- Point Prompt: 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 cho phép FastSAM thích ứng với nhiều kịch bản tương tác của người dùng, nâng cao tính hữu ích trong các ứng dụng 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 phần Tính năng chính.