目标跟踪OTB数据集使用过程中遇到的坑

记录一下使用OTB过程遇到的一些问题。

刚刚拿到这个toolkit,一开始以为可以直接跑了,发现其实最好的是把你的tracker弄成一个exe放到它的trackers文件夹底下,然后跑main_running 就可以了,但是一般现在都用Python写了,如何打包,如何搞到Matlab中确实太麻烦。所以我就开始了我的探索,说实话可能对很多人来讲我遇到的问题很弱智,但是我就是不会啊!!哭/(ㄒoㄒ)/~~。

把自己的结果存下来

我能想到的解决方法就是把自己的结果存成OTB里面要用的.mat形式,Python的scipy库就能做这个事,把文件输出成.mat的。这一步是不是看着很简单,只要:

import scipy as scio
scio.savemat(result_path_mat, Mat)  #Mat就是要输出的结果

这个时候问题就来了,不知道matlab里面的数据结构是啥样的,所以我就把里面已有的OPE文件中的.mat输出了一下:

[array([[(array([[ 70,  51, 107,  87],
       [ 70,  51, 107,  87],
       [ 69,  52, 108,  87],
       [ 69,  50, 107,  87],
       [ 67,  50, 109,  88],
       [ 66,  49, 109,  88],
       [ 65,  49, 110,  89],
       [ 63,  49, 111,  90],
       [ 62,  49, 112,  91],
       [ 61,  49, 112,  91],
       [ 61,  49, 112,  91],
       [ 61,  48, 113,  91],
       [ 61,  48, 113,  91],
       [ 61,  48, 113,  91],
       [ 61,  48, 113,  91],
       [ 61,  48, 113,  91],
       [ 60,  48, 113,  91],
       [ 60,  48, 113,  91],
       [ 60,  48, 113,  91],
       [ 60,  48, 113,  91]], dtype=uint8), array(['rect'], dtype='<U4'), array([[7.62746]]), array([[20]], dtype=uint8), array([[1]], dtype=uint8), array([[1]], dtype=uint8))]],
      dtype=[('res', 'O'), ('type', 'O'), ('fps', 'O'), ('len', 'O'), ('annoBegin', 'O'), ('startFrame', 'O')])]

是不是很强,其实就是一个五维的numpy数组???因为操作实在太骚了,观察到matlab其实需要的就是一个封装后的cell,一个cell中又有六个属性:
在这里插入图片描述
所以最终的解决方法,是先把你的数据搞成一个字典,,然后再把这个字典赋给一个numpy数组就可以了:

Mat = {'res': list(regions), 'type': 'rect', 'fps': f/toc, 'len': len(regions), 'annoBegin': 1, 'startFrame': 1}
M = np.array([Mat])   

一定不能漏掉Mat外面那个中括号,不然就会功亏一篑,那个中括号就能把Mat直接封装成一个1*1的array,然后在Matlab里面就会被读成cell了
(害的我搞了一下午的numpy结构体,感觉自己真的太菜了)
这样基本就OK了,只要把你的结果放好,然后配置啥的都没问题的话,用perfPlot.m函数就可以画出来啦~我还没测完,所以估计后续还会更新

画出来的OPE两个曲线与原始论文不一样

在perfPlot里面需要自己修改参数:

% metricTypeSet = {'error', 'overlap'};   %error->threshold  , overlap->AUC
metricTypeSet = {'error'};  
evalTypeSet = { 'OPE'};

% rankingType = 'AUC';%AUC, threshold
rankingType = 'threshold';

其实就是error要对应threshold,然后overlap要对应AUC。
(我跑出来的DAT的结果还没有MDNe好,怕是还是哪里配错了?)

SiamFC中转mat的一小段代码:

for video in all_videos:
    p.video = video
    print("Processing %s ... " % p.video)
    bbox_result, fps = run_tracker(p)
    # saving tracking results as mat
    if p.bbox_output:
         Mat = {'res': list(bbox_result), 'type': 'rect', 'fps': fps, 'len': len(bbox_result), 'annoBegin': 1, 'startFrame': 1}
         M = np.array([Mat])
         Mat2 = {'__header__': 'b', '__version__': 1.0, '__globals__': [], 'results': M}
         scio.savemat(p.bbox_output_path_mat+p.video + '_SiamFC.mat', Mat2)

txt转mat文件代码见github https://github.com/gagajian/txt_to_mat-OTB-

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
目标跟踪是计算机视觉领域的一个重要任务,它旨在通过连续帧的分析和处理,在视频准确地跟踪特定目标。OTB(Object Tracking Benchmark)数据集是一种常用的用于目标跟踪算法评估的数据集。 对于在OTB数据集上测试目标跟踪算法,首先需要将待测试的目标跟踪算法应用于OTB数据集的视频序列。通过逐帧分析视频序列,算法可以在每一帧定位目标的位置。随着视频的播放,算法将根据先前帧的跟踪结果来推断目标在当前帧的位置。 在测试过程,可以使用OTB数据集提供的标注结果对算法的跟踪准确性进行评估。标注结果是事先由人工标注的目标位置,以边界框的形式保存在数据集。算法输出的跟踪结果也是以边界框的形式表示目标位置。 评估跟踪算法的准确性通常使用一些常见指标,如平均重叠率(average overlap)和成功率(success rate)。平均重叠率指标通过计算算法输出与标注结果的边界框之间的重叠面积来度量跟踪准确性。成功率指标则通过设置一个重叠阈值,判断算法输出的边界框是否成功跟踪目标。 通过在OTB数据集上进行测试,可以评估目标跟踪算法在不同场景下的性能表现。同时,OTB数据集也提供了用于比较不同目标跟踪算法的基准结果,有助于研究人员和开发者了解和改进目标跟踪算法的性能。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值