多目标追踪算法Deepsort(2)复现MOTA低解决方法

参考资料:

deepsort paper: https://arxiv.org/abs/1602.00763(https://arxiv.org/abs/1602.00763)

deepsort github:GitHub - ZQPei/deep_sort_pytorch: MOT tracking using deepsort and yolov3 with pytorch(https://github.com/ZQPei/deep_sort_pytorch)

当我搞清楚代码流程后,着手开始在MOT16数据集上进行复现,由于没有注册成功,就先再训练集上跑一跑,然而发现MOTA竟然只有30,要知道论文中足足有60呢:

FN达到了67763,说明有很多没有追踪到,我检查追踪结果的视频,发现了原因,很多人没有检测到。这是由于这个复现项目的检测采用了yolov3,这个模型没有在MOT16数据集上训练过,对于一些较暗,较小的目标检测不到,就无法进行追踪了。而MOT16官方使用的det文件是由DPM检测器得到的,其检测效果也很差,MOTA也在30左右。

查阅论文后我发现,作者直接使用了POI检测器的检测文件,可以在这里下载Poi检测器的检测文件(https://drive.google.com/open?id=0B5ACiy41McAHMjczS2p0dFg3emM)(百度网盘链接 链接:https://pan.baidu.com/s/1Tnq_Eqnm49_JjLe75QX86g 提取码:qwer),将检测模块替换为poi的检测结果,替换的方法也非常简单,只需要读取poi的文件后,将这一帧送入deepsort的检测信息替换即可。注意需要对坐标进行一下变换,poi检测器中的检测框坐标是左上角坐标,而deepsort处理时需要中心点坐标,代码为:

detection_data = np.loadtxt('mot02_det.txt',delimiter=',')
detection_data_frame = []
for k in detection_data :
    if k[0] == idx_frame:
        detection_data_frame.append(k)
                
detection_data_frame = np.array(detection_data_frame)
bbox_xywh = detection_data_frame[:,2:6]
bbox_xywh[:,0] = bbox_xywh[:,0] + 0.5*bbox_xywh[:,2]
bbox_xywh[:,1] = bbox_xywh[:,1] + 0.5*bbox_xywh[:,3]
cls_conf = detection_data_frame[:,6]
# do tracking
outputs = self.deepsort.update(bbox_xywh, cls_conf, im)

果然替换后MOTA达到了55,很接近论文中的结果

我调皮的读取了ground truth的检测文件,结果也非常amazing啊,MOTA达到了68,可以看到当前MOT任务的MOTA与检测的质量还是息息相关的。

Deepsort作为一个经典的DBT算法,在工业界,简单稳定快速,精度也还可以,落地还是可以的。在学术界,还是有一些out了,改进也挺难的,毕竟从sort到Deepsort才提了1.6个点(本人尝试用fastreid替换了特征提取模块,效果也很一般)。希望大佬们批评指正。

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值