🎯 数据标注 · 计算机视觉核心

检测标注 · 定位万物的基础

在图像中找到目标并用框/轮廓标出位置和类别,是自动驾驶、安防监控、工业质检等 CV 项目的基石。比分类复杂得多——不仅要认出"是什么",还要标出"在哪里"。

① 什么是检测标注?

📦

定义

在图像/视频上为每个目标绘制几何框(矩形/多边形/关键点),并标注其类别

🚗

应用场景

自动驾驶(行人/车辆/信号灯)、安防(人脸/行为)、医疗影像、工业缺陷检测等

⚡

难度

★★★☆☆ 中级,需要画框+贴标签+处理遮挡密集场景,耗时约为分类的 5-20 倍

💡 检测标注 vs 分类标注的核心区别:分类只关心"这张图整体是什么",检测还要回答"目标在哪里、有几个"。每张图标注一条 → 每张图标注 N 个框,工作量陡增。

② 四种标注类型

1

矩形框 Bounding Box

最经典的检测标注:用 (x, y, width, height) 四个值框出目标位置。标注快、计算简单,但只标注"在哪"不标注"形状"。

person 0.95
car 0.88
dog 0.92
✅ 优点
标注速度快(2-5秒/框);数据量小(每框4个数值);模型成熟(YOLO/Faster R-CNN 全支持)
⚠️ 局限
框内含背景噪声;不规则形状(如弯曲、旋转)标注不精确;遮挡密集场景难以分开
2

多边形分割 Instance Segmentation

沿目标轮廓描点形成多边形,精确勾勒不规则形状。可细分为实例分割(每个目标独立)和语义分割(按类别填色)。

✅ 优点
形状精确到像素级;适合不规则目标(医学影像、自动驾驶路沿);分割模型(Mask R-CNN/SAM)效果好
⚠️ 局限
标注慢(10-30秒/目标);数据量大(每目标多个坐标点);标注员培训成本高
3

关键点 Keypoint / Pose

在目标上标注预定义的关键点位置(如人体的 17 个关节点),用于姿态估计、手势识别、动作分析。

head L_hand R_hand torso L_elbow R_elbow hip L_foot R_foot
常见关键点配置(COCO 格式):
人体姿态:17 个点(鼻、眼、耳、肩、肘、腕、髋、膝、踝)
人脸 68 点:轮廓 + 眼眉 + 鼻 + 嘴唇
手部 21 点:每根手指 4 个关节 + 手腕
动物:耳朵、眼睛、鼻子、四肢关节(4-20 点)
4

3D 框 3D Bounding Box

在 2D 图像上标注带深度信息的立方体框(长宽高+旋转角),用于自动驾驶 3D 检测、AR/VR 场景理解。需配合 LiDAR 点云或相机标定参数。

vehicle depth=5.2m
3D 框标注要素(7 个自由度):
x, y:中心点在图像的 2D 投影
z:目标到相机的深度(米)
w, h, l:宽、高、长(米)
ry:绕 Y 轴旋转角(偏航角)

③ 检测标注工作全流程

1

定义类别体系 & 标注规范

确定要检测哪些类别、每个类别的精确边界(人露出半个身子要不要框?远处小目标要不要标?),产出 detection_guide.md。

# 目标检测标注规范
person: 行人/站立的人 → 框从头顶到脚底,含背包帽子
car: 四轮机动车 → 含后视镜,不含影子/倒影
dog: 犬科动物 → 框紧贴身体轮廓
规则: 遮挡>70% 不标;<10px 不标;截断标可见部分
2

准备图像数据 & 标注工具

按格式准备图像,选择标注工具(桌面/Web/云端)

📤 数据准备
图像格式与目录结构
JPEG/PNG / 视频帧 / 点云
🛠️ 标注工具 (桌面 / Web / 云端,三选一)
🖥️ 桌面
LabelImg · Labelme
🌐 Web 服务
CVAT · Label Studio
☁️ 云端 SaaS
Roboflow · Labelbox
3

批量标注(AI 预标注 + 人工修正)

