Neural Motifs: Scene Graph Parsing with Global Context (CVPR 2018) 运行复现遇到的一些坑以及解决方法

潘自强
2023-12-01

写在前面

首先,感谢这篇文章 https://blog.csdn.net/weixin_38651565/article/details/87901172 的作者 @jiayan97
和他有很多交流帮助到了我很多。

这篇文章希望可以帮助到您,另外如果我尚未解决好的问题,您若有一些好的见解,还希望可以多多交流。

我的邮箱是 parkbubble@163.com

正文

下载数据集

下载VG_100K会有两个数据集压缩包,分别是images.zipimages2.zip,需要把它们解压出来的图片均放入同一个文件夹 VG_100K中,并放入正确的路径下。

PYTHONPATH

要按要求设置好PYTHONPATH,这一配置指明的是环境变量的路径,否则程序运行时会报出类似于 ModuleNotFoundError 的错误。

更改一些路径

  • 譬如运行scripts目录下的sh文档时,会出现 python: can’t open file ‘models/train_detector.py’: [Errno 2] No such file or directory 。这时候,把对应.py文档里面的相对路径改为绝对路径即可。
  • config.py里面的路径一定要保证正确。我因为这个出现了如下问题:
    File “/media/nopanic/DATA/AnExperiment/NeuralMotifs/neural-motifs-master/dataloaders/visual_genome.py”, line 260, in load_image_filenames
    assert len(fns) == 108073
    AssertionError

修改pycocotools文档

这个是强烈建议提前修改好,不然耗时间训练一半之后会报错 NameError: name ‘unicode’ is not defined
这个是Python版本带来的问题,本项目的推荐运行环境是python3.6。而2中的Unicode在3中被命名为str。
解决方法:

  1. 打开文档:
    sudo gedit $/anaconda3/lib/python3.6/site-packages/pycocotools/coco.py
  2. 替换第308行为(仅需改变最后一个单词)
    if type(resFile) == str or type(resFile) == bytes:

bash运行时报错 FileNotFoundError: [Errno 2] No such file or directory: /media/nopanic/DATA/AnExperiment/NeuralMotifs/neural-motifs-master/checkpoints/vgdet

解决方案:直接在路径下创建空文件夹checkpointvgdet

bash运行时报错 [: ==: unary operator expected

请参考这篇文章:
https://blog.csdn.net/goodlixueyong/article/details/6564591
我修改这样操作之后,仍然存在错误,不能进入判断后的语句块里面;懒得折腾了,又因为自己只有一块标记为0的显卡,所以删去判断语句,直接运行第一个语句块中的代码。

  • 查看自己可视GPU的指令是:
    nvidia-smi -L
    我的输出如下:
    GPU 0: GeForce GTX 1080 Ti

更改.tar文件的名字

  • tar文件是无法用解压指令或者软件完成解压的,它仅仅是将多个文件打包好,并没有压缩操作。
  • refine_for_detection.shtrain_models_sgcls.sh 文档里面 -ckpt 后面接有.tar文件,建议首先下载项目主页给出的对应下载链接,并且将下载的tar文件更改名字为.sh文件里面原有的tar文件名字,例如vg-24.tar
  • -ckpt 可以指明记录训练开始时的checkpoint信息,可以在pretrain_detector.sh-lr 指令之后加上 -ckpt 以及指定的checkpoint .tar文件。 (我在一次pretrain_detector.sh 运行时,中途停止,故使用了 -ckpt , 后面接着 -save_dir 中的vg-XX.tar 文件。
  • 另外,我运行train_models_sgcls.sh 时出现了 KeyError: ‘roi_fmap.0.weight’ in train_models_sgcls.sh ,我暂时的解决方法是使用pretrain_detector.sh 步骤中引导下载的 pretrained detector checkpoint
    下面的链接是该问题在Github项目主页上开的一个issue:
    https://github.com/rowanz/neural-motifs/issues/60

更改GPU的数目

原作者的运行环境中有三块GPU(Titan X ),所以在运行时会显示num_gpus : 3,因为是bash运行,所以这个更改要直接更改refine_for_detection.shtrain_models_sgcls.sh 里面对应的参数。

需要安装的一些Python包

pip install tqdm overrides pycocotools matplotlib h5py dill pandas

可以提前下载的东西

除了作者在Github主页上提到的一些东西,运行过程中还需要一些其他的下载内容,实验过程中网络不给力的同学可以提前下载好。

filenamedownload link
glove.42Bhttp://nlp.stanford.edu/data/glove.42B.300d.zip
glove.840Bhttp://nlp.stanford.edu/data/glove.840B.300d.zip
glove.twitter.27Bhttp://nlp.stanford.edu/data/glove.twitter.27B.zip
 类似资料: