Tensoflow版本Faster R-CNN的demo运行调试(TFFRCNN版)

是在参考这篇文章的基础以及作者的相关博客来进行的,在这里只是补充一些自己在整个过程中遇到的问题,建议详细阅读远原文章,作者讲解的非常详细。

首先在克隆工程和编译Cython模块时遇到了一些问题。在进入到lib文件下使用make命令进行时遇到了一些错误提示,大概意思就是没有安装Cython.Distutils和TensorFlow等等,然而自己明明安装了的。最终想到自己的Mac上已经安装了Python3,但是在lib文件夹下的make.sh和MakeFile文件中使用的是Python开头的命令:

 

 

修改成Python3即可:

 

另外,由于原版是Python2 写的,运行时一直出错,左后无奈我从Python3切换到了Python2。依然报错:undefined symbol: _ZTIN10tensorflow8OpKernelE。查到了资料发现是和TensorFlow的动态库链接时出现了错误。然而我们采用的是TTFRCNN, 并不是Faster-RCNN_TF,对于Faster-RCNN_TF,感觉有一篇博客写的相当不错,可以参考一下。 TTFRCNN中有些pooling文件还不一样。而网上大部分给出的是Faster-RCNN_TF,照着网上大部分答案并不能解决问题。最后通过替换的方式把make.sh文件内容替换为:

#!/usr/bin/env bash
TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')
echo $TF_INC
NSYNC_INC=$TF_INC"/external/nsync/public"
CUDA_PATH=/usr/local/cuda/

CXXFLAGS='-D_GLIBCXX_USE_CXX11_ABI=0'

#if [[ "$OSTYPE" =~ ^darwin ]]; then
#	CXXFLAGS+='-undefined dynamic_lookup'
#fi


cd roi_pooling_layer


nvcc -std=c++11 -c -o roi_pooling_op.cu.o roi_pooling_op_gpu.cu.cc \
	-I $TF_INC -I $NSYNC_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC $CXXFLAGS \
	-arch=sm_37 -L $TF_LIB -ltensorflow_framework

g++ -std=c++11 -shared -o roi_pooling.so roi_pooling_op.cc \
	roi_pooling_op.cu.o -I $TF_INC  -I $NSYNC_INC -D GOOGLE_CUDA=1 -fPIC $CXXFLAGS \
	-lcudart -L $CUDA_PATH/lib64 -L $TF_LIB -ltensorflow_framework

cd ..


# add building psroi_pooling layer
cd psroi_pooling_layer
nvcc -std=c++11 -c -o psroi_pooling_op.cu.o psroi_pooling_op_gpu.cu.cc \
	-I $TF_INC -I $NSYNC_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC $CXXFLAGS \
	-arch=sm_37 -L $TF_LIB -ltensorflow_framework

g++ -std=c++11 -shared -o psroi_pooling.so psroi_pooling_op.cc \
	psroi_pooling_op.cu.o -I $TF_INC -I $NSYNC_INC -D GOOGLE_CUDA=1 -fPIC $CXXFLAGS \
	-lcudart -L $CUDA_PATH/lib64 -L $TF_LIB -ltensorflow_framework


## if you install tf using already-built binary, or gcc version 4.x, uncomment the two lines below
g++ -std=c++11 -shared -D_GLIBCXX_USE_CXX11_ABI=0 -o psroi_pooling.so psroi_pooling_op.cc \
	psroi_pooling_op.cu.o -I $TF_INC -I $NSYNC_INC -D GOOGLE_CUDA=1 -fPIC $CXXFLAGS \
	-lcudart -L $CUDA_PATH/lib64 -L $TF_LIB -ltensorflow_framework

cd ..

成功解决问题。 

继续填坑.....

于在跑该程序的时候,是在新安装的Ubuntu电脑上配置的Python来跑的,有了这个错误提示:ImportError: libcublas.so.9.0: cannot open shared object file: No such file...

该错误提示可能存在很多原因,要么就是TensorFlow-gpu版本对应的cudn或者cudnn的版本不匹配所致,要么就是没有和动态库相连接,这种没有动态库链接的解决方法在stackoverflow上给出了解决方法链接。总的来说就是,现在/usr/local/cuda-9.0/lib64/文件夹下查看是否有libcudart.so.9.0这个文件,如果有的话在命令行中输入:
echo 'export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda- 9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc

另外一种方法或许也有效:在命令行输入

sudo ldconfig /usr/local/cuda-9.0/lib64

pip管理指向python还是python3

由于在电脑上安装了Python2又安装了Python3,本来pip应当指向Python2,而pip3指向Python3。但是经过多次折腾,电脑上的pip和pip3都指向了Python3,这样如果python2里面缺少模块,安装新的模块成了新的问题。使用pip2固然可以指向python2。但是pip2的版本过低,升级有成了问题。那么如果使pip重新指向python2呢。通过以下命令:

which pip

我电脑所在输出:/usr/local/bin/pip

然后用vim命令对pip进行编辑:vim /usr/local/bin/pip

在第一行可以看到以下内容

/usr/local/opt/python@2/bin/python3.5

进入vim环境敲击字母:i ,进入插入模式。将3.5去掉或者改成2.7即可。然后点击esc,回到普通模式,最后qw! 退出保存即可

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值