目标检测辅助标注:GroundingDINO、SAM2 与 Florence-2 实用指南

为什么需要辅助标注

手动标注几万张图片耗时数周,且容易出现漏标和错标。开放词汇检测(Open-Vocabulary Detection)模型可以:

  1. 输入文字描述的类别
  2. 直接输出检测框
  3. 人工只做最终校验

流程:

原始图片

GroundingDINO(文字→检测框)

人工检查 + 修正

YOLO 训练

GroundingDINO:文字驱动检测

不需要预先训练,直接用类别名称描述来检测:

from groundingdino.util.inference import load_model, load_image, predict

model = load_model("groundingdino_swint_ogc.pth", "config.py")
image_source, image = load_image("image.jpg")

boxes, logits, phrases = predict(
    model=model,
    image=image,
    caption="car . truck . person . traffic light",
    box_threshold=0.35,
    text_threshold=0.25
)

caption 用英文句点分隔类别,box_threshold 控制检测置信度。返回的 boxes 是归一化的 (cx, cy, w, h) 格式,可直接转为 YOLO 标签。

3060Ti 8G 可运行:

  • GroundingDINO-SwinT(轻量,速度快)
  • GroundingDINO-SwinB(更准,显存要求更高)

SAM2:检测框转 Mask

SAM2(Segment Anything Model 2)在 GroundingDINO 输出的框基础上生成精确分割轮廓:

from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor

sam2 = build_sam2("sam2_hiera_small.pt", device="cuda")
predictor = SAM2ImagePredictor(sam2)

predictor.set_image(image_np)

# 用 GroundingDINO 的框作为 prompt
masks, scores, _ = predictor.predict(
    box=boxes_xyxy,  # [x1, y1, x2, y2]
    multimask_output=False
)

组合效果:

GroundingDINO(框)+ SAM2(Mask)= 实例分割标注

适合标注车辆、行人等需要精确轮廓的场景。

Florence-2:一键生成多种格式

微软的 Florence-2 是视觉语言模型,支持多种任务:

from transformers import AutoProcessor, AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("microsoft/Florence-2-large")
processor = AutoProcessor.from_pretrained("microsoft/Florence-2-large")

# 开放词汇检测
inputs = processor(
    text="<OPEN_VOCABULARY_DETECTION>car",
    images=image,
    return_tensors="pt"
)
outputs = model.generate(**inputs)
result = processor.decode(outputs[0], skip_special_tokens=False)

支持的任务标签:

  • <OD> — 通用目标检测
  • <CAPTION> — 图像描述
  • <OPEN_VOCABULARY_DETECTION>类别 — 指定类别检测
  • <OCR> — 文字识别

Qwen2.5-VL:标注质量审核

GroundingDINO 标注后,用 Qwen2.5-VL 批量审核:

# 伪代码示例
for image, label in dataset:
    response = qwen_vl.chat(
        image=image,
        question="图中的标注框是否正确?是否有漏标?"
    )
    if "错误" in response or "漏标" in response:
        flag_for_review(image)

批量过滤低质量标注,减少人工检查量。

推荐工具:X-AnyLabeling

X-AnyLabeling 是集成了上述模型的图形化标注工具:

pip install x-anylabeling
x-anylabeling

内置 GroundingDINO、SAM2、YOLO 等模型,支持:

  • 点击即分割
  • 批量自动预标注
  • 导出 YOLO、COCO、VOC 格式

标注流程建议

1. 用 GroundingDINO 批量预标注(自动化)
2. X-AnyLabeling 打开,批量审查明显错误
3. SAM2 对需要 Mask 的目标细化边界
4. Qwen2.5-VL 辅助审核复杂场景
5. 导出 YOLO 格式,开始训练

第一轮训出小模型后,用模型自身的预测结果辅助后续标注,形成正向循环(主动学习)。