Faster RCNN 运行步骤

Caffe 框架环境搭建

============

Ubuntu14.04 + GPU + CUDA + cuDNN + OpenCV

CUDA (compute Unified Device Architecture, 统一计算架构)是由NVIDIA所推出的一种集成技术。

显卡的的类别
1) NVIDIA
2) AMD

CPU 和 GPU 区别:

CPU (Central Processing Unit) 即中央处理器

GPU (Graphics Processing Unit) 即图形处理器

GPGPU全称General Purpose GPU,即通用计算图形处理器。其中第一个“GP”通用目的(GeneralPurpose)而第二个“GP”则表示图形处理(GraphicProcess)

CPU虽然有多核,但总数没有超过两位数,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,并辅助有很多加速分支判断甚至更复杂的逻辑判断的硬件;

GPU的核数远超CPU,被称为众核(NVIDIA Fermi有512个核)。每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单(GPU初始时在浮点计算上一直弱于CPU)。

GPU由于历史原因,是为了视频游戏而产生的(至今其主要驱动力还是不断增长的视频游戏市场),在三维游戏中常常出现的一类操作是对海量数据进行相同的操作。

当程序员为CPU编写程序时,他们倾向于利用复杂的逻辑结构优化算法从而减少计算任务的运行时间,即Latency。
当程序员为GPU编写程序时,则利用其处理海量数据的优势,通过提高总的数据吞吐量(Throughput)来掩盖Lantency

CPU擅长处理具有复杂计算步骤和复杂数据依赖的计算任务,如分布式计算,数据压缩,人工智能,物理模拟,以及其他很多很多计算任务等。

CUDA

CUDA(Compute Unified Device Architecture),是英伟达公司推出的一种基于新的并行编程模型和指令集架构的通用计算架构,它能利用英伟达GPU的并行计算引擎,比CPU更高效的解决许多复杂计算任务。

使用CUDA的好处就是透明。根据摩尔定律GPU的晶体管数量不断增多,硬件结构必然是不断的在发展变化,没有必要每次都为不同的硬件结构重新编码,而CUDA就是提供了一种可扩展的编程模型,使得已经写好的CUDA代码可以在任意数量核心的GPU上运行。

CuDNN

NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中.

CuDNN 支持的算法
1.卷积操作、相关操作的前向、后向过程
2.pooling 的前向后向过程
3.softmax 的前向后向过程
4.激活函数的前向后向过程
ReLU
sigmoid
TANH
5.Tensor 的转化函数。其中一个Tensor就是一个四维的向量

CUDA 编程

开发人员可以通过调用CUDA的API ,来进行编程,达到高性能计算的目的。NVIDA 公司为了吸收更多的开发人员,对CUDA进行了编程语言扩展。CUDA C/C++ 可以作为一个新的编程语言。NVDIA 配置了相应的编译器nvcc 。

主要概念与名称

1.主机
将CPU 及系统的内存(内存条)称为主机。
2.设备
将GPU 以及GPU本身的显示内存称为设备
3.线程(Thread)
一般通过GPU的一个核进行处理。(可以表示成一维、二维、三维)
4.线程块(block)
1.由多个线程组成(可以表示为一维、二维、三维)
2.各block 是并行执行的,block间无法通信,也是没有执行顺序的。
3.线程块的数量限制为不超过65535(硬件限制)
5.线程格(grid)
有多个线程组成(可以表示为一维、二维、三维)
6.线程束
在CUDA架构中,线程束是指一个包含32个线程的集合。这个线程集合被“编制在一起”并且“步调一致”的形式执行,在程序中的每一行,线程束中的每个线程都将在不同数据上执行相同的命令。
7.核函数(Kernel)
1.在GPU上执行的函数通常称为核函数
2.一般通过标识符 global修饰,调用通过<<<参数1,参数2>>>,用于说明内核函数中的线程数量,以及线程是如何组织的。
3.以线程格(grid)的形式组织,每个线程格由若干个线程块(block )组成,而每个线程块又由若干个线程(thread)组成。
4.是以block 为单位执行的。
5.只能在主机段代码中调用
6.调用是必须声明内核函数的执行参数
7.在编程时,必须先为kernel 函数中用到的数组或变量分配好足够的空间,在调用kernel 函数,否则GPU 计算时会发生错误。

Caffe 框架介绍

