zoukankan      html  css  js  c++  java
  • caffe学习一:ubuntu16.04下跑Faster R-CNN demo (基于caffe). (亲测有效,记录经历两天的吐血经历)

    兜兜转转,兜兜转转;

    一次有一次,这次终于把Faster R-CNN 跑通了。

    重要提示1:在开始跑Faster R-CNN之前一定要搞清楚用的是Python2 还是Python3. 不然你会无限次陷入一下错误:

    from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver,
    ImportError: dynamic module does not define module export function (PyInit__caffe)
     

    错误原因:当出现这个错误的时候,你应该知道错误原因极有可能是Python版本问题

    首先,ubuntu是自带两个版本的Python, 通常做深度学习的人会装anaconda.这样算下来你的计算机就有三个版本的python了:

    python2.7, python3.5, conda版本的python (具体版本可以终端查看。)

    好了,现在你知道你电脑有若干个版本的python. 那么跑Faster R-CNN应该用哪个版本呢?

    (个人建议用官方自带的python2.7。 在github上下载的也是2.x版本的程序。以下教程也是2.7版本的。)

    重要提示2:如果你用Python2.x跑Faster R-CNN,并且你装了anaconda。那么你首先要做的就是把anaconda的环境变量路径给注释掉。

    步骤如下:(1)终端输入:gedit ~/.bashrc

                     (2)然后将anaconda的路径注释掉(如下图,在export前面加一个#.然后右上角保存并关闭退出。):

                       

                    (3)最后输入source ~/.bashrc使bashrc文件的修改生效

                      

    重要提示3:查看下你电脑默认的是python2还是python3.

    在终端输入python:

     

     如图所示,我的已经切换至python2.x。 如果你的是Python3.x,直接执行以下命令即可:

    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100

    sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

    (借图)

    直接命令:python,默认为python3,如下

    如果要切换到Python2,执行:sudo update-alternatives --config python

    然后输入对应的数字即可。

    再一次输入python

    这就成功i切换到Python2.x啦。当然了,你一开始的就是Python2.x。 就不用走以上步骤。

    下面开始愉快的跑Faster R-CNN. 皮皮虾,跟我走!!

    一,下载文件

    下载faster R-CNN,在终端下执行命令:git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

    二,编译caffe

    1、进入py-faster-rcnn文件夹下的lib文件夹内

    (1). cd py-faster-rcnn/lib

    (2). make

    2、进入py-faster-rcnn文件夹下的caffe-fast-rcnn下,把Makefile.config.example拷贝一份重命名为Makefile.config文件,命令如下:
    (1). cp Makefile.config.example Makefile.config
    (2). 修改Makefile.config下的相关参数: sudo gedit Makefile.config

    根据个人情况修改文件:
    a.若使用cudnn,则将
    #USE_CUDNN := 1
    修改成:
    USE_CUDNN := 1

    b.若使用的opencv版本是3的,则 将
    #OPENCV_VERSION := 3
    修改为:
    OPENCV_VERSION := 3

    c.若要使用python来编写layer,则 将
    #WITH_PYTHON_LAYER := 1
    修改为
    WITH_PYTHON_LAYER := 1

    d.重要的一项 : 将 # Whatever else you find you need goes here. 下面的

    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
    修改为:

    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
    这是因为Ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径.

    (4)修改makefile文件 打开makefile文件,做如下修改:
    将:
    NVCCFLAGS +=-ccbin=$(CXX)-Xcompiler-fPIC $(COMMON_FLAGS)
    替换为:
    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

    (5)编辑/usr/local/cuda/include/host_config.h

    将其中的第115行注释掉: 将

    # error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
    改为
    //#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

    3. 配置完成后,下面进行编译。直接编译会出现编译错误,这是因为faster-rcnn默认的caffe支持的cudnn版本是V4,而想用1080Ti显卡,必须使用cuda7.5+cudnn5.0以上版本,因此编译caffe会出现版本不兼容而导致的函数参数不对应的错误。

    解决办法,下载最新的caffe:https://github.com/BVLC/caffe

    (1)、将caffe/include/caffe/util/cudnn.hpp拷贝到py-fast-rcnn/caffe-fast-rcnn/include/caffe/util/

    (2)、将caffe/include/caffe/layers里所有以cudnn开头的文件都拷贝至py-fast-rcnn/caffe-fast-rcnn/include/caffe/layers,全部替换掉

    (3).将caffe/src/caffe/layers里所有以cudnn开头的文件都拷贝至py-fast-rcnn/caffe-fast-rcnn/src/caffe/layers,全部替换掉

    改好后先 make clean

    再重新执行 make

    不再报错

    再执行

    make pycaffe

    三. 下载预训练模型:

    1  ./data/scripts/fetch_faster_rcnn_models.sh

    2  ./data/scripts/fetch_imagenet_models.sh

    下载完成后data目录会有对应的模型文件存在

    四. 运行demo.py

    1. cd py-faster-rcnn/tools

    2. ./demo.py                            # 该命令默认的是VGG16的模型

    或者执行

    ./demo.py --net zf     #执行此命令可以运行zf模型

    效果如下图:

    贴一个很有用的帖子:https://blog.csdn.net/flygeda/article/details/78638824

  • 相关阅读:
    2020年全国安全生产月活动主题、挂图、招贴、标语、宣教用书等系列产品
    2020年安全生产月主题挂图指定宣教用品目录
    LNMP分离式部署步骤详解
    FTP文件传输服务
    DNS域名解析服务配置与测试
    DHCP服务搭建测试流程
    mysql数据库的操作
    mysql源码编译安装及其配置
    生产环境中ansible的安全处理
    http网页返回码详解
  • 原文地址:https://www.cnblogs.com/elitphil/p/11527732.html
Copyright © 2011-2022 走看看