视觉学习笔记3——复现GSDT,且代码解读

  • Post author:
  • Post category:其他




一、GSDT是什么?

GSDT使用图神经网络进行联合目标检测和多目标跟踪


论文下载



原作展示



MOT排名



开源地址


在这里插入图片描述

请添加图片描述


介绍


对象检测和数据关联是多对象跟踪 (MOT) 系统中的关键组件。尽管这两个组件相互依赖,但先前的工作通常单独设计检测和数据关联模块,这些模块以不同的目标进行训练。因此,我们无法反向传播梯度并优化整个 MOT 系统,从而导致次优性能。为了解决这个问题,最近的工作在联合 MOT 框架下同时优化检测和数据关联模块,这在两个模块中都显示出改进的性能。在这项工作中,我们提出了一种基于图神经网络 (GNN) 的联合 MOT 方法的新实例。关键思想是 GNN 可以在空间和时间域中对可变大小对象之间的关系进行建模,这对于学习用于检测和数据关联的判别特征至关重要。通过对 MOT15/16/17/20 数据集的大量实验,我们证明了我们基于 GNN 的联合 MOT 方法的有效性,并展示了检测和 MOT 任务的最新性能。



二、搭建GSDT



1.硬件

电脑一台

显卡(我用的是1060Ti)



2.读入数据

  1. Linux系统
  2. Ubuntu18,NVIDIA,cuda10.1,cudnn,pycharm,anaconda3,pytorch(具体安装方法可以看我以前的

    博客



3、搭建GSDT环境

首先去把项目源文件下载下来

在完成第二步基础环境的搭建后,开始搭建它独有环境。

  1. 虚拟环境

    创建一个新的anaconda虚拟环境

    conda create -n (自定义环境名) python=3.6
    

    激活进入虚拟环境:

     source activate(自定义环境名)
    
  2. 安装依赖包

    在项目源文件中整合了几个依赖包文件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
    

    具体安装包依赖库看下图

    在这里插入图片描述

  3. 数据准备

    准备

    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、拼接路径



有待更新。。。



版权声明:本文为qq_45848817原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。