Chuyển đến nội dung

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

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



Xem: Theo Dõi Đối Tượng bằng FastSAM với Ultralytics

Kiến trúc Mô hình

Tổng quan về kiến trúc Mô hình Phân đoạn Mọi thứ Nhanh (FastSAM)

Tổ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 với các 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 tất cả đối tượng và chọn lọc theo hướng dẫn. Giai đoạn đầu tiên sử dụng YOLOv8-seg để tạo ra các mặt nạ phân đoạn của 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 tương ứng với lời nhắc.

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 quả tính toán của 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ứ, làm cho nó có giá trị cho các ứng dụng công nghiệp đòi hỏi kết quả nhanh chóng.

  2. Hiệu quả và Hiệu suất: FastSAM giúp giảm đáng kể nhu cầu về tính toán và tài nguyê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 đáng kể, cho phép ứng dụng thời gian thực.

  3. Phân đoạn theo hướng dẫn bằng Prompt: FastSAM có thể phân đoạn bất kỳ đối tượng nào trong một hình ảnh được hướng dẫn bởi nhiều prompt tương tác khác nhau của 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 trình phát hiện đối tượng được trang bị nhánh phân đoạn thể hiện. Điều này cho phép nó tạo ra hiệu quả các mặt nạ phân đoạn của tất cả các thể hiện trong một hình ảnh.

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

  6. Các ứ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 với tốc độ thực sự 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 mô hình: FastSAM chứng minh tính khả thi của một đường dẫn có thể giảm đáng kể nỗ lực tính toán bằng cách giới thiệu một kiến thức tiên nghiệm nhân tạo cho cấu trúc, do đó 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 mô hình hiện có, tác vụ được hỗ trợ và chế độ hoạt động

Bảng này trình bày các mô hình có sẵn với trọng số được huấn luyện trước cụ thể của chúng, các tác vụ chúng hỗ trợ và khả năng tương thích của chúng với các chế độ hoạt động khác nhau như Suy luận, Xác thực, Huấn luyệnXuất, được biểu thị bằng biểu tượng cảm xúc ✅ cho các chế độ được hỗ trợ và biểu tượng cảm xúc ❌ cho các chế độ không được hỗ trợ.

Loại mô hình Trọng số được huấn luyện trước Các tác vụ được hỗ trợ Suy luận Xác thực Huấn luyện Xuất
FastSAM-s FastSAM-s.pt Phân đoạn thực thể
FastSAM-x FastSAM-x.pt Phân đoạn thực thể

So sánh FastSAM với YOLO

Ở đây, chúng ta so sánh các mô hình SAM2 của Meta, bao gồm cả biến thể SAM2-t nhỏ nhất, với mô hình phân đoạn nhỏ nhất của Ultralytics, YOLO11n-seg:

Mô hình Kích thước
(MB)
Tham số
(M)
Tốc độ (CPU)
(ms/ảnh)
Meta SAM-b 375 93.7 49401
Meta SAM2-b 162 80.8 31901
Meta SAM2-t 78.1 38.9 25997
MobileSAM 40.7 10.1 25381
FastSAM-s với backbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6.7 (nhỏ hơn 11.7 lần) 3.4 (ít hơn 11.4 lần) 24.5 (nhanh hơn 1061 lần)
Ultralytics YOLO11n-seg 5.9 (nhỏ hơn 13.2 lần) 2.9 (ít hơn 13.4 lần) 30.1 (nhanh hơn 864 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 độ mô hình giữa các biến thể SAM và các mô hình phân đoạn YOLO. Mặc dù SAM cung cấp các khả năng phân đoạn tự động độc đáo, nhưng các mô hình YOLO, đặc biệt là YOLOv8n-seg và YOLO11n-seg, nhỏ hơn, nhanh hơn và hiệu quả về mặt tính toán hơn đáng kể.

Các thử nghiệm được chạy trên Apple M4 Pro 2025 với RAM 24GB sử dụng torch==2.6.0ultralytics==8.3.90. Để tái tạo thử nghiệm 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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    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 Python API và các lệnh CLI thân thiện với người dùng để hợp lý hóa quá trình phát triển.

Sử dụng để dự đoán

Để thực hiện phát hiện đối tượng trên một hình ảnh, sử dụng predict phương pháp như hì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")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640

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

Ví dụ FastSAMPredictor

Bằng cách này, bạn có thể chạy suy luận trên hình ảnh và nhận được tất cả các phân đoạn. results một lần và chạy các lệnh nhắc suy luận nhiều lần mà không cần chạy suy luận 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 đối tượng được trả về results trong các ví dụ trên là Results cho phép truy cập mặt nạ đã dự đoán và hình ảnh nguồn một cách dễ dàng.

Sử dụng để xác thực

Việc xác thực 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")
# 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

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 thuộc cùng một lớp. Do đó, khi chuẩn bị bộ dữ liệu, bạn cần chuyển đổi tất cả ID danh mục đối tượng thành 0.

Sử dụng để theo dõi

Để thực hiện theo dõi đối tượng trên một hình ảnh, hãy sử dụng track phương pháp như hì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)
yolo segment track model=FastSAM-s.pt source="path/to/video.mp4" imgsz=640

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ô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 điểm kiểm tra mô hình.

  2. 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 cách sử dụng dấu 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 bên trong khung giới hạn (cung cấp tọa độ khung 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 bản Colab demo CASIA-IVA-Lab.

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

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

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

FastSAM là gì và nó khác với SAM như thế nào?

FastSAM, viết tắt của Fast Segment Anything Model, là một giải pháp dựa trên mạng nơ-ron tích chập (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 hơn, FastSAM tận dụng Ultralytics YOLOv8-seg để phân đoạn thể hiện hiệu quả theo hai giai đoạn: phân đoạn tất cả thể hiện, sau đó là lựa chọn có hướng dẫn.

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

FastSAM đạt được 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 phân đoạn tất cả các đối tượng bằng YOLOv8-seg và các giai đoạn chọn lọc theo hướng dẫn. Bằng cách tận dụng hiệu quả tính toán của CNN, FastSAM giúp giảm đáng kể nhu cầu về tài nguyên và tính toán đồng thời duy trì hiệu suất 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 chóng và hiệu quả, phù hợp cho các ứng dụng yêu cầu 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ụ thị giác máy tính khác nhau, đòi hỏi 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 cho an ninh và giám sát
  • Xe tự hành để phát hiện và phân đoạn đối tượng
  • Chụp ảnh y tế cho các tác vụ phân đoạn nhanh chóng và chính xác

Khả năng xử lý nhiều loại tương tác người dùng khác nhau giúp FastSAM có tính thích ứng và linh hoạt cho nhiều tình huống khác nhau.

Làm cách nào để sử dụng mô hình FastSAM để suy luận trong Python?

Để sử dụng FastSAM để 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 pháp suy luận, hãy xem phần Sử dụng Dự đoán của tài liệu.

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

FastSAM hỗ trợ nhiều loại dấu nhắc (prompt) để 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 hiển thị.
  • Lời nhắc hộp giới hạn (BBox): Phân đoạn các đối tượng trong một hộp giới hạn được chỉ định.
  • Lời Nhắc Văn Bản: Sử dụng một đoạn văn bản mô tả để phân đoạn các đối tượng phù hợp với mô tả.
  • Point Prompt (Gợi ý điểm): 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.

Tính 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ề cách sử dụng các lời nhắc này, hãy tham khảo phần Các tính năng chính.



📅 Đã tạo 1 năm trước ✏️ Cập nhật 2 tháng trước

Bình luận