Tensorflow-gpu 版 faster-rcnn demo

    经过一顿折腾,终于跑通了tensorflow版的faster rcnn,mark一下。

    git源代码:git clone --recursive https://github.com/smallcorgi/Faster-RCNN_TF.git。这是github上面star最多的,也还有其他的实现,不过这个应该是最靠谱的。

     进入Fater-RCNN/lib目录,执行make,正常情况下,会在roi_pooling_layer和utils目录下面生成.so文件,然后下载模型,再执行python tools/demo.py --model model_path,就可以进行目标检测了。

    其中,模型指的是别人训练好的模型,如github主页(https://github.com/smallcorgi/Faster-RCNN_TF)上面说的在PASCAL VOC 2007数据集上面训练的VGG16网络,但模型是在[Google Drive] [Dropbox],想要下载得搭梯子。

    但是,在make和运行demo过程中,会出现各种问题,如roi_pooling.so: undefined symbol、undefined symbol: __cudaPopCallConfiguration、undefined symbol: _ZTIN10tensorflow8OpKernelE、undefined symbol: _ZN10tensorflow7strings6StrCatERKNS0_8AlphaNumES3_等等错误,甚至还出现了ImportError: libcudart.so.9.2: cannot open shared object file: No such file这个错误(明明我安装的是CUDA9.0,无奈把tensorflow和CUDA都卸载了重新安装)。

    经过一番搜索,发现问题出在lib/make.sh这个文件上面,可能对不同版本的tensorflow不太友好,一顿尝试之后,终于成功解决。

    make.sh代码如下:

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())')

CUDA_PATH=/usr/local/cuda/
CXXFLAGS=''

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

cd roi_pooling_layer

if [ -d "$CUDA_PATH" ]; then
	nvcc -std=c++11 -c -o roi_pooling_op.cu.o roi_pooling_op_gpu.cu.cc \
		-I $TF_INC -D GOOGLE_CUDA=1 -x cu -Xcompiler -fPIC $CXXFLAGS \
		-arch=sm_37 --expt-relaxed-constexpr \

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

else
	g++ -std=c++11 -shared -o roi_pooling.so roi_pooling_op.cc \
		-I $TF_INC -fPIC $CXXFLAGS
fi

cd ..

    其中,主要修改的地方有:

    添加第二行: TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')

    修改CUDA_PATH为自己的cuda安装目录

    添加了--expt-relaxed-constexpr参数,这个是为了避免warnning:calling a constexpr __host__ function from a __host__ __device__ function is not allowed

    修改参数-D_GLIBCXX_USE_CXX11_ABI=1 (如果不行,可以试试把这个参数改成0)

    添加参数 -L$TF_LIB -ltensorflow_framework

    

你可能感兴趣的:(机器学习)