welcom ! Handel home

2025年2月15日 星期六

Meta Segment Anything Model (SAM) 簡介

 

🔍 Meta Segment Anything Model (SAM) 簡介

Meta Segment Anything Model (SAM) 是 Meta(Facebook)於 2023 年推出的一個 影像分割(Image Segmentation)模型,它能夠自動識別並分割影像中的物體。SAM 被設計為通用的影像分割工具,可以適用於各種應用,如醫學影像分析、自動駕駛、機器視覺等。


🔹 什麼是影像分割 (Segmentation)?

影像分割是一種 電腦視覺技術,它的目標是將影像中的不同區域或物體區分開來。影像分割的類型包括:

  1. 語意分割 (Semantic Segmentation):將影像中的像素分配給不同的類別(如「人」、「車」、「貓」)。
  2. 實例分割 (Instance Segmentation):區分同一類別內的不同物件(如「貓1」、「貓2」)。
  3. 全景分割 (Panoptic Segmentation):結合語意和實例分割,為每個物件提供完整的分類資訊。

SAM 支援所有這些類型,並且比傳統方法更靈活。


🔹 SAM 的核心功能

1️⃣ 任意物體分割 (Segment Anything)

SAM 可以在沒有標註的情況下,自動分割影像中的物體。只要用滑鼠點擊、框選或輸入文本提示,SAM 就能立即產生對應的分割結果。

2️⃣ 多種輸入方式

SAM 支援 三種輸入方式 來控制分割:

  • 點擊 (Points):點擊影像上的特定位置,SAM 會自動分割該物體。
  • 邊界框 (Bounding Boxes):標記出物體的範圍,SAM 會精確分割出該物體。
  • 文字提示 (Text Prompts, 結合 CLIP):在一些應用中,SAM 可以與 CLIP 搭配,透過自然語言描述來自動分割物體。

3️⃣ 高效能 & 可擴展

  • 零樣本學習 (Zero-shot Learning):SAM 不需要額外訓練,即可處理 任何影像
  • 大規模影像數據:SAM 使用了 Meta 的 SA-1B 資料集(110 億張影像) 進行訓練,是目前最大規模的影像分割數據集。
  • 即時分割:SAM 可以 毫秒級運行,支援 即時應用(如影片分割、自動駕駛)。

🔹 SAM 的技術架構

SAM 主要由以下三個部分組成:

  1. 影像編碼器(Image Encoder)
    • SAM 採用 Vision Transformer (ViT-Huge) 作為編碼器,能夠將輸入影像轉換為 高維特徵向量
    • 這個編碼器可以 一次性處理整張影像,大幅提升效率。
  2. 提示編碼器(Prompt Encoder)
    • 處理 使用者輸入(點、框、文字),然後轉換成模型可理解的格式。
  3. 遮罩解碼器(Mask Decoder)
    • 根據影像特徵和使用者提示,生成 精確的物體遮罩(Mask)

🔹 SAM 的應用領域

✅ 1. 醫學影像分析

  • SAM 可用於 自動檢測腫瘤、血管、器官,提升醫學影像處理的效率。
  • 例如:
    python
    sam.predict(image=medical_scan, point=(x, y))

✅ 2. 自動駕駛 & 智慧交通

  • SAM 可用於 即時車輛與行人檢測,提升自駕車的安全性。

✅ 3. AR/VR & 影像編輯

  • SAM 可用於 即時人物分割、背景移除、物件標記,提升影像處理能力。

✅ 4. 遠端感測 & 衛星影像分析

  • SAM 可以自動標註地形、建築物、農田、水域,用於環境監測和氣候研究。

🔹 如何使用 SAM?(Python + PyTorch)

📌 1. 安裝 Segment Anything

bash
pip install torch torchvision pip install git+https://github.com/facebookresearch/segment-anything.git pip install opencv-python matplotlib

📌 2. 下載 SAM 模型

python
import torch from segment_anything import sam_model_registry, SamPredictor import cv2 import numpy as np import matplotlib.pyplot as plt # 下載 SAM 模型(ViT-Huge) sam_checkpoint = "sam_vit_h.pth" model_type = "vit_h" sam = sam_model_registry[model_type](checkpoint=sam_checkpoint) predictor = SamPredictor(sam)

📌 3. 加載影像

python
image = cv2.imread("test_image.jpg") image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) predictor.set_image(image)

📌 4. 使用點擊進行分割

python
input_point = np.array([[500, 300]]) # 指定分割點(X, Y 座標) input_label = np.array([1]) # 1 表示正樣本(前景) masks, scores, logits = predictor.predict( point_coords=input_point, point_labels=input_label, multimask_output=True, ) # 顯示分割結果 plt.imshow(image) plt.imshow(masks[0], alpha=0.5) # 疊加遮罩 plt.show()

🔹 SAM 的優勢 vs. 傳統方法

特性SAM傳統影像分割
訓練需求不需要額外訓練需要大量標註數據
適應性支援 任意影像只能針對特定資料集
輸入方式點擊、框選、文字提示需要完整標註
計算效率高效,適用於即時應用較慢,需大量計算資源
適用場景醫學、交通、工業、AI特定應用,如 X-ray、MRI

🔹 SAM 的未來發展

  1. 進一步壓縮模型,使 SAM 能夠在 手機、邊緣設備 運行。
  2. 結合大語言模型(LLM),讓 SAM 透過文字指令自動分割影像
  3. 擴展到 3D 影像分割,應用於 醫學 CT、LiDAR

🚀 總結

Meta SAM 是一種通用影像分割模型,能夠即時識別和分割任意物體
支援點擊、框選、文字等輸入方式,適用於 醫學、自駕車、影像編輯、衛星分析
開源可用,安裝簡單,適合開發者應用於 AI 影像處理專案

現在你可以試試 SAM 來實現自動影像分割了!🚀🔍

沒有留言: