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安装cythonopencv-pythoneasydict这三个库。

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里面的提示一步一步走就应该没问题了(如果在本地测试的话)。

  1、clone 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, in demo
vis_detections(im, cls, dets, thresh=CONF_THRESH)
File "./tools/demo.py", line 50, in vis_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, in subplots
fig = figure(**fig_kw)
File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/pyplot.py", line 527, in figure
**kwargs)
File "/home/luoguiyang/env/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 46, in new_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, in new_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就可以运行了。后面调试的部分研究明白了再补上。

新人如何运行Faster RCNN的tensorflow代码的更多相关文章

  1. (原)faster rcnn的tensorflow代码的理解

    转载请注明出处: https://www.cnblogs.com/darkknightzh/p/10043864.html 参考网址: 论文:https://arxiv.org/abs/1506.01 ...

  2. faster RCNN(keras版本)代码讲解(3)-训练流程详情

    转载:https://blog.csdn.net/u011311291/article/details/81121519 https://blog.csdn.net/qq_34564612/artic ...

  3. Faster RCNN算法demo代码解析

    一. Faster-RCNN代码解释 先看看代码结构: Data: This directory holds (after you download them): Caffe models pre-t ...

  4. Faster RCNN算法训练代码解析(1)

    这周看完faster-rcnn后,应该对其源码进行一个解析,以便后面的使用. 那首先直接先主函数出发py-faster-rcnn/tools/train_faster_rcnn_alt_opt.py ...

  5. Faster RCNN算法训练代码解析(3)

    四个层的forward函数分析: RoIDataLayer:读数据,随机打乱等 AnchorTargetLayer:输出所有anchors(这里分析这个) ProposalLayer:用产生的anch ...

  6. ubuntu16.04下caffe以cpu运行faster rcnn demo

    参考https://haoyu.love/blog404.html 获取并修改代码 首先,我们需要获取源代码: git clone --recursive https://github.com/rbg ...

  7. Faster RCNN算法训练代码解析(2)

    接着上篇的博客,我们获取imdb和roidb的数据后,就可以搭建网络进行训练了. 我们回到trian_rpn()函数里面,此时运行完了roidb, imdb = get_roidb(imdb_name ...

  8. faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读

    参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...

  9. Windows下如何采用微软的Caffe配置Faster R-CNN

    前言 比较简单的一篇博客.https://github.com/microsoft/caffe 微软的Caffe以在Windows下编译简单而受到了很多人的喜爱(包括我),只用改改prop配置然后无脑 ...

随机推荐

  1. BZOJ:4209: 西瓜王

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4209 (虽然仅仅是看在名字的份上,我们还是得说这题是一道) 绝世好题!西瓜王!西瓜王!西瓜 ...

  2. [bzoj 2017] [Usaco2009 Nov]硬币游戏

    一个多月没更博客了..(期间明白了自己有多傻逼. 这种问题大概就倒着做... f[i][j]:表示考虑剩下的硬币i..n,且之前的人取了j个时,先手最多拿到的钱数.aft[i]:表示硬币i..n的总钱 ...

  3. Kafka入门介绍

    1. Kafka入门介绍 1.1 Apache Kafka是一个分布式的流平台.这到底意味着什么? 我们认为,一个流平台具有三个关键能力: ① 发布和订阅消息.在这方面,它类似一个消息队列或企业消息系 ...

  4. Django App(四) Submit a form

    经过前面的努力,到这里我们已经基本完成了,从服务器到浏览器的数据下发,还没有解决从浏览器到服务器的数据上传,这一节将创建一个Form获取从浏览器提交的数据 1.新建Form 接着前面建的项目,网上调查 ...

  5. 从零开始学习前端JAVASCRIPT — 3、JavaScript基础string字符串介绍

    1:字符串 JS中的任何数据类型都可以当作对象来看.所以string既是基本数据类型,又是对象. 2:声明字符串 基本数据类型:var sStr = '字符串'; 对象的方法:var oStr = n ...

  6. 从零开始学习前端JAVASCRIPT — 5、JavaScript基础BOM

    1:BOM(Browser  Object  Model)概念 window对象是BOM中所有对象的核心. 2:window属性(较少用) self:self代表自己,相当于window. windo ...

  7. 学习JVM-GC收集器

    1. 前言 在上一篇文章中,介绍了JVM中垃圾回收的原理和算法.介绍了通过引用计数和对象可达性分析的算法来筛选出已经没有使用的对象,然后介绍了垃圾收集器中使用的三种收集算法:标记-清除.标记-整理.标 ...

  8. Centos6.7安装mysql 5.6简单教程

    今天项目经理让我给服务器配一下mysql,以前配置mysql的时候,感觉好麻烦,前几天也帮朋友配置来着,今天装的时候一直报错,百度也没搞明白,所以打算换种方法装mysql,无意中发现了还有这种操作,容 ...

  9. 5.04 toArray()有一个问题须要解决一下

    把查询数据转为数组输出,这个toArray()方法是把对像转为数组输出,本身是没啥 问题.但是里面好像少写了一句判断:应先判断这个对像是否为空!如果为空则不转换直接输出空就行了吗,否则一个空值去转成数 ...

  10. 认识Linux分区

    前言 今年目标是熟练Linux系统与内核,没有老司机带只能自己慢慢参照鸟哥教程学习了.如果有老司机麻烦指导一下便捷路线,作为这方便的新手还是很乐意接受各位的意见.今天第一步就是熟悉安装Linux中分区 ...