Link to this sectionMô hình Phân đoạn Bất kỳ 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ụ 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 các lời nhắc (prompt) tương tác khác nhau từ 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 suất cạnh tranh, biến nó thành một 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
Link to this sectionKiến trúc mô hình#

Link to this sectionTổng quan#
FastSAM được thiết kế để giải quyết những hạn chế của Segment Anything Model (SAM), một mô hình Transformer nặng nề với yêu cầu tài nguyên tính toán lớn. FastSAM tách tác vụ segment anything thành hai giai đoạn tuần tự: phân đoạn instance segmentation toàn diện và lựa chọn dựa trên lời nhắc. Giai đoạn đầu tiên sử dụng YOLOv8-seg để tạo các mặt nạ phân đoạn cho tất cả các đối tượng trong ảnh. Trong giai đoạn thứ hai, nó xuất ra vùng quan tâm (region-of-interest) tương ứng với lời nhắc.
Link to this sectionTính năng chính#
-
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ụ segment anything, khiến nó trở nên giá trị đối với các ứng dụng công nghiệp yêu cầu kết quả nhanh chóng.
-
Hiệu quả và Hiệu suất: FastSAM giảm đáng kể các yêu cầu về tài nguyên và tính toán mà không ảnh hưởng đến 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 mạnh, cho phép ứng dụng thời gian thực.
-
Phân đoạn dựa trên lời nhắc: FastSAM có thể phân đoạn bất kỳ đối tượng nào trong ảnh được hướng dẫn bởi các lời nhắc tương tác khác nhau 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.
-
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 đối tượng (instance segmentation). Điều này cho phép nó tạo ra các mặt nạ phân đoạn của tất cả các đối tượng trong ảnh một cách hiệu quả.
-
Kết quả cạnh tranh trên các Benchmarks: Đối với tác vụ đề xuất đối tượng trên MS COCO, FastSAM đạt điểm số cao ở tốc độ nhanh hơn đáng kể so với SAM trên một card NVIDIA RTX 3090 duy nhất, chứng minh hiệu quả và năng lực của nó.
-
Ứng dụng thực tế: Phương pháp đượ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 máy tính 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.
-
Tính khả thi của 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ố tiên nghiệm 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 đối với các tác vụ thị giác máy tính tổng quát.
Link to this sectionCác model có sẵn, tác vụ được hỗ trợ và chế độ vận hành#
Bảng này trình bày các model có sẵn với trọng số pretrained cụ thể của chúng, các tác vụ mà 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ư Suy luận, Xác thực, Huấn luyện và Xuất, được chỉ định 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 model | Trọng số Pretrained | Các tác vụ được hỗ trợ | Suy luận | Validation | Huấn luyện | Xuất (Export) |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Phân đoạn Instance | ✅ | ❌ | ❌ | ✅ |
| FastSAM-x | FastSAM-x.pt | Phân đoạn Instance | ✅ | ❌ | ❌ | ✅ |
Link to this sectionSo sánh FastSAM và YOLO#
Tại đây chúng tôi so sánh các mô hình SAM 2 của Meta, bao gồm biến thể SAM2-t nhỏ nhất, với các mô hình phân đoạn của Ultralytics bao gồm YOLO26n-seg:
| Mô hình | Kích thước (MB) | 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 YOLOv8 backbone | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (nhỏ hơn 11.0x) | 3.4 (ít hơn 11.4x) | 24.8 (nhanh hơn 945x) |
| Ultralytics YOLO11n-seg | 6.2 (nhỏ hơn 12.6x) | 2.9 (ít hơn 13.4x) | 24.3 (nhanh hơn 964x) |
| Ultralytics YOLO26n-seg | 6.7 (nhỏ hơn 11.7x) | 2.7 (ít hơn 14.4x) | 25.2 (nhanh hơn 930x) |
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. 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ả 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 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 thử nghiệm 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)
model = YOLO(onnx_path)
model(ASSETS)Link to this sectionVí 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 API Python và các lệnh CLI thân thiện với người dùng để tinh giản quy trình phát triển.
Link to this sectionCách sử dụng Predict#
Để thực hiện object detection trê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 mô hình đã được huấn luyện sẵn và thực hiện dự đoán trên một hình ảnh.
Bằng cách này, bạn có thể chạy suy luận trên hình ả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 lời nhắc nhiều lần mà không cần phải thực hiện 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")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ạ dự đoán và hình ảnh nguồn.
Link to this sectionCách sử dụng Val#
Việc đánh giá (validation) mô hình trên một tập dữ liệu có thể được thực hiện 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")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 dạng và phân đoạn tất cả các đối tượng như 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.
Link to this sectionCách sử dụng Track#
Để thực hiện theo dõi đối tượng (object tracking) trên một hình ảnh, hãy sử dụng phương thức track như được hiển thị 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)Link to this sectionCách sử dụng FastSAM chính thức#
FastSAM cũng có sẵn trực tiếp từ kho lưu trữ https://github.com/CASIA-IVA-Lab/FastSAM. Đâ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:
Link to this sectionCài đặt#
-
Sao chép (clone) kho lưu trữ FastSAM:
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git -
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 -
Di chuyển đế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 -
Cài đặt mô hình CLIP:
pip install git+https://github.com/ultralytics/CLIP.git
Link to this sectionVí dụ sử dụng#
-
Tải xuống model checkpoint.
-
Sử dụng FastSAM để suy luận. Các lệnh ví dụ:
-
Phân đoạn mọi thứ 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 lời nhắc 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.
Link to this sectionTrí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 quan trọng của họ trong lĩnh vực phân đoạn đối tượng 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 gốc về FastSAM có thể được tìm thấy trên arXiv. Các tác giả đã công bố công trình của họ một cách công khai và mã nguồn có thể được truy cập trên GitHub. Chúng tôi đánh giá cao những 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ọ trở nên dễ tiếp cận đối với cộng đồng rộng lớn hơn.
Link to this sectionFAQ#
Link to this sectionFastSAM là gì và nó khác gì so với SAM?#
FastSAM, viết tắt của Fast Segment Anything Model, là một giải pháp thời gian thực dựa trên convolutional neural network (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 trong các tác vụ phân đoạn đối tượng. Không giống như Segment Anything Model (SAM), vốn 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 đối tượng hiệu quả trong hai giai đoạn: phân đoạn toàn bộ đối tượng theo sau là lựa chọn dựa trên lời nhắc.
Link to this sectionFastSAM đạ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 các giai đoạn phân đoạn toàn bộ đối tượng với YOLOv8-seg và lựa chọn dựa trên lời nhắc. 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ể các yêu cầu về tài nguyên và tính toá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 cung cấp khả năng phân đoạn nhanh và hiệu quả, phù hợp cho các ứng dụng yêu cầu kết quả nhanh chóng.
Link to this sectionCá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 soát 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 nhanh và chính xác
Khả năng xử lý các lời nhắc tương tác khác nhau từ người dùng làm cho FastSAM trở nên thích ứng và linh hoạt cho các tình huống đa dạng.
Link to this sectionLàm thế nào để tôi sử dụng mô hình FastSAM cho suy luận trong Python?#
Để sử dụng FastSAM cho suy luận trong Python, bạn có thể làm theo ví dụ 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")Để 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.
Link to this sectionFastSAM hỗ trợ những loại lời nhắc nào cho các tác vụ phân đoạn?#
FastSAM hỗ trợ nhiều loại lời nhắc để hướng dẫn các tác vụ phân đoạn:
- Everything Prompt: Tạo phân đoạn cho tất cả các đối tượng có thể nhìn thấy.
- Bounding Box (BBox) Prompt: Phân đoạn các đối tượng trong một bounding box đượ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 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 của người dùng, nâng cao tiện ích 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 lời nhắc này, hãy tham khảo phần Key Features.