超全!2D单目标跟踪常用评价指标及完整代码

您所在的位置:网站首页 ope指标 超全!2D单目标跟踪常用评价指标及完整代码

超全!2D单目标跟踪常用评价指标及完整代码

2024-07-11 03:11| 来源: 网络整理| 查看: 265

作者:大森林 | 来源:3D视觉工坊在公众号「3D视觉工坊」后台,回复「原论文」即可获取论文pdf和代码链接。添加微信:dddvisiona,备注:3D点云,拉你入群。文末附行业细分群。

2D单目标跟踪评价指标:

APE(Average Pixel Error):平均像素误差,一般指预测框与真实框中心位置的像素距离取帧平均。用来判断两个矩形框的靠近程度。该值越小,说明误差越小。

AOR(Average Overlap Rate):平均重叠率,即两个矩形框交集的面积与并集的面积之比取帧平均。用来判断两个矩形框的重叠程度。值越高则重叠程度越高,即两个框越靠近,跟踪精度越高。

Pixel Error threshold:需要人为设定的像素误差的阈值,Pixel Error低于该阈值的矩形框被认为是命中目标,反之则被认为未命中。用来作为区分矩形框是否命中目标的指标,阈值越小则要求矩形框与真值像素误差越小。

Overlap Rate threshold:需要人为设定的重叠率的阈值,重叠率高于该阈值的矩形框被认为是命中目标,反之则被认为未命中。用来作为区分矩形框是否命中目标的指标,阈值越高则要求矩形框与真值重叠程度越高。

Success plot:序列中跟踪成功的帧数占总帧数的比例定义为跟踪成功率,选取不同的阈值,则可以得到各阈值下的成功率,连接各点形成success曲线。根据曲线下的面积来衡量tracker的跟踪精确度。

TRE(Temporal Robustness Evaluation):时间鲁棒性评估。从整个序列中截取若干段(可以重复),每段的初始帧利用ground truth进行初始化,在每一段上分别运行跟踪算法,对每一段分别进行评估,最后对总体信息进行统计。

SRE(Spatial Robustness Evaluation):空间鲁棒性评估。对起始帧的ground truth进行shift或scale操作形成若干段测试序列,在每一段上分别运行跟踪算法,对每一段分别进行评估,最后对总体信息进行统计。

EAO(Expect Average Overlaprate)图:以AOR作为精度的衡量标准,以跟踪算法跟丢目标的次数作为鲁棒性的衡量标准。在一张图中同时反映精度和鲁棒性。越靠近坐标轴右上角,即AOR趋于1,SF趋于0,说明该算法精度和鲁棒性越好。

这里分别展示了APE、AOR、Pixel Error threshold、Overlap Rate threshold、Success plot、TRE、SRE和EAO八种指标的计算代码。

