在将 YOLO(目标检测) 和 DeepSORT(目标追踪) 结合时,数据标注需要同时满足 检测 和 追踪 的需求。以下是具体的分阶段标注策略和操作指南:
• 目标:将视频转换为可标注的帧序列。
• 操作:
FFmpeg
或 OpenCV
将视频拆分为图像帧(如每秒抽取10帧)。# FFmpeg拆帧示例(每秒10帧)
ffmpeg -i input.mp4 -vf "fps=10" frames/frame_%04d.jpg
• 推荐工具:
• CVAT(首选):支持视频插值标注、自动ID分配,导出格式兼容YOLO和DeepSORT。
• Label Studio:开源灵活,需自定义追踪标注模板。
• VIA:轻量级,但需手动维护ID。
标注内容:
• 边界框:精确框住目标(误差<3%)。
• Track ID:同一目标在所有帧中保持唯一ID。
• 类别标签:如 person
、car
。
• 属性标记:遮挡(occluded
)、消失(out_of_frame
)。
关键规则:
• ID连续性:目标短暂消失(如被遮挡)后重新出现,仍用原ID。
• 新目标分配新ID:新进入画面的目标分配未使用的ID。
• 合并/分裂处理:群体目标(如密集人群)需明确拆分规则。
Object Tracking
。MOT 1.1
或 COCO-VID
。• YOLO训练格式:
# 每张图像对应一个.txt文件,内容格式:
class_id x_center y_center width height
# 示例:将MOT格式转换为YOLO格式
for frame in all_frames:
with open(f"labels/{frame}.txt", "w") as f:
for det in detections[frame]:
x_center = (det.x1 + det.w/2) / image_width
y_center = (det.y1 + det.h/2) / image_height
f.write(f"{det.class_id} {x_center} {y_center} {det.w/image_width} {det.h/image_height}\n")
• DeepSORT训练/验证格式(MOT格式):
# MOT Challenge格式(每帧对应一行)
frame_id,track_id,x1,y1,w,h,confidence,class_id,visibility
0,1,736,480,48,96,0.95,0,1
• 检测训练集(YOLO):仅需边界框和类别(无需Track ID)。
• 追踪训练集(DeepSORT):需要完整的Track ID和时序信息。
• 划分建议:
• YOLO训练:使用全部标注数据(70%训练,30%验证)。
• DeepSORT调优:保留部分视频序列(如20%)作为追踪验证集。
• 严格贴合目标:避免包含过多背景或截断目标。
• 遮挡处理:
• 部分遮挡:标注可见区域,标记 occluded=1
。
• 完全遮挡:保留最后已知位置,标记 visibility=0
。
• ID分配表:维护一个全局ID表,避免重复或冲突。
• 消失目标处理:目标离开画面超过N帧(如30帧)后,可视为永久消失。
• 预标注加速:
# 使用YOLOv8生成预标注
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
results = model.predict("frames/")
• 否:对于高帧率视频(如30fps),可每隔2-3帧标注(需保持ID连续性)。
• 标注规范:ID不随外观变化而改变,除非目标被重新识别为不同实体。
• 替代方案:标注关键帧(首尾帧),中间帧用线性插值生成伪标注,人工复查修正。
• 标注核心:同时满足检测(类别+框)和追踪(跨帧ID)的需求。
• 推荐工具:CVAT(视频插值标注) + MOT格式导出。
• 关键检查:ID一致性、边界框精度、遮挡标记。
通过以上流程,您可以高效构建适用于YOLO+DeepSORT联合模型的高质量数据集。