1. Windows10下OTB100数据集环境搭建
搞目标跟踪算法的同学应该都听说过OTB100这个经典测试集,它包含了100个标注好的视频序列,是验证算法效果的黄金标准。最近我在Windows10系统上折腾了一周,总算把整套评估流程跑通了,今天就把踩坑经验分享给大家。
先说说需要准备的东西:
- OTB100数据集:官网下载经常抽风,推荐用百度网盘(链接见后文)
- MATLAB:建议R2018b以上版本,兼容性更好
- 至少8GB内存:跑可视化对比时很吃内存
我第一次配置时犯了个低级错误——直接把数据集解压到中文路径下了。结果MATLAB读取文件时各种报错,折腾半天才发现路径里不能有中文。建议大家统一用类似D:\Tracking\OTB100这样的纯英文路径。
2. 数据集配置详细步骤
2.1 文件结构整理
下载的压缩包解压后会有两个关键文件夹:
OTB100:存放所有视频序列和groundtruthtracker_benchmark_v1.0:官方评估工具包
建议保持这样的目录结构:
D:\Tracking ├── OTB100 │ ├── Basketball │ ├── Biker │ └── ...其他序列 └── tracker_benchmark_v1.0 ├── util ├── results └── ...其他文件2.2 修改配置文件路径
打开tracker_benchmark_v1.0\util\configSeqs.m,用VS Code的批量替换功能(Ctrl+H)把所有旧路径改成你的实际路径。比如把原来的E:\dataset\OTB100全局替换为D:\Tracking\OTB100。
这里有个小技巧:先在文件开头添加disp(pwd)打印当前路径,运行时报错就能快速定位路径问题。
3. 集成自定义跟踪算法
3.1 准备算法结果文件
你的跟踪算法需要输出.mat格式的结果文件,包含两个关键变量:
res:目标框坐标[x,y,w,h]fps:算法运行帧率
建议先用MATLAB的save命令测试保存:
res = [1,1,100,50]; % 示例数据 fps = 25; save('myTracker.mat', 'res', 'fps');3.2 注册跟踪器
打开configTrackers.m,仿照现有格式添加你的算法。比如:
trackers = { struct('name','KCF','namePaper','KCF'),... % 官方示例 struct('name','MyTracker','namePaper','MyTracker'),... % 新增算法 };注意name和namePaper要保持一致,否则绘图时会显示乱码。我当初就在这里栽过跟头,legend显示全是问号。
4. 性能可视化实战
4.1 成功率曲线绘制
成功率(Success Rate)反映预测框与真实框的重叠率。操作步骤:
- 打开
perfPlot.m - 确认
rankingType = 'AUC'(计算曲线下面积) - 右键点击
plotDrawSave选择"转到定义" - 修改
legend1的位置参数:
h = legend(legend1, 'Location', 'southwest'); % 左下角显示运行后会生成类似这样的曲线:
4.2 精确度曲线绘制
精确度(Precision)衡量中心点误差:
- 在
perfPlot.m中:
% 注释掉原106行 % plotDrawSave(trks, plotType, 'threshold', thresholdSet, titleName,... % 取消107行注释 plotDrawSave(trks, plotType, 'error', thresholdSet, titleName,...- 在
plotDrawSave.m中同步修改:
% 注释55行 % xLabel = 'Location error threshold'; % 取消56行注释 xLabel = 'Center location error (pixels)';5. 多算法对比技巧
5.1 目标框图对比
修改drawResultBB.m可以选择特定序列和算法进行对比。建议:
- 优先选择
Bolt2、Diving等挑战性序列 - 同时对比不超过3种算法,避免图像过于拥挤
% 示例:对比第5帧结果 frame = 5; imshow(frameImage); hold on; rectangle('Position',res1(frame,:),'EdgeColor','r'); % 算法1 rectangle('Position',res2(frame,:),'EdgeColor','g'); % 算法25.2 性能排序优化
在perfPlot.m中可以修改排序方式:
rankMode = 'threshold':按特定阈值排序rankMode = 'AUC':按曲线下面积排序(推荐)
我习惯添加这段代码自动保存图片:
print('-dpng', '-r300', 'success_plot.png'); % 300dpi分辨率6. 常见问题解决方案
问题1:MATLAB报错"Undefined function or variable"
- 检查路径是否包含空格或特殊字符
- 在MATLAB命令行运行
addpath(genpath('你的路径'))添加全部子目录
问题2:曲线图显示不全
- 修改
plotDrawSave.m中的figure尺寸:
figure('unit','normalized','position',[0.1,0.1,0.8,0.7]);问题3:算法对比时坐标轴重叠
- 调整
subplot间距:
subplot(2,2,1); set(gca,'Position',[0.1 0.55 0.35 0.35]); % [左 下 宽 高]7. 效率优化建议
- 并行计算:在
perfPlot.m开头添加
if isempty(gcp('nocreate')) parpool('local',4); % 启用4核并行 end- 缓存中间结果:修改
evalSeq.m添加结果检查
if exist(resultFile,'file') load(resultFile); return; end- 视频预加载:对于大尺寸序列(如Jogging),先用
mmread预加载到内存
整套流程跑下来,从配置到出图大概需要2-3小时(取决于算法数量)。建议第一次运行时先选用子集测试,比如只跑前10个序列。等确认所有配置无误后,再开展全量测试。