# APE(Average Pixel Error):平均像素误差,一般指预测框与真实框中心位置的像素距离取帧平均。# 假设preds和gts是两个列表,分别存储预测框和真实框的中心坐标,如[(x1, y1), (x2, y2), ...]# 假设n是帧数def APE(preds, gts, n):    # 初始化总误差为0    total_error = 0    # 遍历每一帧    for i in range(n):        # 计算预测框和真实框中心坐标的欧式距离        error = ((preds[i][0] - gts[i][0]) ** 2 + (preds[i][1] - gts[i][1]) ** 2) ** 0.5        # 累加误差        total_error += error    # 返回平均误差    return total_error / n# AOR(Average Overlap Rate):平均重叠率,即两个矩形框交集的面积与并集的面积之比取帧平均。# 假设preds和gts是两个列表,分别存储预测框和真实框的左上角和右下角坐标,如[(x1, y1, x2, y2), ...]# 假设n是帧数def AOR(preds, gts, n):    # 初始化总重叠率为0    total_overlap = 0    # 遍历每一帧    for i in range(n):        # 计算预测框和真实框的交集面积        inter_area = max(0, min(preds[i][2], gts[i][2]) - max(preds[i][0], gts[i][0])) * max(0, min(preds[i][3], gts[i][3]) - max(preds[i][1], gts[i][1]))        # 计算预测框和真实框的并集面积        union_area = (preds[i][2] - preds[i][0]) * (preds[i][3] - preds[i][1]) + (gts[i][2] - gts[i][0]) * (gts[i][3] - gts[i][1]) - inter_area        # 计算重叠率        overlap = inter_area / union_area        # 累加重叠率        total_overlap += overlap    # 返回平均重叠率    return total_overlap / n# Pixel Error threshold:需要人为设定的像素误差的阈值,Pixel Error低于该阈值的矩形框被认为是命中目标,反之则被认为未命中。# 假设preds和gts是两个列表,分别存储预测框和真实框的中心坐标,如[(x1, y1), (x2, y2), ...]# 假设n是帧数,t是阈值def Pixel_Error_threshold(preds, gts, n, t):    # 初始化命中数为0    hit_count = 0    # 遍历每一帧    for i in range(n):        # 计算预测框和真实框中心坐标的欧式距离        error = ((preds[i][0] - gts[i][0]) ** 2 + (preds[i][1] - gts[i][1]) ** 2) ** 0.5        # 如果误差小于阈值,认为命中目标        if error  t:            hit_count += 1    # 返回命中率    return hit_count / n# Success plot:序列中跟踪成功的帧数占总帧数的比例定义为跟踪成功率,选取不同的阈值,则可以得到各阈值下的成功率,连接各点形成success曲线。# 假设preds和gts是两个列表,分别存储预测框和真实框的左上角和右下角坐标,如[(x1, y1, x2, y2), ...]# 假设n是帧数,m是阈值个数,thresholds是一个列表,存储m个阈值def Success_plot(preds, gts, n, m, thresholds):    # 初始化一个列表,存储各阈值下的成功率    success_rates = []    # 遍历每个阈值    for t in thresholds:        # 初始化命中数为0        hit_count = 0        # 遍历每一帧        for i in range(n):            # 计算预测框和真实框的交集面积            inter_area = max(0, min(preds[i][2], gts[i][2]) - max(preds[i][0], gts[i][0])) * max(0, min(preds[i][3], gts[i][3]) - max(preds[i][1], gts[i][1]))            # 计算预测框和真实框的并集面积            union_area = (preds[i][2] - preds[i][0]) * (preds[i][3] - preds[i][1]) + (gts[i][2] - gts[i][0]) * (gts[i][3] - gts[i][1]) - inter_area            # 计算重叠率            overlap = inter_area / union_area            # 如果重叠率大于阈值,认为命中目标            if overlap > t:                hit_count += 1        # 计算并存储当前阈值下的成功率        success_rate = hit_count / n        success_rates.append(success_rate)    # 返回一个列表,表示success曲线上的点坐标(thresholds, success_rates)    return list(zip(thresholds, success_rates))# TRE(Temporal Robustness Evaluation):时间鲁棒性评估。从整个序列中截取若干段(可以重复),每段的初始帧利用ground truth进行初始化,在每一段上分别运行跟踪算法,对每一段分别进行评估,最后对总体信息进行统计。# 假设preds和gts是两个列表,分别存储预测框和真实框的左上角和右下角坐标,如[(x1, y1, x2, y2), ...]# 假设n是帧数,m是截取段数,segments是一个列表,存储m个截取段的起始帧和结束帧,如[(s1, e1), (s2, e2), ...]def TRE(preds, gts, n, m, segments):    # 初始化一个列表,存储各段的平均重叠率    overlap_rates = []    # 遍历每个截取段    for s, e in segments:        # 初始化该段的总重叠率为0        total_overlap = 0        # 遍历该段的每一帧        for i in range(s, e + 1):            # 计算预测框和真实框的交集面积            inter_area = max(0, min(preds[i][2], gts[i][2]) - max(preds[i][0], gts[i][0])) * max(0, min(preds[i][3], gts[i][3]) - max(preds[i][1], gts[i][1]))            # 计算预测框和真实框的并集面积            union_area = (preds[i][2] - preds[i][0]) * (preds[i][3] - preds[i][1]) + (gts[i][2] - gts[i][0]) * (gts[i][3] - gts[i][1]) - inter_area            # 计算重叠率            overlap = inter_area / union_area            # 累加重叠率            total_overlap += overlap        # 计算并存储该段的平均重叠率        overlap_rate = total_overlap / (e - s + 1)        overlap_rates.append(overlap_rate)    # 返回一个列表,表示TRE曲线上的点坐标(segments, overlap_rates)    return list(zip(segments, overlap_rates))# SRE(Spatial Robustness Evaluation):空间鲁棒性评估。对起始帧的ground truth进行shift或scale操作形成若干段测试序列,在每一段上分别运行跟踪算法,对每一段分别进行评估,最后对总体信息进行统计。# 假设preds和gts是两个列表,分别存储预测框和真实框的左上角和右下角坐标,如[(x1, y1, x2, y2), ...]# 假设n是帧数,m是测试序列数,sequences是一个列表,存储m个测试序列的起始帧ground truth变化情况,如[("shift", dx1, dy1), ("scale", r1), ...]def SRE(preds, gts, n, m, sequences):    # 初始化一个列表,存储各序列的平均重叠率    overlap_rates = []    # 遍历每个测试序列    for seq in sequences:        # 初始化该序列的总重叠率为0        total_overlap = 0        # 判断该序列是shift还是scale操作        if seq[0] == "shift":            # 获取平移量dx和dy            dx, dy = seq[1], seq[2]            # 对起始帧的ground truth进行平移操作            gts[0] = (gts[0][0] + dx, gts[0][1] + dy, gts[0][2] + dx, gts[0][3] + dy)        elif seq[0] == "scale":            # 获取缩放比例r            r = seq[1]            # 对起始帧的ground truth进行缩放操作            gts[0] = (gts[0][0] * r, gts[0][1] * r, gts[0][2] * r, gts[0][3] * r)        # 遍历该序列的每一帧        for i in range(n):            # 计算预测框和真实框的交集面积            inter_area = max(0, min(preds[i][2], gts[i][2]) - max(preds[i][0], gts[i][0])) * max(0, min(preds[i][3], gts[i][3]) - max(preds[i][1], gts[i][1]))            # 计算预测框和真实框的并集面积            union_area = (preds[i][2] - preds[i][0]) * (preds[i][3] - preds[i][1]) + (gts[i][2] - gts[i][0]) * (gts[i][3] - gts[i][1]) - inter_area            # 计算重叠率            overlap = inter_area / union_area            # 累加重叠率            total_overlap += overlap        # 计算并存储该序列的平均重叠率        overlap_rate = total_overlap / n        overlap_rates.append(overlap_rate)    # 返回一个列表,表示SRE曲线上的点坐标(sequences, overlap_rates)    return list(zip(sequences, overlap_rates))# EAO(Expect Average Overlaprate):期望平均重叠率,综合考虑跟踪精度和鲁棒性,通过一种方式,在一张图中同时反映精度和鲁棒性。# 假设preds和gts是两个列表,分别存储预测框和真实框的左上角和右下角坐标,如[(x1, y1, x2, y2), ...]# 假设n是帧数,SF是跟踪算法跟丢目标的次数def EAO(preds, gts, n, SF):    # 初始化总重叠率为0    total_overlap = 0    # 初始化总帧数为0    total_frames = 0    # 遍历每一帧    for i in range(n):        # 如果该帧没有跟丢目标,计算重叠率并累加        if i not in SF:            # 计算预测框和真实框的交集面积            inter_area = max(0, min(preds[i][2], gts[i][2]) - max(preds[i][0], gts[i][0])) * max(0, min(preds[i][3], gts[i][3]) - max(preds[i][1], gts[i][1]))            # 计算预测框和真实框的并集面积            union_area = (preds[i][2] - preds[i][0]) * (preds[i][3] - preds[i][1]) + (gts[i][2] - gts[i][0]) * (gts[i][3] - gts[i][1]) - inter_area            # 计算重叠率            overlap = inter_area / union_area            # 累加重叠率            total_overlap += overlap            # 累加帧数            total_frames += 1    # 返回期望平均重叠率,即总重叠率除以总帧数乘以(n-SF)/n,其中(n-SF)/n是没有跟丢目标的概率    return total_overlap / total_frames * (n - len(SF)) / n—END—

