0. 目的
刚刚学习 faster rcnn 目标检测算法, 在尝试跑通 github 上面 Xinlei Chen 的 tensorflow 版本的 faster rcnn 代码时候遇到很多问题(我真是太菜), 代码地址如下:
https://github.com/endernewton/tf-faster-rcnn
1. 运行环境配置
代码的 README 里面说明了, 环境要求既有是这个 git 里面的, 还有就是 rbg 的 caffe 代码中也有了一些环境基本上包括:
python2.7
CUDA(并行计算库)>=6.0
cudnn(深度学习库)
- cython,
- opencv-python
- easydict=1.6
当然这只是跑通代码的环境, 并没有那么苛刻的
1.1 检查环境
检查环境的目的是为了安装 TensorFlow, 首先是
1.1.1 Linux 内核和发行版
需要查看 linux 内核和发行版, 来确定后续一些软件的安装版本选择如何查看 LINUX 发行版的名称及其版本号: https://www.qiancheng.me/post/coding/show-linux-issue-version
查看 Linux 内核
uname -a
查看 Linux 发行版
cat / etc / redhat - release#centos 下面的命令
我用的是 centos, 在运行 demo 期间没发现什么问题, 但最好是用 Ubutu 14 或者 16 吧
1.1.2 检查 cuda 和 cudnn 的版本
chen 推荐的是 TensorFlow 的 r1.2 版本, 应该是安装 r1.2 推荐的 cuda 和 cudnn, 但是因为我没有服务器的 root 权限, 无法更改 cuda 和 cudnn, 所以只能选择一个和本机环境相对应的 tensorflow 版本了
注意这里如果不安装匹配的版本, 可能会出现 cudnn 库找不到的情况,(别问我怎么知道的),https://stackoverflow.com/questions/42013316/after-building-tensorflow-from-source-seeing-libcudart-so-and-libcudnn-errors, 如果有 root 权限的, 最好是装 r1.2 版本的, 当然要查好 r1.2 支持的 cuda 和 cudnn, 方法也在下面
查看 cuda 的版本: http://blog.csdn.net/zhangjunhit/article/details/76532196
cat / usr / local / cuda / version.txt
查看 cudnn 版本:
cat / usr / local / cuda / include / cudnn.h | grep CUDNN_MAJOR - A 2
我的 cuda=8,cudnn=6
到 tensorflow 的官网上查对应的 TF 版本: https://www.tensorflow.org/install/install_sources#common_installation_problems
如果没有 GPU 的就安装 cpu 版本, README 里面说 cpu 也是能运行的, 我没试
1.2 安装 Anaconda 和 TensorFlow
tensorflow r1.4 的安装教程: https://www.tensorflow.org/versions/r1.4/install/install_linux?hl=zh-cn, 我是按照 Anaconda 的方法弄的, 比较简单
因为我的系统上面安装了 anaconda, 之前装了 python3 为了方便, 直接用 anaconda 新开了一个环境, 装了 python2.7 教程: https://www.jianshu.com/p/d2e15200ee9b
创建环境:
conda create - n tensorflow python = 2.7
进入环境:
source activate tensorflow
前面这样显示就对了(我的名字叫 python27, 你的应该是 tensorflow)
使用 pip 安装 tensorflow:
pip install--ignore - installed--upgrade tfBinaryURL
注意这里的 tfBinaryURL 是 URL of the TensorFlow Python package , 但这里面都是谷歌的镜像, 要是没挂科学上网的话应该是访问不到的, 我是用的阿里的镜像: http://mirrors.aliyun.com/pypi/simple, 自己找合适的版本, 我用的是 http://mirrors.aliyun.com/pypi/packages/68/b4/8731e144a68a6044b8eba47f51f0a862c696b0c016c8512ca2aa3916f62a/tensorflow_gpu-1.4.0rc1-cp27-cp27mu-manylinux1_x86_64.whl
更多镜像在: https://www.jianshu.com/p/502638407add
输入上面的命令之后就成功了, 运行了一下官方的测试:
成功输出: Hello,TensorFlow!
1.3 安装其他依赖
保持在 tensorflow 这个环境中, 继续用 pip 安装 cython, opencv-python,
easydict 这三个库
- pip install cython
- pip install opencv-python
- pip install easydict==1.6
链接 cython 模块的时候出现了一个警告, 具体什么原因我也不太清楚, 就暂时没有管它, 最后也是能运行 demo 的
cc1plus: 警告: command line option -Wstrict-prototypes is valid for C/ObjC but not for C++ [默认启用]
- In file included from / home / luoguiyang / env / anaconda3 / envs / python27 / lib / python2.7 / site - packages / numpy / core / include / numpy / ndarraytypes.h: 1816 : 0,
- from / home / luoguiyang / env / anaconda3 / envs / python27 / lib / python2.7 / site - packages / numpy / core / include / numpy / ndarrayobject.h: 18,
- from / home / luoguiyang / env / anaconda3 / envs / python27 / lib / python2.7 / site - packages / numpy / core / include / numpy / arrayobject.h: 4,
- from nms / gpu_nms.cpp: 346 :
/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: 警告:#warning "Using deprecated NumPy API, disable it by" "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
- #warning "Using deprecated NumPy API, disable it by"\ ^ g++-pthread - shared - L / home / luoguiyang / env / anaconda3 / envs / python27 / lib - Wl,
- -rpath = /home/luoguiyang / env / anaconda3 / envs / python27 / lib,
- --no - as - needed build / temp.linux - x86_64 - 2.7 / nms / nms_kernel.o build / temp.linux - x86_64 - 2.7 / nms / gpu_nms.o - L / usr / local / cuda / lib64 - L / home / luoguiyang / env / anaconda3 / envs / python27 / lib - Wl,
- -R / usr / local / cuda / lib64 - lcudart - lpython2.7 - o / home / luoguiyang / projects / 3dcnn / branch / tf - faster - rcnn / lib / nms / gpu_nms.so rm - rf build
3 下载代码和数据
到这一步, 按照 README 里面的提示一步一步走就应该没问题了(如果在本地测试的话)
1clone github 的仓库
git clone https://github.com/endernewton/tf-faster-rcnn.git
2 更新 GPU 的架构配置, 到 setup.py 中找到 -arch 这个参数, 改成自己的 GPU 架构就行了
- cd tf-faster-rcnn/lib
- # Change the GPU architecture (-arch) if necessary
- vim setup.py
对应的配置如右图, github 里面可能会对一些其他的显卡更新参数
3 链接 cython 模块, 注意这也是在上一步那个 lib 文件夹中进行的
- make clean
- make
- cd ..
4 安装 Python COCO API, 这是为了使用 COCO 数据库
- cd data
- git clone https://github.com/pdollar/coco.git
- cd coco/PythonAPI
- make
- cd ../../..
4 运行 Demo 和测试预训练模型
1 下载预训练模型
- #Resnet101
- for voc pre - trained on 07 + 12 set. / data / scripts / fetch_faster_rcnn_models.sh
README 里面也说了, 下载链接可能会失效, sh 文件里面给了一个备用链接也是不管用的, 但是 readme 里面还给了备份的 Google Drive 的地址, 我把其中的要用的模型 voc_0712_80k-110k.tgz 这个文件手动下载了(百度云备份: https://pan.baidu.com/s/1kWkF3fT), 下载之后放到 data 文件夹中就行,(但是 md5sum 校验值对不上, 估计是下载地址不一样的问题, 也暂时忽略吧), 运行以下命令解压:
tar xvf voc_0712_80k - 110k.tgz
2 建立预训练模型的软连接
- NET=res101
- TRAIN_IMDB=voc_2007_trainval+voc_2012_trainval
- mkdir -p output/${NET}/${TRAIN_IMDB}
- cd output/${NET}/${TRAIN_IMDB}
- ln -s ../../../data/voc_2007_trainval+voc_2012_trainval ./default
- cd ../../..
3 运行以下代码就能测试 demo 了, 主义是在 tf-faster-rcnn 这个根文件夹中运行
- #at repository root GPU_ID = 0 CUDA_VISIBLE_DEVICES = $ {
- GPU_ID
- }. / tools / demo.py
这里还有一个问题, demo 里面一个文件 import matlibplot.pyplot , 这时候如果是用终端连接的服务器的话, 可能会出现 DISPLAY 变量未设置这个 bug,echo $DISPLAY 命令这时候肯定是什么不显示的错误如下:
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Demo
- for data / demo / 000456.jpg Detection took 1.316s
- for 300 object proposals Traceback(most recent call last) : File "./tools/demo.py",
- line 153,
- in<module > demo(sess, net, im_name) File "./tools/demo.py",
- line 100,
- indemo vis_detections(im, cls, dets, thresh = CONF_THRESH) File "./tools/demo.py",
- line 50,
- invis_detections fig,
- ax = plt.subplots(figsize = (12, 12)) File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/pyplot.py",
- line 1177,
- insubplots fig = figure( * *fig_kw) File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/pyplot.py",
- line 527,
- infigure * *kwargs) File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py",
- line 46,
- innew_figure_manager
- return new_figure_manager_given_figure(num, thisFig) File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py",
- line 53,
- innew_figure_manager_given_figure canvas = FigureCanvasQTAgg(figure) File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py",
- line 76,
- in__init__ FigureCanvasQT.__init__(self, figure) File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt4.py",
- line 68,
- in__init__ _create_qApp() File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt5.py",
- line 138,
- in_create_qApp raise RuntimeError('Invalid DISPLAY variable') RuntimeError: Invalid DISPLAY variable
这是因为 matplotlib 输出的图像没有输出出来, 有两种方法:
解决方法 (1) 设置 X11 转发, 具体方法 Google 一下, 因为我的服务器没有配置 Xauth, 我也没有 root 权限, 所以对我不适用了
解决方法 (2) 改代码, 不要让图像 show 了, 而是把图像保存起来错误里面可以看出引入 matplotlib 的是 ./tools/demo.py 这个文件, 教程: http://rootlu.com/blog/2017/10/08/MatplotlibInLinux.html/
更改了两处
改完之后, 图片就保存在 tf-faster-rcnn 这里了, 下载下来是这样的(没仔细改代码, 只保存了一幅)
基础的 demo 就可以运行了后面调试的部分研究明白了再补上
来源: https://www.cnblogs.com/toone/p/8433581.html