在进行搭建之前,需要首先了解caffe,Caffe 实现什么。
Caffe 是现在深度神经网络领域的主流框架之一。它可以进行实现卷积神经网络的训练和应用。Caffe还兼容Python 和Matlab接口。在CPU 和 GPU 下都可以用来进行训练神经网络模型。其中可以使用Python 来查看深度神经网络模型的各层特征特征输出。
caffe 中有很多模型实例。
Caffe 框架中定义网络是由层构成的。每层包括输入和输出关系以及相关操作的参数。比如卷积核 大小,激活函数的种类等等。还有定义了网络训练的方法文件,包括学习率的设计、更新参数的方法,迭代次数,每批次输入图片的数目等等。

环境的搭建

硬件设施: GT720.没有集成显卡。如果是用集成显卡和独显双显卡的电脑则不能使用这种步骤进行配置。

Caffe 环境选择在Ubuntu14.04系统下进行搭建环境,理论上可以在CPU和GPU 下进行运行Caffe.但实际上是通过运行加速条件下进行搭建的Caffe。

配置Caffe,首先要明白英伟达的显卡才可以使用CUDA。
主要用的软件:
CUDA
cuDNN
OpenCV 等
** 打开Ubuntu 14.04 的系统终端(快捷键 Ctrl + Alt + T)。

安装需要的依赖包

输入一下命令:
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler –no- install-recommends libboost-all-dev python-dev git
若之后出现缺少依赖包的提示,则需要用 sudo apt-get install 安装相应依赖包即可。

安装CUDA