第一步 加入行业交流群,保持技术的先进性

目前工坊已经建立了3D视觉方向多个社群,包括SLAM、工业3D视觉、自动驾驶方向,细分群包括:[工业方向]三维点云、结构光、机械臂、缺陷检测、三维测量、TOF、相机标定、综合群;[SLAM方向]多传感器融合、ORB-SLAM、激光SLAM、机器人导航、RTK|GPS|UWB等传感器交流群、SLAM综合讨论群;[自动驾驶方向]深度估计、Transformer、毫米波|激光雷达|视觉摄像头传感器讨论群、多传感器标定、自动驾驶综合群等。[三维重建方向]NeRF、colmap、OpenMVS等。除了这些,还有求职、硬件选型、视觉产品落地等交流群。大家可以添加小助理微信: dddvisiona,备注:加群+方向+学校|公司, 小助理会拉你入群。

第二步 加入知识星球,问题及时得到解答

3.1 「3D视觉从入门到精通」技术星球

针对3D视觉领域的视频课程(三维重建、三维点云、结构光、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)、源码分享、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答等进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业、项目对接为一体的铁杆粉丝聚集区,6000+星球成员为创造更好的AI世界共同进步,知识星球入口:「3D视觉从入门到精通」

学习3D视觉核心技术,扫描查看,3天内无条件退款

3.2 3D视觉岗求职星球

本星球:3D视觉岗求职星球 依托于公众号「3D视觉工坊」和「计算机视觉工坊」、「3DCV」,旨在发布3D视觉项目、3D视觉产品、3D视觉算法招聘信息,具体内容主要包括:

收集汇总并发布3D视觉领域优秀企业的最新招聘信息。

发布项目需求,包括2D、3D视觉、深度学习、VSLAM,自动驾驶、三维重建、结构光、机械臂位姿估计与抓取、光场重建、无人机、AR/VR等。

分享3D视觉算法岗的秋招、春招准备攻略,心得体会,内推机会、实习机会等,涉及计算机视觉、SLAM、深度学习、自动驾驶、大数据等方向。

星球内含有多家企业HR及猎头提供就业机会。群主和嘉宾既有21届/22届/23届参与招聘拿到算法offer(含有海康威视、阿里、美团、华为等大厂offer)。

发布3D视觉行业新科技产品,触及行业新动向。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3