如何使用py-motmetrics实现多目标检测评估

因为课题的需要,需要用MOT算法实现一些特定任务,需要对结果进行评估,因此总结了一些如何实现MOT结果评估的方便的代码。首先接单介绍一下多目标追踪任务。

多目标追踪任务

多目标跟踪(Multi-Object Tracking,简称MOT)是一种用于维持对多个目标当前状态估计的技术,主要通过对接收到的量测信息进行处理来实现。主要涉及的技术包括目标检测、卡尔曼滤波等。现在已经由传统算法转向了以深度学习为主要技术路径的涉及多个方面的算法。

用于评估的文件格式

MOT中ground truth文件名称一般命名为gt.txt,其格式如下:

[frame,id,box_left,box_top,w,h,conf,x,y,z]

这种格式包含了3D目标追踪,如果是2D目标追踪,xyz的值默认为1,则格式为

[frame,id,box_left,box_top,w,h,1,-1,-1,-1]

py-motmetrics介绍

该项目已经在GitHub上开源,可以直接看源码,也可以直接用pip install py-motmetrics安装使用。在pypi上也可以看到这个库的介绍和基本使用方法。

单个test评估

import motmetrics as mm
import numpy as np 
import os
#评价指标
metrics = list(mm.metrics.motchallenge_metrics)
#导入gt和ts文件

gt_file= 'gt.txt'
ts_file= 'test.txt'

gt=mm.io.loadtxt(gt_file, fmt="mot16", min_confidence=-1)
ts=mm.io.loadtxt(ts_file, fmt="mot16")
name=os.path.splitext(os.path.basename(ts_file))[0]
#计算单个acc
acc=mm.utils.compare_to_groundtruth(gt, ts, 'iou', distth=0.5)
mh = mm.metrics.create()
summary = mh.compute(acc, metrics=metrics, name=name)
print(mm.io.render_summary(summary, formatters=mh.formatters,namemap=mm.io.motchallenge_metric_names))


打印后的结果
打印结果

多个tests文件评估

我这里已经用一些代码将gt、test文件转化为列表形式,并且统一了次序,以防止出现gt和test文件对应不上。因为我的文件命名名称中包含数字,因此用re库可以方便地实现列表文件的排序。这是一个示例代码。

def extract_number(s):    
    import re  
    match = re.search(r'\d+', s)  
    if match:  
        return int(match.group())  
    else:    
        return 0  
  
a = ['a1324556', 'a2', 'a100', 'a4', 'a1000']  
sorted_a = sorted(a, key=extract_number)  
print(sorted_a)

接下来就是一次性实现多个test文件的评估,并且可以通过pandas将结果保存到csv文件中,方便后续分析使用。

'''
gts     # gt文件列表
results # test文件列表
names   # 评估名称列表
'''
metrics = list(mm.metrics.motchallenge_metrics)
mh = mm.metrics.create()
accs = []
for gt_file, result_file in zip(gts, results):
    gt = mm.io.loadtxt(gt_file, fmt='mot15-2D',min_confidence=0)
    ts = mm.io.loadtxt(result_file,fmt='mot15-2D')
    acc = mm.utils.compare_to_groundtruth(gt, ts, 'iou', distth=0.5)
    accs.append(acc)
    
# compute_many与单个文件评估略有不同,并且参数name为names
summary = mh.compute_many(accs, metrics=metrics, names=names)  
print(mm.io.render_summary(summary, formatters=mh.formatters,namemap=mm.io.motchallenge_metric_names))
with open("rtdetr-botsort.csv", "w", newline="") as csvfile:
   summary.to_csv(csvfile, index=True, header=True)

下图是打印出来的结果。
多个结果打印

参考资料

1、MOT多目标跟踪评价指标代码py-motmetrics
2、py-motmetrics在pypi上的介绍
3、py-motmetrics源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值