Skip to content

Grounded SAM 开放世界检测分割

Grounded SAM 将开放词汇目标检测(Grounding DINO)与通用分割(SAM)结合,实现了从任意文本描述出发的开放世界检测与分割,无需针对特定类别训练即可处理新概念。

Grounded SAM架构

核心思路

Grounded SAM 的设计思路极为直观:

  1. 文本描述输入:用户提供目标的自然语言描述
  2. Grounding DINO 检测:根据文本描述定位目标,输出边界框
  3. SAM 分割:以检测框为提示,生成精确的分割掩码
python
from groundingdino.util.inference import load_model, predict
from segment_anything import sam_model_registry, SamPredictor

# 步骤 1: Grounding DINO 开放词汇检测
grounding_model = load_model("groundingdino_swinb_cogcoor.pth", "config.py")
boxes, logits, phrases = predict(
    model=grounding_model,
    image=image,
    caption="dog sitting on grass",
    box_threshold=0.35,
    text_threshold=0.25
)

# 步骤 2: SAM 精确分割
sam = sam_model_registry["vit_h"](checkpoint="sam_vit_h.pth")
sam_predictor = SamPredictor(sam)
sam_predictor.set_image(image)

masks = []
for box in boxes:
    mask, scores, _ = sam_predictor.predict(
        box=box,
        multimask_output=False
    )
    masks.append(mask)

Grounding DINO

Grounding DINO 是 Grounded SAM 的检测模块,结合了 DINO 的自监督特征与 GLIP 的文本-图像融合:

  • 双编码器:Swin Transformer 图像编码器 + BERT 文本编码器
  • 特征融合:在多个尺度上进行文本-图像特征融合
  • 对比去噪训练:借鉴 DN-DETR 的去噪训练策略

开放词汇特性

Grounding DINO 不受固定类别限制,可以检测训练数据中未出现的新概念。例如输入 "astronaut riding a horse" 即可定位此场景中的对象,无需专门训练。

Grounded SAM 的应用

Grounded SAM 在多种场景中展现了强大的开放世界理解能力:

应用场景输入描述输出
自动标注"car, person, traffic light"检测框 + 分割掩码
图像编辑"remove the dog"精确掩码用于 inpainting
数据增强"cabinet, table, chair"自动生成分割标注
机器人抓取"red cup on the table"目标位置与轮廓

Grounded SAM 2

Grounded SAM 2 将能力扩展到视频领域:

  • 使用 SAM 2 替代原始 SAM,支持视频跟踪分割
  • 检测结果在首帧生成,后续帧自动跟踪
  • 支持长视频中的目标持久跟踪

相关资源

最近更新