CenterTrack复现调研

paper:https://arxiv.org/pdf/2004.01177.pdf

code:https://github.com/xingyizhou/CenterTrack

demo:

vokoscreen-2023-02-27

01目前多数MOT都是Tracking-by-Detection的,MOT系统的整体检测速度约等于检测器速度+追踪器速度。而一些作者提到他们的追踪器速度可以达到实时,仅仅说的是追踪器的速度,并不是整体MOT系统的速度。

本文提出了一种基于点的联合检测和跟踪框架,称为CenterTrack,每个对象都由其边界框中心的单个点表示,然后通过时间跟踪这个中心点,如图1所示:

为了加速MOT系统的速度,将检测和embedding用同一个网络输出了,这的确加速了整个MOT的速度,双阶段的即

(1)检测+embedding
(2)数据关联匹配,实现追踪
有没有一种方法,不用双阶段,也就是合并检测阶段和匹配阶段,直接实现MOT呢?本文的主角,CenterTrack就是这样的网络。合并检测和追踪过程到同一个网络,可以加速MOT系统的整体检测速度,实验证明,CenterTrack的确是一种速度和精度trade-off的模型。

作者使用CenterNet检测器来定位对象中心,将检测器设置在两个连续的帧上,以及用点表示的先验轨迹的热图上。训练的检测器也输出一个从当前对象中心到它在前一帧的中心的偏移向量,这个偏移量作为中心点的一个属性,只需要一点点额外的计算成本,仅仅基于这个预测偏移量和前一帧中检测到的中心点之间的距离的一个贪婪的匹配,就足以实现对象关联。跟踪器是端到端的可训练和可微的。这种方法简化了跟踪条件检测和对象间的时间关联,CenterTrack纯粹是局部的,它只关联相邻帧中的对象,而不重新初始化丢失的远程轨迹,它以换取简单、快速和高精度。

02 Training on video data:

在训练CenterTrack过程中一个最主要的挑战是如何生成一张接近真实情况的tracklets heatmap的问题:在模型推理期间,tracklets heatmap是根据模型预测结果渲染而来的,可能会存在数量不定的missing tracklets、错误定位的目标以及还可能有误检的目标存在。而这些情况在Ground Truth中是不存在的,也就是说如果我们直接利用基于Ground Truth渲染出的heatmap,是无法模拟这种实际情况的,也就会导致模型效果不佳。
在实践中,先前帧不需要是前一个帧,它可以是同一视频序列的不同帧。本文实验中,在t附近随机采样帧,以避免帧速率过拟合。
Training on static image data:
如果没有带标注的视频数据,我们还可以标准检测基准上模拟跟踪,通过随机缩放和变换当前图像,来模拟生成先前帧,从而达到模拟目标运动的目的。实验证明这一trick很有效,几乎不会影响跟踪模型的效果。
End-to-end 3D object tracking:
为了实现单摄像头3D跟踪,采用CenterNet的单摄像头3D检测形式,具体来说,使用输出头预测目标的depth、 rotation和3D extent。

03报错:
 

    lineType=cv2.LINE_AA)
cv2.error: OpenCV(4.5.2) :-1: error: (-5:Bad argument) in function 'line'
> Overload resolution failed:
>  - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
>  - Can't parse 'pt1'. Sequence item with index 0 has a wrong type

由于opencv版本问题,可安装 pip install opencv-python==3.3.1.11

参考:https://github.com/xingyizhou/CenterTrack/issues/211

04编译DCNv2

可变形卷积模块的时候会遇到各种编译报错问题,尤其是在使用的pytorch版本在1.7及以上时,下面记录一下我在使用过程中遇到的各种问题以及解决方案。

编译DCNv2时候,先设置CUDA_HOME,export CUDA_HOME=/usr/local/cuda-10.1

使用mmcv库中的DCN模块代替DCNv2官方库,使用起来非常简单,如下:

1.安装mmcv库:

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.7.0/index.html

2. 在代码中使用DCN:

from mmcv.ops import DeformConv2dPack as DCN

# 使用方法与官方DCNv2一样,只不过deformable_groups参数名改为deform_groups即可,例如:
dconv2 = DCN(in_channel, out_channel, kernel_size=(3, 3), stride=(2, 2), padding=1, deform_groups=2)

也可更换版本:

https://github.com/lbin/DCNv2/tree/pytorch_1.7

05安装pycocoapi, pip install “git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI“出错

解决:

linux:pip install "git+https://gitee.com/wsyin/cocoapi.git#subdirectory=PythonAPI"

windows:pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

06核心

这里的box为Box类。用的是四元数旋转矩阵做的三维空间转换。其中orientation: Quaternion是sample_annotation.json文件中读取的rotation

# 通过3D中心点(x,y,z)和相机内置参数calib,做矩阵变换,得到该3D中心点在二维图像上的位置(x',y')
amodel_center = project_to_image(
              np.array([box.center[0], box.center[1] - box.wlh[2] / 2, box.center[2]], 
                np.float32).reshape(1, 3), calib)[0].tolist()

提出了一种端到端的同时目标检测和跟踪框架,我们的方法将两个帧和一个先前的热图作为输入

跟踪当前帧的偏移。在具有挑战性的MOT17、KITTI和nuScenes 3D上创造了新的艺术状态跟踪基准。

07pip install nuscenes-devkit安装报错

解决:

pip install nuscenes-devkit -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值