越旧的代码往往越难跑通。在配置对应的环境时,可能遇到许许多多的困难:
- conda已经不支持需要的旧版本框架,则需要手动安装
- 框架版本太旧,和本机cuda不适配,编译报错
- 某些包需要降级
- 基于caffe源码,需要进行c编译的步骤
- …
在运行Faster-RCNN pytorch时,我就踩到了上面的这些坑,最终在cuda版本不对应上被卡住了(重装cuda太不划算了,而且我也没有实验室服务器的权限)。
但是,我发现此项目下还有 Faster-RCNN pytorch-1.0 分支。尽管还是遇到了困难,一番尝试后终于跑通。个人认为 1.0 版本比 0.4 版本观感好太多了,此处推荐直接使用 1.0 版本。
README补充
环境配置
README中对环境要求的阐述没有十分详尽,现做一些补充:
这里pytorch并不一定是1.0,也可以是更高的版本。
附上我跑通的环境,可以直接照用:
python==3.6.9
pytorch==1.1.0
CUDA 10.0
编译过程
编译cuda依赖:
cd lib
python setup.py build develop
README中提到,编译的默认python版本是2.7,如果版本不同要自己编译。(吓了我一跳)实际上我用3.6.9,也成功用此语句编译完成。(后面lib又报了错,应该与此无关。)
报错汇总
汇总一下各种报错。
cannot import name ‘_mask’
参考https://github.com/cocodataset/cocoapi/issues/59#issuecomment-469859646。
下载最新的cocoapi,并进入对应路径make。
git clone https://github.com/pdollar/coco.git
cd coco/PythonAPI
make
可以看到编译得到的文件中有一个pycocotools文件夹,将原来的faster-rcnn.pytorch/lib/pycocotools文件夹中全部内容进行替换,即可。
Illegal instruction (core dumped)
命令行缺少参数–cuda,加上即可
python demo.py --net res101 --checksession 1 --checkepoch 10 --checkpoint 2504 --cuda
ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.
忘记切换到 pytorch-1.0 分支
git checkout pytorch-1.0
undefined symbol: __cudaRegisterFatBinaryEnd
这个错误我在Faster-RCNN pytorch-0.4 版本一直无法解决。所以改用 1.0 分支。
ImportError: cannot import name imread
将scipy的版本降低
pip install scipy==1.2.1
fasterRCNN.load_state_dict(checkpoint[model"]) KeyError:‘model’
下载项目README中提供的模型。我当时是将用于train的预训练vgg或resnet网络错放进了test过程,导致了这个错误。