BoxMOT数据集制备:MOT格式标注与转换工具
BoxMOT数据集制备:MOT格式标注与转换工具
你是否还在为多目标跟踪(Multi-Object Tracking, MOT)数据集的标注格式问题而困扰?标注工具输出格式不兼容主流跟踪算法?手动转换标注文件耗时费力且易出错?本文将系统介绍BoxMOT框架下的MOT数据集制备全流程,从原始视频到标准MOT格式标注文件的自动化转换,帮助算法工程师快速构建训练与评估数据集。读完本文你将掌握:
- MOT17/20标准数据格式的核心规范与字段解析
- 使用BoxMOT自动生成检测框(Detections)与外观特征(Embeddings)
- 多跟踪算法统一接口的结果转换与格式验证
- 工业级数据集制备的性能优化与质量控制方法
MOT数据集格式规范
1.1 标准MOT格式定义
MOT(Multiple Object Tracking)数据集采用纯文本格式存储标注信息,每个视频序列对应一个.txt文件,每行代表一帧中单个目标的标注信息。其核心字段定义如下:
| 字段索引 | 字段名称 | 数据类型 | 描述 |
|---|---|---|---|
| 0 | 帧序号(Frame ID) | 整数 | 视频帧的顺序编号(从1开始) |
| 1 | 目标ID(Track ID) | 整数 | 跨帧唯一的目标标识符(-1表示未跟踪目标) |
| 2 | 边界框左上角X坐标(X) | 浮点数 | 目标外接矩形左上角X像素坐标 |
| 3 | 边界框左上角Y坐标(Y) | 浮点数 | 目标外接矩形左上角Y像素坐标 |
| 4 | 边界框宽度(Width) | 浮点数 | 目标外接矩形宽度(像素) |
| 5 | 边界框高度(Height) | 浮点数 | 目标外接矩形高度(像素) |
| 6 | 置信度(Confidence) | 浮点数 | 检测置信度(1.0表示人工标注) |
| 7 | 类别ID(Class ID) | 整数 | 目标类别(0=行人,1=自行车,2=汽车等) |
| 8 | 可见性(Visibility) | 浮点数 | 目标可见比例(0.0-1.0,1.0表示完全可见) |
注意:MOT格式采用1-based索引(帧序号从1开始),坐标系统以图像左上角为原点,与OpenCV默认坐标系一致。
1.2 数据目录结构
标准MOT数据集遵循严格的目录组织结构,BoxMOT已内置对该结构的支持,典型布局如下:
MOT17-02-FRCNN/ # 序列文件夹(序列ID+检测器类型)
├── img1/ # 视频帧文件夹
│ ├── 000001.jpg # 帧图像(6位数字命名)
│ ├── 000002.jpg
│ └── ...
├── det/ # 检测结果文件夹
│ └── det.txt # 自动检测结果(MOT格式)
├── gt/ # 人工标注文件夹
│ └── gt.txt # 真实标注(MOT格式)
└── seqinfo.ini # 序列元信息文件
其中seqinfo.ini包含关键元数据:
[Sequence]
name=MOT17-02-FRCNN
imDir=img1
frameRate=30
seqLength=600
imWidth=1920
imHeight=1080
imExt=.jpg
BoxMOT数据制备工具链
2.1 工具架构与工作流
BoxMOT提供从原始视频到MOT格式的端到端数据处理流水线,核心工具包括generate_dets_n_embs.py(检测与特征生成)和generate_mot_results.py(跟踪结果转换),其工作流程如下:
2.2 环境准备与安装
2.2.1 基础环境配置
# 克隆仓库
git clone https://gitcode.com/GitHub_Trending/bo/boxmot
cd boxmot
# 安装依赖
pip install poetry
poetry install
poetry shell
2.2.2 模型权重下载
BoxMOT支持自动下载预训练模型,首次运行时会将权重保存至boxmot/weights/目录:
- YOLOv8检测模型:用于生成目标边界框
- OSNet/CLIP重识别模型:用于提取目标外观特征
检测与特征文件生成
3.1 generate_dets_n_embs.py核心功能
该工具实现从视频/图像序列到MOT格式检测文件(dets.txt)和特征文件(embs.txt)的自动化转换,支持多模型、多序列批量处理。其核心参数说明:
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| --yolo-model | Path | yolov8n.pt | YOLO系列检测模型路径 |
| --reid-model | Path | osnet_x0_25_msmt17.pt | 重识别模型路径 |
| --source | str | 0 | 输入源(视频文件/图像文件夹/摄像头) |
| --conf | float | 0.5 | 检测置信度阈值 |
| --iou | float | 0.7 | NMS交并比阈值 |
| --classes | list[int] | [0] | 目标类别过滤(0=行人) |
| --project | Path | runs/dets_n_embs | 结果保存根目录 |
3.2 单序列处理示例
处理单个视频序列并生成检测文件:
python tracking/generate_dets_n_embs.py \
--yolo-model yolov8x.pt \
--reid-model osnet_x1_0_imagenet.pt \
--source ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1 \
--conf 0.3 \
--classes 0 \
--project ./custom_dataset \
--name mot17_mini_dets
3.2.1 输出文件结构
运行成功后将在custom_dataset/mot17_mini_dets/生成:
mot17_mini_dets/
├── dets/
│ └── MOT17-02-FRCNN.txt # MOT格式检测文件
└── embs/
└── osnet_x1_0_imagenet/
└── MOT17-02-FRCNN.txt # 外观特征文件
3.2.2 检测文件格式解析
生成的dets.txt示例内容:
# ./assets/MOT17-mini/train/MOT17-02-FRCNN/img1
1 0.0 588.0 173.0 86.0 273.0 0.92 0.0
1 0.0 923.0 169.0 79.0 261.0 0.89 0.0
2 0.0 589.0 172.0 85.0 271.0 0.93 0.0
...
每行格式:帧序号 X Y W H 置信度 类别ID(注意:MOT检测文件中Track ID固定为0)
3.3 多序列批量处理
对于包含多个视频序列的数据集(如MOT17训练集),可通过指定根目录实现批量处理:
python tracking/generate_dets_n_embs.py \
--yolo-model yolov8x.pt \
--reid-model clip_vit-b-32.pt \
--source ./MOT17/train \
--classes 0 2 \ # 同时处理行人和汽车
--vid-stride 2 \ # 隔帧处理提高速度
--project ./MOT17_processed \
--exist-ok
该命令将自动遍历./MOT17/train下的所有序列文件夹,分别生成对应的检测和特征文件。
跟踪结果格式转换
4.1 generate_mot_results.py使用指南
当使用外部跟踪算法处理检测结果后,可通过该工具将跟踪输出转换为标准MOT格式。核心参数:
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| --tracking-method | str | deepocsort | 跟踪算法类型 |
| --dets | str | yolov8n | 检测结果文件夹名称 |
| --embs | str | osnet_x0_25_msmt17 | 特征文件夹名称 |
| --benchmark | str | MOT17 | 基准数据集类型 |
4.2 从检测到MOT结果的转换示例
python tracking/generate_mot_results.py \
--tracking-method botsort \
--reid-model osnet_x0_25_msmt17.pt \
--dets yolov8x \
--embs osnet_x1_0_imagenet \
--project ./custom_dataset \
--name botsort_results \
--save-mot
生成的MOT结果文件将包含完整的跟踪ID信息:
1 1 588.0 173.0 86.0 273.0 0.92 0 -1 -1
1 2 923.0 169.0 79.0 261.0 0.89 0 -1 -1
2 1 589.0 172.0 85.0 271.0 0.93 0 -1 -1
...
4.3 多算法结果对比
通过指定不同--tracking-method参数,可生成多种算法的MOT格式结果进行对比:
# DeepOCSort
python tracking/generate_mot_results.py --tracking-method deepocsort
# StrongSORT
python tracking/generate_mot_results.py --tracking-method strongsort
# ByteTrack
python tracking/generate_mot_results.py --tracking-method bytetrack
质量控制与性能优化
5.1 数据质量评估指标
| 指标 | 描述 | 可接受范围 |
|---|---|---|
| 检测覆盖率 | 人工标注目标被检测到的比例 | >95% |
| 边界框偏差 | 检测框与人工标注的IoU | >0.7 |
| 特征区分度 | 同一ID特征相似度/不同ID相似度 | >1.5倍 |
| 帧率 | 处理速度 | >10 FPS(单GPU) |
5.2 性能优化策略
5.2.1 模型精度与速度平衡
5.2.2 批量处理优化
# 使用多进程处理多序列
python tracking/generate_dets_n_embs.py \
--source ./MOT17/train \
--batch-size 8 \ # 批处理大小
--half \ # FP16精度
--vid-stride 3 # 隔3帧处理
5.3 常见问题排查
5.3.1 检测文件为空
- 检查
--conf阈值是否过高(建议先设为0.1排查) - 确认输入源路径正确,图像文件格式符合
seqinfo.ini定义 - 验证YOLO模型是否支持当前图像尺寸
5.3.2 特征文件体积过大
- 使用降维技术:
--emb-dim 128(默认512维) - 启用特征量化:
--quantize embs(将float32转为uint8)
高级应用与扩展
6.1 自定义数据集格式转换
对于非标准输入格式(如COCO、Pascal VOC),可通过扩展tracking/utils.py中的convert_to_mot_format函数实现转换:
def convert_custom_to_mot(custom_annotation, frame_id):
"""
将自定义标注转换为MOT格式
custom_annotation: 包含x1,y1,x2,y2,score,class,track_id的字典
"""
mot_line = [
frame_id, # 帧序号
custom_annotation['track_id'], # 目标ID
custom_annotation['x1'], # X坐标
custom_annotation['y1'], # Y坐标
custom_annotation['x2'] - custom_annotation['x1'], # 宽度
custom_annotation['y2'] - custom_annotation['y1'], # 高度
custom_annotation['score'], # 置信度
custom_annotation['class'], # 类别ID
-1, -1 # 预留字段
]
return '\t'.join(map(str, mot_line)) + '\n'
6.2 大规模数据集管理
对于超过100万帧的大型数据集,建议采用分布式处理架构:
总结与最佳实践
BoxMOT数据集制备工具链通过自动化检测生成、特征提取和格式转换,显著降低了MOT数据集的制备门槛。工业级应用建议遵循以下工作流:
- 数据采集:使用1080p以上分辨率摄像头,固定帧率30FPS
- 预处理:统一图像尺寸,去除模糊/过曝帧
- 检测生成:先使用高置信度(0.5)生成初步结果,再人工修正漏检
- 特征提取:优先选择OSNet系列模型平衡速度与精度
- 格式验证:使用
boxmot/utils/vis.py可视化检查前100帧结果
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)