文章目录
一、GSDT是什么?
GSDT使用图神经网络进行联合目标检测和多目标跟踪
论文下载
原作展示
MOT排名
开源地址
介绍
对象检测和数据关联是多对象跟踪 (MOT) 系统中的关键组件。尽管这两个组件相互依赖,但先前的工作通常单独设计检测和数据关联模块,这些模块以不同的目标进行训练。因此,我们无法反向传播梯度并优化整个 MOT 系统,从而导致次优性能。为了解决这个问题,最近的工作在联合 MOT 框架下同时优化检测和数据关联模块,这在两个模块中都显示出改进的性能。在这项工作中,我们提出了一种基于图神经网络 (GNN) 的联合 MOT 方法的新实例。关键思想是 GNN 可以在空间和时间域中对可变大小对象之间的关系进行建模,这对于学习用于检测和数据关联的判别特征至关重要。通过对 MOT15/16/17/20 数据集的大量实验,我们证明了我们基于 GNN 的联合 MOT 方法的有效性,并展示了检测和 MOT 任务的最新性能。
二、搭建GSDT
1.硬件
电脑一台
显卡(我用的是1060Ti)
2.读入数据
- Linux系统
-
Ubuntu18,NVIDIA,cuda10.1,cudnn,pycharm,anaconda3,pytorch(具体安装方法可以看我以前的
博客
)
3、搭建GSDT环境
首先去把项目源文件下载下来
在完成第二步基础环境的搭建后,开始搭建它独有环境。
-
虚拟环境
创建一个新的anaconda虚拟环境conda create -n (自定义环境名) python=3.6
激活进入虚拟环境:
source activate(自定义环境名)
-
安装依赖包
在项目源文件中整合了几个依赖包文件requirements.txt、 install_pyg.sh,我们只需要进入对应文件夹下指令安装就可以了# 一些基本的库 pip install requirements.txt
# PyTorch Geometric包,用于搭建图神经网络架构 bash install_pyg.sh <CUDA_version> ##<CUDA_version>是指CUDA=$1读取的参数 ##比如cuda安装的是10.1版本那就把<CUDA_version>改成cu101
#安装DCNv2网络架构 cd ./src/lib/models/networks/DCNv2 bash make.sh
#要自动将输出跟踪生成为视频,请安装 ffmpeg conda install ffmpeg=4.2.2
#当你出现下面的错误1时,请安装cudatoolkit10.0,非必须 conda install cudatoolkit=10.0
具体安装包依赖库看下图
-
数据准备
准备
2DMOT15
和
MOT20
数据,可以直接从
MOT Challenge
网站下载(
进不去的话可能需要梯子
),每个目录格式如下:MOT15 |——————images(新建文件夹) | └——————train(移入) | └——————test(移入) └——————labels_with_ids(新建文件夹) └——————train(新建文件夹) MOT20 |——————images(新建文件夹) | └——————train(移入) | └——————test(移入) └——————labels_with_ids(新建文件夹) └——————train(新建文件夹)
还要去相应地更改 src/gen_labels_15.py 和 src/gen_labels_20.py 中的 seq_root 和 label_root,并运行:
cd src python gen_labels_15.py python gen_labels_20.py
按照以下链接下载并保存每个数据集的预训练权重(
进不去的话可能需要梯子
):
数据集 | 模型 |
---|---|
2DMOT15 |
地址 |
MOT17 |
地址 |
MOT20 |
地址 |
三、报错解决:
错误一:
ImportError: libcudart.so.10.0: cannot open shared object file: No such file or directory
解决:
问题产生原因:
运行环境
cuda 10.1
cuda 与某些包版本不对应
方案:
在确定你的cuda安装正确,环境与动态链接库都没问题的情况下,可以尝试进行以下操作。 cudatoolkit是一个动态库,主要包含的是支持已经编译好的 CUDA 程序运行的相关的动态链接库。
(由于我是在anaconda虚拟环境中建立工程,因此只需要)
conda install cudatoolkit=10.0
错误二:
PermissionError: [Errno 13] Permission denied: ‘/data’
解决:
问题产生原因:
osp.join拼接的文件路径不对,MOT文件放置的地方不对。文件路径问题比较常见举此一例,其他的也是如此处理。
方案:
检查代码可得,代码要求MOT文件放在src/data/下,另外src/lib/cfg/mot15.json文件的”root”:“/data”应该改为”root”:“./data”。之后就可以成功下载dla34-ba72cf86.pth预训练文件了
四、复现:
#运行以下命令之一来重现我们论文在 MOT 挑战赛上的跟踪性能。
cd ./experiments
track_gnn_mot_AGNNConv_RoIAlign_mot15.sh <path/to/model_mot15>
track_gnn_mot_AGNNConv_RoIAlign_mot17.sh <path/to/model_mot17>
track_gnn_mot_AGNNConv_RoIAlign_mot20.sh <path/to/model_mot20>
代码解读:
根据作者github最后一段的命令,开始我们的复现:
cd ./experiments
track_gnn_mot_AGNNConv_RoIAlign_mot15.sh <path/to/model_mot15>
track_gnn_mot_AGNNConv_RoIAlign_mot17.sh <path/to/model_mot17>
track_gnn_mot_AGNNConv_RoIAlign_mot20.sh <path/to/model_mot20>
根据.sh命令打开track_gnn.py,直奔
if __name__ == '__main__'
。
if
name
== ‘
main
’
如果.sh命令后面接的是model_mot15模型地址的话,那么将会执行这段:
if opt.test_mot15:
# 三引号是指多行字符输入可直接回车,不需要转行字符\n
seqs_str = '''ADL-Rundle-1
ADL-Rundle-3
AVG-TownCentre
ETH-Crossing
ETH-Jelmoli
ETH-Linthescher
KITTI-16
KITTI-19
PETS09-S2L2
TUD-Crossing
Venice-1'''
config_path = './lib/cfg/mot15.json'
# json.load()是用来读取文件的,即,将文件打开然后就可以直接读取
data_config = json.load(open(config_path))
seq2conf = data_config['test_confs']
data_root = f"{data_config['root']}/MOT15/images/test"
det_root = f"{data_config['root']}/MOT15/images/test"
读取并修改了.json文件,然后继续执行:
if not opt.eval_from_file_only:
main(opt, seq2conf,
data_root=data_root,
det_root=det_root,
seqs=seqs,
exp_name=opt.exp_name,
show_image=False,
save_images=opt.save_images,
save_videos=opt.save_videos)
带着它的参数们进入main()
main()
1、首先输出一下代码信息
2、拼接路径
有待更新。。。