共计 1662 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点:驾驶场景数据标注的特殊挑战
驾驶场景数据标注与常规图像标注相比,面临更多复杂情况。以下是几个典型挑战:

- 天气和光照变化 :BDD100K 数据集中包含晴天、雨天、雾天、夜间等多种场景,标注时需要对低对比度、反光、模糊等情况保持标注一致性。
- 动态遮挡处理 :车辆和行人经常被红绿灯、树木或其他车辆部分遮挡,需要标注人员根据经验判断完整轮廓。
- 小目标标注 :远距离的交通标志、行人等小目标容易被忽略,但对自动驾驶系统至关重要。
- 多任务标注需求 :BDD100K 同时需要物体检测、车道线分割、可行驶区域分割等多种标注类型。
工具对比:主流标注工具适用性分析
Labelme
- 优点:轻量级,支持多边形标注,适合小规模数据
- 缺点:缺乏项目管理功能,多人协作困难
CVAT
- 优点:支持视频插帧标注,内置 AI 辅助功能
- 缺点:服务器部署较复杂,学习曲线陡峭
VGG Image Annotator
- 优点:纯 Web 端运行,无需安装
- 缺点:功能较为基础,缺少高级特性
pie
title 工具选择考虑因素
"标注精度要求" : 35
"团队协作需求" : 25
"预算限制" : 20
"项目规模" : 20
核心实现
数据预处理脚本
import piexif
from datetime import datetime
import os
def process_exif(image_path):
"""处理图像 EXIF 信息并标准化时间格式"""
try:
exif_dict = piexif.load(image_path)
# 提取原始拍摄时间
original_time = exif_dict['Exif'][piexif.ExifIFD.DateTimeOriginal]
std_time = datetime.strptime(original_time.decode(), '%Y:%m:%d %H:%M:%S')
# 时区标准化处理
return std_time.strftime('%Y-%m-%dT%H:%M:%SZ')
except Exception as e:
print(f"Error processing {image_path}: {str(e)}")
return None
半自动标注流程设计
- 使用预训练的 YOLOv5 模型生成初始检测框
- 人工修正明显错误的预测结果
- 导出修正后的标注文件
质量控制
def calculate_iou(box1, box2):
"""计算两个边界框的 IoU 值"""
# 解包坐标值 (x1,y1,x2,y2)
x1_1, y1_1, x2_1, y2_1 = box1
x1_2, y1_2, x2_2, y2_2 = box2
# 计算交集区域
x_left = max(x1_1, x1_2)
y_top = max(y1_1, y1_2)
x_right = min(x2_1, x2_2)
y_bottom = min(y2_1, y2_2)
if x_right < x_left or y_bottom < y_top:
return 0.0
intersection_area = (x_right - x_left) * (y_bottom - y_top)
box1_area = (x2_1 - x1_1) * (y2_1 - y1_1)
box2_area = (x2_2 - x1_2) * (y2_2 - y1_2)
return intersection_area / float(box1_area + box2_area - intersection_area)
避坑指南
- 类别混淆 :特别注意区分 ”car” 和 ”truck” 等相似类别
- 遮挡处理 :被遮挡超过 50% 的物体建议标记为 ”occluded” 属性
- 尺寸阈值 :小于 15×15 像素的物体建议忽略
性能优化
- 按场景类型拆分任务包(城市 / 高速 / 郊区)
- 采用分层标注策略:先标关键帧,再插值
- 设置动态质检抽样比例(新标注员抽查率 30%+)
开放式问题
- 如何设计激励机制来提高标注团队的积极性?
- 在有限预算下,应该优先保证标注数量还是质量?
- 当遇到标注规范未覆盖的特殊场景时,应该如何决策?
希望这篇指南能帮助大家更高效地完成 BDD100K 数据标注工作。在实际操作中,建议先小规模试标 100 张图像,统一团队标注标准后再展开大规模标注。
正文完
