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

文章目录

  • 一、GSDT是什么?
  • 二、搭建GSDT
    • 1.硬件
    • 2.读入数据
    • 3、搭建GSDT环境
  • 三、报错解决:
    • 错误一:
    • 错误二:
  • 四、复现:
  • 代码解读:
    • if __name__ == '__main__'
    • main()
  • 有待更新。。。

一、GSDT是什么?

GSDT使用图神经网络进行联合目标检测和多目标跟踪
论文下载
原作展示
MOT排名
开源地址
在这里插入图片描述
视觉学习笔记3——复现GSDT,且代码解读_第1张图片

介绍
对象检测和数据关联是多对象跟踪 (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
    

    视觉学习笔记3——复现GSDT,且代码解读_第2张图片

       # PyTorch Geometric包,用于搭建图神经网络架构
    	bash install_pyg.sh <CUDA_version>  
    	##是指CUDA=$1读取的参数
    	##比如cuda安装的是10.1版本那就把改成cu101 
    

    视觉学习笔记3——复现GSDT,且代码解读_第3张图片

         #安装DCNv2网络架构
    	cd ./src/lib/models/networks/DCNv2
    	bash make.sh
    

    视觉学习笔记3——复现GSDT,且代码解读_第4张图片

    #要自动将输出跟踪生成为视频,请安装 ffmpeg
    conda install ffmpeg=4.2.2
    
    #当你出现下面的错误1时,请安装cudatoolkit10.0,非必须
    conda install cudatoolkit=10.0
    

    具体安装包依赖库看下图
    视觉学习笔记3——复现GSDT,且代码解读_第5张图片

  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

视觉学习笔记3——复现GSDT,且代码解读_第6张图片
解决:
问题产生原因:
运行环境
cuda 10.1
cuda 与某些包版本不对应

方案:
在确定你的cuda安装正确,环境与动态链接库都没问题的情况下,可以尝试进行以下操作。 cudatoolkit是一个动态库,主要包含的是支持已经编译好的 CUDA 程序运行的相关的动态链接库。
(由于我是在anaconda虚拟环境中建立工程,因此只需要)
conda install cudatoolkit=10.0

错误二:

PermissionError: [Errno 13] Permission denied: ‘/data’
视觉学习笔记3——复现GSDT,且代码解读_第7张图片
解决:
问题产生原因:
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、拼接路径

有待更新。。。

你可能感兴趣的:(深度学习,python,深度学习,计算机视觉)