检测标注工作量远大于分类,AI 预标注 几乎是标配

纯人工:质量高,极慢 AI 预标 + 人工修正:主流方案 视频追踪 + 关键帧修正:CVAT 专属
4

质量控制(QC)

1 IoU 一致性检查 2 mAP 回测 3 漏标/误标排查
IoU 一致性解读(多人交叉标注):
IoU ≥ 0.75 框位置高度一致 → 高质量
0.50 ~ 0.75 基本一致 → 可接受,需复核差异大的
IoU < 0.50 位置差异大 → 重新审标注规范
5

导出 & 训练对接

导出标注结果,转换为模型训练格式

🔍 数据检查
每类目标数量是否均衡?尺寸分布是否合理?
💾 格式转换
→ 工具原始格式 → 统一解析 → 模型训练格式

④ 常用检测标注工具对比

工具 类型 费用 检测标注 亮点
LabelImg ▼ 桌面 GUI 免费 ✅ 强 YOLO/VOC 直出,检测入门首选
Labelme ▼ 桌面 GUI 免费 ✅ 强 矩形框/多边形/关键点全支持
CVAT ▼ Web 服务 免费 ✅ 极强 AI 预标注+视频追踪,Intel 开源
Roboflow ▼ 云端 SaaS 免费+付费 ✅ 强 标注+训练+部署一站式

⑤ 三大数据格式对比

📝

YOLO 格式

每张图配一个 .txt
# 000001.txt
0 0.5156 0.6250 0.3906 0.5208
1 0.2031 0.3125 0.2188 0.4583
class_id:类别编号(0,1,2...)
cx cy:中心点(归一化 0-1)
w h:宽高(归一化 0-1)
→ YOLOv5/v8 训练首选
📋

COCO 格式

一个大 JSON
{
  "images": [...],
  "annotations": [{
    "bbox": [x,y,w,h],
    "category_id": 1
  }],
  "categories": [...]
}
images:图片元信息(id/文件名/宽高)
annotations:每个框(bbox + category_id)
categories:类别定义(id/name)
→ 学术研究/通用标准
📄

PascalVOC 格式

每张图配一个 .xml
<annotation>
 <object>
  <name>dog</...>
  <bndbox>
   <xmin>100</...>
   <xmax>350</...>
  </bndbox>
 </object>
name:类别名(字符串)
xmin/ymin/xmax/ymax:左上右下角点(绝对像素)
pose/truncated/difficult:附加属性
→ 传统/LabelImg 默认
💡 格式转换速查: YOLO → COCO · COCO → YOLO · VOC → YOLO

⑥ 实战:YOLO 格式标注 → 检查 → 训练

# === 1. 目录结构(YOLO 格式标准布局) ===
dataset/
├── images/
│   ├── train/    # 000001.jpg, 000002.jpg ...
│   └── val/
├── labels/
│   ├── train/    # 000001.txt, 000002.txt ...
│   └── val/
└── data.yaml     # 类别配置文件

# === 2. data.yaml 内容 ===
path: ./dataset
train: images/train
val: images/val
nc: 3                # 类别数
names: [<'person', 'car', 'dog'>]

# === 3. Python 检查标注质量 ===
import os, glob
from collections import Counter

# 统计每类目标数量
label_dir = "dataset/labels/train"
class_counts = Counter()
for txt_file in glob.glob(os.path.join(label_dir, "*.txt")):
    with open(txt_file) as f:
        for line in f:
            cls_id = int(line.strip().split()[0])
            class_counts[cls_id] += 1

print("各类别目标数:", dict(class_counts))
# {0: 1500, 1: 800, 2: 200}  ← dog 是长尾类,需要增强

# === 4. 训练 YOLOv8 ===
from ultralytics import YOLO

model = YOLO("yolov8n.pt")        # 加载预训练权重
model.train(
    data="dataset/data.yaml",
    epochs=100,
    imgsz=640,
    batch=16
)
# 训练完 → runs/detect/train/weights/best.pt
✕
点击任意处关闭 · ESC 关闭