跟踪算法性能测试之二:常用评价标准实现

2019-03-06 16:54:34 浏览数 (1)

这一篇均是在上一篇的基础上实现的,在上一篇写了如何批量测试VOT数据集及保存跟踪结果。并进行了简单的CLE绘制,这一篇总结一下常用的跟踪评价标准及其实现。

在此之前,已经得到了每一个视频序列的groundtruth和跟踪的结果,保存的格式如下:(groundtruth和跟踪结果都是以这个格式保存在txt之中的)

1. 中心位置误差(CLE)

这个上一篇已经讲过了,这里再重复一下它的概念,因为下面还有几个评价标准是以此为基础的。

CLE计算的是跟踪框中心位置的欧式距离,假设某一帧,groundtruth标注的中心位置为

,跟踪结果的中心位置为

,这个位置需要通过简单的转换得来:

中心位置的误差则为:

2. 区域重叠度。

在真正的跟踪过程中,因为有尺度变化存在,单纯的CLE并不能全面衡量跟踪算法的性能,所以区域重叠度可以作为一个重要的辅助标准。

所谓区域重叠度就是标注的跟踪框和跟踪的跟踪框之间的重叠程度,显而易见需要寻找一种相对的衡量标准,如果用重叠面积这种绝对的衡量标准是不合适的。

这里,用的是交并比(Intersection-over-Union,IOU),这个标准在目标检测中也用的比较多。

如图,交并比即交集的面积比上并集的面积。

这样的话,就是一个相对值,比较能客观的展示两个矩形的重叠成都。

实现起来也不算难,我也是参考了别人的一些思路,有很多种方法,但是我觉得这种方法是比较简单而且易于理解的。

首先来分析两个矩形相交的情况。

大概是这些情况,总结交集的状态可以发现这么一个规律:

  1. 交集的上边(上面的一条边,下面的以此类推) 是两个矩形上边靠下的那个。
  2. 交集的左边是两个矩形左边靠右的那个。
  3. 交集的右边是两个矩形右边靠左的那个。
  4. 交集的右边是两个矩形右边靠左的那个。

这个规律是可以通过左边之间的转换来表现。

那么要是不相交呢?如果不相交的话,那么依照上面的规律得到的就不是矩形,上边跑到了下边的下面或者左边跑到了右边的右边。

这样的话思路就很清晰了,代码如下: 我也不是故意要写中文注释,虚拟机的中文输入法好像崩掉了!!

代码语言:javascript复制
#calculate IOU,rect1 and rect2 are rectangles(x,y,width,height)
def calculateIOU(rect1,rect2):
    #calculate the area
    area1=rect1[2]*rect1[3]  
    area2=rect2[2]*rect2[3]
    #calculate the sum area
    area=area1 area2
    
    #calculate the edge line of every rect
    top1=rect1[1]
    left1=rect1[0]
    bottom1=rect1[1] rect1[3]
    right1=rect1[0] rect1[2]

    top2=rect2[1]
    left2=rect2[0]
    bottom2=rect2[1] rect2[3]
    right2=rect2[0] rect2[2]

    #calculate the intersect rectangle
    top=max(top1,top2)
    left=max(left1,left2)
    bottom=min(bottom1,bottom2)
    right=min(right1,right2)
    
    #if no intersect
    if top>=bottom or right<=left:
        return 0
    else:
        intersectArea=(bottom-top)*(right-left)
        return intersectArea/(area-intersectArea)

计算完了再画图就比较简单了,一帧一帧计算然后放入列表之中,再使用plt.plot()来画图就可以了,看一套效果还不错的图:(其实在数据集上整体的效果是非常一般的,数据集上的整体ACU(这个参数我现在还不知道什么东西,应该是平均准确率的意思吧!)才0.5左右)


未完待续!!

0 人点赞