为什么需要辅助标注
手动标注几万张图片耗时数周,且容易出现漏标和错标。开放词汇检测(Open-Vocabulary Detection)模型可以:
- 输入文字描述的类别
- 直接输出检测框
- 人工只做最终校验
流程:
原始图片
↓
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 格式,开始训练
第一轮训出小模型后,用模型自身的预测结果辅助后续标注,形成正向循环(主动学习)。