在英伟达官网
(https://developer.nvida.com/cuda-downloads)下载。这里如果没有翻墙的话,应该下载不了。
依次选择Linux–x86_64–Ubuntu–14.04–deb[local]–Download(1.9GB)
转到下载CUDA 的对应目录下,列如如果新建一个名为CUDA 文件夹来保存CUDA,使用命令:
cd ~/CDDA
根据官网安装指令进行输入命令:
sudo dpkg -i cuda-repo-ubuntu 1404-8-0-local_8.0-18_amd64.deb
sudo apt-get install cuda

下载cuDNN

在英伟达官网下下载,选择对应于CUDA8.0 的cuDNN 的版本,但是不要选取最新的,可能由于新版本不稳定而出现错误。
转到cuDNN 对应的目录下,进行压缩,安装包的操作。
tar -zx vf cudnn-7.5-linux-x64-v5.0-ga.tz
cd cuda
sudo cp lib64/lib*
/usr/local/cuda/include
sudo cp include/cudnn.h
/usr/local/cuda/includ/

更新软连接
cd /usr/local/cuda/lib64
sudo chmod +r libcudnn.so5.0.5
sudo ln -sf libcudnn.so.5.0.5
libcudnn.so.5
sudo ln -sf libcudnn.so.5 libcudnn.so
sudo ldconfig

添加环境变量
sudo gedit/vim /etc/profile —> (打开文件命令)
在打开的文件末尾加上
export PATH=/usr/local/cuda-
8.0/bin: PATHexportLDLIBRARYPATH=/usr/local/cuda8.0/lib64: LD_LIBRARY_PATH

保存后关闭文件执行下面的命令,使添加生效
source /etc/profile
编译CUDA samples
cd /usr/local/cuda/samples
sudo make all -j8
查看安装是否成功
cd bin/x86_64/linux/release
./deviceQuery
==========
检查cuda 是否配置好,在命令行中执行一下

安装OpenCV 2.4.10 (可以选择其他的版本)

使用github 上的脚本安装,这是比较简单的安装方法。具体方法如下:
git clone
https://github.com/jayrambhia/install-OpenCV
cd $HOME/install-OpenCV/Ubuntu/2.4
sudo ./opencv2_4_10.sh

配置安装 caffe 环境

新建文件夹 CAFFE_ROOT
cd $HOME/CAFFE_ROOT

git clone
https://github.com/bvlc/caffe.git
cd caffe
cd Makefile.config.example Makefile.config

*修改Makefile.config 的内容
将 #USE_CUDNN:=1 前面的# 去掉
添加 PYTHONPATH
export
PYTHONPATH= HOME/CAFFEROOT/caffe/python使PYTHONPATHecho PYTHONPATH
make py
make test -j8
make runtest -j8

踩坑之旅

开始之前,我们需要核对一下各关键软件的版本号,确保环境已知。
1.确定一下CUDA的版本
输入 nvcc -v

2.然后检查一下其他安装或者自带组件的版本
pkg-config –modversion opencv
g++ –version
cmake –version

这样会顺利显示g++版本,但是在检查cmake 版本的时候,会显示cmake 没有安装的信息,需要执行一下步骤:
sudo apt-get install cmake
安装完成后,在进行检查版本信息,就可以顺利显示出来

* 接下来进行配置caffe
sudo add-apt-repository universe
sudo apt-get update

  1. 安装依赖项
    sudo apt-get install libprotobuf-dev
    sudo apt-get install libleveldb-dev
    sudo apt-get install libsnappy-dev
    sudo apt-get install libhdf5-serial-dev
    sudo apt-get install protobuf-compiler
    sudo apt-get install –no-install-recommends
    sudo apt-get install libboost-all-dev
    2.安装Blas 的依赖项
    sudo apt-get install libatlas-base-dev
    3.安装Blas 的依赖项
    sudo apt-get install libgflags-dev
    sudo apt-get install libgoodle-glog-dev
    sudo apt-get install liblmdb-dev
    sudo apt-get install python
    sudo apt-get install python-dev
    sudo apt-get install python-numpy
    sudo apt-get install ipython
    sudo apt-get install ipython-notebook
    sudo apt-get install python-sklearn
    sudo apt-get install python-skimage
    sudo apt-get install python-protobuf

    4.安装git ,下载代码
    sudo apt-get install python-skimage
    sudo apt-get install python-protobuf
    sudo apt-get install git
    git
    clone https://github.com/BVLC/caffe.git

    5.编译caffe
    sudo cd caffe
    sudo cp Makefile.example.config Makefile.config (复制一份Makefile.config进行处理修改)

    当执行:
    sudo make all -j8
    便会出现一下错误:
    /include/caffe/util/hdf5.hpp:6.18:fatal
    error:hdf5.h:No such file or directory

    这个时候需要修改Makefile 文件**
    有几处修改的地方:
    1.打开Makefile.config 文档,把USE_CUDD :=1 (这一行之前的#号注释去掉,因为以后需要使用cuDNN)
    2.为了匹配cuda8.0的计算能力,需要把Makefile.config中的CUDA_ARCH 中的前两行去掉,

    3.在Makefile.config 文件中,添加 /use/include/hdf5/serial/到INCLUDE_DIRS,也就是把下面第一行代码改为 第二行代码
    INCLUDE_DIRS := $(pYTHON_INCLUDE)/usr/local/include (修改之前的)

    INCLUDE_DIRS := $(PYTHON_INCLUDE)/usr/local/include (修改之后的)
    /usr/include/hdf5/serial

    4.在Makefile 文件中,把hdf5_hl 和hdf5 修改为 hdf5_serial_hl 和 hdf5_serial;
    也就是将 第一行代码改为第二行代码:
    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 —->
    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

  2. 在编译一次,
    sudo make clean
    sudo make all -j8

Caffe 配置修改Makefile.config (细节) 文件 **

==================================================================

主要修改项:
1.无GPU (是否使用GPU)
2.使用OpenCV 3/或者其他的版本;
3.使用OpenBLAS; BLAS
4.使用Anaconda /python
===========================
USE_CUNN = 1

 cuDNN 是NVIDIA 专门针对深度学习Deep Learning 框架设计的一套GPU 计算加速器,用于实现高效性能的并行计算,在有GPU 安装CUDNN 的情况下,可以打开即将注释去掉。

USE_OPENCV := 1
因为要用到Opencv 库,所以要打开,下面的两个选择项表示,选择caffe 的数据管理第三方库,两这都不打开caffe 默认的是LMDB ,这是嵌入式数据库管理系统编程库。

% # ALLOW_LMDB_NOLOCK :=1

OPENCV_VERSION :=3 /其他

* 用 pkg-config –modversion opencv 命令查看 opencv 版本

CUDA_DIR := /usr

CUDA-ARCH := ……

这些参数需要根据GPU 的计算能力来进行配置,6.0 以下的版本不支持 x_50的计算能力。

BLAS := open
如果用的是ATLAS 计算可=库则赋值atlas ,MKL 计算库需要 mkl 进行赋值,OpenBlas 则赋值 open

BLAS_INCLUDE :=/usr/local/OpenBlas/include
BlAS_LIB :=/usr/local/OpenBlas/lib

“blae 库安装目录”

matlab 的安装目录 **

python 的安装目录 **

WITH_PYTHON_LAYER :=1 ** 使用python 接口

INCLUDE_DIRS :=
LIBRARY_DIRS :=

BUILD_DIR :=build
DISTRIBUTE_DIR :=distribute

TEST_GPUID :=0

=================================================================================

配置caffer(有关步骤)

各接口下的 caffe 框架
1.matlab 程序下的 caffe 框架
2.python 程序下的 caffe 框架

1.caffe-faster-rcnn
在其文件夹下需要配置编译 caffe 环境

需要修改 Makefile.config 文件中配置信息。

make clean (清除上次配置的caffe环境)

make all -j8
make test

make matcaffe

将 caffe-faster-rcnn/matlab/caffe 与 caffe-faster-rcnn/matlab/caffe、private 下的 +caffe 和 private/mex_64 放到 external/caffe/matlab/caffe_faster_rcnn/ 文件夹下。

修改models 下的 路径 // –> \ **

Faster_rcnn-master 目录信息:
bin
caffe-RPN_rcnn(caffe环境)
datasets (数据集 VOCdevkit2007 {VOC2007: Annoations ImageSets/Main JPEGImages}VOCcode(对数据集读取的相关的函数,有些函数你可以有根据的进行修改(数据的所方的路径)) )
experiments(实验数据 包含一些函数-程序())
external (与caffe 相关联的接口信息)
caffe
matlab
caffe_faster_rcnn
+caffe
mex_64
fetch_data
functions
fast_rcnn(参数的修改 )
nms( nvmex()编译)
rpn
(_config —> 修改有关参数 (batch_size ……))
imdb
cache (imdb.mat相关的数据-陈旭运行中生成数据)
相关的数据集获取函数、方法
models(添加预训练model)
output(运行后,输出的结果)
utils
.
.
.

2.py-faster-rcnn

caffe-fast-rcnn (caffe框架)
data(存放数据,以及读取文件cache)
experiments –> 存放配置文件,以及运行的log 文件
lib python 的接口
models -> 三种预训练模型 ZF(S)/VGG1024(M)/VGG16(L)

准备工作:
1.配置caffe
2.其他的注意事项
3. 进入py-faster-rcnn/lib 下进行 make
4. 进入py-faster-rcnn/caffe-fast-rcnn
cp Makefile.config.example Makefile.config
make all -j4
make pycaffe
出现问题,解决方法:
进入 py-faster_rcnn/ddta/scripts 目录
执行 ./fech-faster_rcnn_models.sh
5.准备数据集
voc2007
ImageNet
6.测试faster_rcnn
./tools/demo.py

训练步骤:
1.数据集下载
2.预训练模型参数
3.修改训练配置文件

搭建caffe
安装第三方依赖包:
cython .Python-OpenCV easydict
pip install cython
pip install easydict
apt-get install python-opencv

=======================
Caffe 有 Matlab 的接口,因此使用Matlab 调用caffe ,进行编程。

为什么选择OpenCV
caffe 是用来进行深度学习的,深度学习的一大应用对象即使图像和视频。

caffe 提供了python 接口

caffe 源代码不能直接拿过来进行编译:
* 最起码需要修改一下文件Makefile.config。
* 如果是openCV 的版本是3.0的话,需要修改其他选项(**

安装caffe:

#### 编译Nakefile.config 文件
取消第五行的注释,即将 # USE_CUDNN = 1 ;
BLAS = mkl 。进行修改
启用CUDNN ,加注释:CPU_ONLY:=1 改进 CPU_ONLY:=1

编译Makefile 文件

如果 openCV版本是2.4x,次不必修改
如果是openCV 版本3.0 ,还需要Makefile 文件,实现OpenCV 3.x 支持。
LIBRARIES += opencv_core opencv_highgui opencv_imgpro opencv_imgcodecs

编译 caffe-master_rcnn

make clean (清除所有文件caffe)
make all -j
make test -j

make runtest -j

make matcaffe && make pycaffe

运行过程中遇到的问题:

  1. 出现error == cudaSuccess (2 v s.0) out of memory
    内存溢出,说明数据集过大
  2. File already exists in database :caffe.proto
    自己在构造数据集时,需要对应各类参数 === Annoations ImageSets/Main JPEGImages
  3. Error using proposal prepal image image > roid >scale rois

    针对数据的修改, vocinit.m
    fast_rcnn_train.m val_iters 不能大于 val 的数据量
    因为自己制作的数集,比较小,因此在这个过程中需要对相应的参数进行处理操作。

  4. Undefined function ‘nms_gpu_mex’ for input arguments of type ‘single’

    == 该问题的关键是,不存在nms_gpu_mex()函数,原因是nms_gpu_mex() 出错。

    解决方法:需要使用nvmex(参数1,参数2)函数进行编译。参数1是nms_gpu_mex.cu (cuna文件),参数2是输出nms_gpu_mex 所在路径(nms文件夹下的当前路径)。

  5. 问题四中出现的问题,都可以使用 编译faster_rcnn_build.m 文件,产生bin 文件解决

  6. 最后运行结束后:
    出现Please modify detection_test.prototxt file for sharing conv layers with proposal model (delete layers until relu5_3)

    训练结束后进行运行 测试代码:
    script_faster_rcnn_demo.m 中将其中的相关的路径改成自己生成本地已有的数据,并且根据测试的结果可以修改 thres 值

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值