运行这个代码我只想说fuck fuck!好多坑啊…
我运行的代码是 smallcorgi/Faster-RCNN_TF版本的,其实github上大多的faster-rcnn-tf都差不多,都是照着源码写的,像这种官方的代码运行起来真费劲!
1. 运行环境
这一部分超级重要,要想少走弯路.我的运行环境ubuntu16.04 + cuda8+cudnn6+python2.7+tensorflow1.3.0github上大多的代码都是用python2写的,我也没去详细的找python3的,还有这个版本的代码最好是在cuda8上运行,我试过cuda10的,也试过cuda9的都没有运行出来,最后用了cuda8,还有一点要注意,tensorflow版本不能过高,这个作者给出的是tf1.2,由于cuda和cudnn版本问题我安装的是tf1.3.0,也可以运行,但是,过高的版本不可以,会报错,下面我会例举一些我遇到的问题,但是由于当时忘记截图,只能语言描述,但是大部分的问题都是cuda,和tf版本问题,如果你用了我说的这个版本基本不会报错.
2. 遇到的坑
-
1
这个就是cuda版本的问题,用cuda8(刚开始的时候不要对安装不同版本cuda太过抗拒,慢慢的就习惯了…) -
2
File "/home/ubuntu/Faster-RCNN_TF/tools/../lib/networks/VGGnet_test.py", line 57, in setup .fc(4096, name='fc6') File "/home/ubuntu/Faster-RCNN_TF/tools/../lib/networks/network.py", line 25, in layer_decorated layer_output = op(self, layer_input, *args, **kwargs) File "/home/ubuntu/Faster-RCNN_TF/tools/../lib/networks/network.py", line 246, in fc feed_in, dim = (input, int(input_shape[-1])) TypeError: int returned non-int (type NoneType)
遇到这个问题不要哭,洗个脸接着运行!
这个就是典型的tf版本过高的问题,安装低版本的tf-gpu,但要注意,也许你安装的cuda,tf,python版本不匹配,也会报错,我尝试了好多个版本的tf,最后用了cuda8+cudnn6+tf1.3.0这个版本的 -
3
cd $FRCN_ROOT/lib
make
After this step I am getting an error:
aquib@javed:~/Faster-RCNN_TF/lib$ make all
python setup.py build_ext --inplace
running build_ext
skipping 'utils/bbox.c' Cython extension (up-to-date)
skipping 'utils/nms.c' Cython extension (up-to-date)
skipping 'nms/cpu_nms.c' Cython extension (up-to-date)
skipping 'nms/gpu_nms.cpp' Cython extension (up-to-date)
rm -rf build
bash make.sh
make.sh: line 13: nvcc: command not found
g++: error: roi_pooling_op.cu.o: No such file or directory
g++: error: GOOGLE_CUDA=1: No such file or directory
这是啥东西?你肯定会问为什么我会这么惨,跑个代码都跑不出来…
别慌,遇到这个问题,你看看你的gcc版本,我的这个版本就是gcc+±5x的,网上说这个版本的gcc会遇到这样的问题,所以你可以试着安装gcc+±4x版本,
执行
nvcc --version
这会安装gcc+±4.9
sudo apt-get install gcc++-4.9
安装完gcc 4.9 后,你的电脑里会有gcc5x和gcc4x 两个版本,这时候
cd /usr/bin
cd到该目录下,然后会看到,有三个g++相关的东西,其中g++是个链接,我们需要删除
sudo rm -rf g++
sudo ln -s g++-4.9 g++
这两行指令,第一句是删除这个链接,第二句是新建一个链接g++指向g+±4.9
- 4
这个问题也许你会遇到,如果一开始的时候你的cuda版本不对,然后执行make了,那么make中的一些文件已经编译了,这样如果及时我们后来更改了cuda版本同样会报错,所以,要删除编译好的文件,按照指示删除指定目录下的*.pyc, .o,.so文件
- 5
这个问题很有意思
ValueError: Object arrays cannot be loaded when allow_pickle=False
定位到你自己numpy 所在的文件夹下,找到format.py文件,然后注释掉报错的代码
出问题的是692行,注掉了,就好了。
运行这个代码遇到的坑就记得这么多了,只能说运行这种偏官方的代码真难…