本人在上一篇博客https://blog.csdn.net/hitzijiyingcai/article/details/81347402中写到本人成功运行了Faster RCNN的Tensorflow代码,在那篇博客中本人采用的是github上的这一个代码https://github.com/endernewton/tf-faster-rcnn,同时在那篇博客中,本人写到,也实验了其他github开源代码但并未成功,但是本人今日再一次实验验证时,发现对其中提到的另一个开源代码实验成功,对于其中的一个困扰了很久的问题有了解决方法,因此记录下来。
本次本人实验的代码为https://github.com/smallcorgi/Faster-RCNN_TF,它和前一篇博客中采用的代码并不一样,而且实现的过程也不一样,下面一一描述。
本文为博主原创,转载请注明出处:https://blog.csdn.net/hitzijiyingcai/article/details/81747148
1、环境准备
此部分内容为进行faster rcnn实验所共同必备的,参见本人上一篇博客。
2、程序运行
首先在github上下载
git clone https://github.com/smallcorgi/Faster-RCNN_TF
下载完成之后解压可得到如图所示
注意,下载的文件夹里并没有output这一文件夹,这个是本人为了方便后续工作新建的。
解压完成之后,进入Faster-rcnn-TF的文件夹下的lib文件夹进行编译:
正常情况下编译完成之后即可进行下一步。但是相信很多人会跟我一样在这里就卡住,会出现很多错误,本人之前就是卡在这里出现的错误中,对于此部分错误的解决,在后面第三部分详细介绍,先接着按照正常的继续进行。
下一步,在测试demo之前,需要下载一个训练好的模型,在github上作者提供了两个链接,但是都需要翻墙,在这里提供一个百度云下载地址: 链接:https://pan.baidu.com/s/1zNWzMxBwQ6qVoXXvN89Peg 密码:0rtb
下载完成之后,在tools文件夹下新建一个名称为model的文件夹,把下载好的模型放进去。
接着即可运行demo,
这里,运行的格式为:
cd $FRCN_ROOT
python ./tools/demo.py --model model_path
对于model模型存放的位置,大家根据自己修改,另外,对于tensorflow版本的模型来讲,它由三个文件(后缀名为data-00000-of-00001、index、meta)组成,所以大家只需要写到ckpt即可,这里我使用的是自己的模型路径。
正常情况下,到这里就能正确运行,可以得到正确的结果,
但是假如跟我一样是在服务器上而不是在本地运行的同学来说,要注意修改一下demo.py里面的部分内容,具体可以参看本人的上一篇博客。
在这里仍然放上正确的运行结果:
到这里就算运行成功,但是前面说了,其中有很多难以预料的错误之前困扰了本人,在这里一一列出。
3、运行错误集锦
(1)编译时报错
这是再说找不到nsync文件,因此要找到自己的此文件并添加进路径。这个错误也是困扰本人最久的,因为需要添加的文件路径并不好找。
解决方法:
根据错误指示打开mutex.h文件:
vim /share2/home/qingdong/anaconda-alter/envs/tf-2.7/lib/python2.7/site-packages/tensorflow/include/tensorflow/core/platform/default/mutex.h
添加路径:
#include “/share2/home/qingdong/anaconda-alter/envs/tf-2.7/lib/python2.7/site-packages/tensorflow/include/external/nsync/public/nsync_cv.h”
#include “/share2/home/qingdong/anaconda-alter/envs/tf-2.7/lib/python2.7/site-packages/tensorflow/include/external/nsync/public/nsync_mu.h”
这是本人的路径,替换成自己的对应路径即可。
(2)跑demo
解决办法:
修改make.sh文件:添加TF_LIB,并修改相应的编译参数
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')
......
g++ -std=c++11 -shared -o roi_pooling.so roi_pooling_op.cc -D_GLIBCXX_USE_CXX11_ABI=0 \
roi_pooling_op.cu.o -I $TF_INC -L $TF_LIB -ltensorflow_framework -D GOOGLE_CUDA=1 \
-fPIC $CXXFLAGS -lcudart -L $CUDA_PATH/lib64
......
修改后重新make,然后运行。
(3)运行demo过程中遇到的错误(之前遇到了此错误,本次没遇到)
g++: error: roi_pooling_op.cu.o: No such file or directory
解决:按如下步骤设置
(1) export PATH=$PATH:/usr/local/cuda-8.0/bin/ (你的CUDA路径) for your terminal
(2) 在$FRCN_ROOT/lib/ make.sh 文件中,将 CXXFLAGS+='-undefined dynamic_lookup'
改为 CXXFLAGS='-D_MWAITXINTRIN_H_INCLUDED'
(CUDA添加到环境变量
export PATH=$PATH:/usr/local/cuda-8.0/bin/)
部分内容参考自:
https://www.cnblogs.com/danpe/p/7825357.html,https://blog.csdn.net/weixin_39970417/article/details/80577863