Grounded SAM 开放世界检测分割
Grounded SAM 将开放词汇目标检测(Grounding DINO)与通用分割(SAM)结合,实现了从任意文本描述出发的开放世界检测与分割,无需针对特定类别训练即可处理新概念。
核心思路
Grounded SAM 的设计思路极为直观:
- 文本描述输入:用户提供目标的自然语言描述
- Grounding DINO 检测:根据文本描述定位目标,输出边界框
- 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,支持视频跟踪分割
- 检测结果在首帧生成,后续帧自动跟踪
- 支持长视频中的目标持久跟踪