兜兜转转,兜兜转转;

一次有一次,这次终于把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

caffe学习一:ubuntu16.04下跑Faster R-CNN demo (基于caffe). (亲测有效,记录经历两天的吐血经历)的更多相关文章

  1. Ubuntu16.04 下如何安装和卸载Google Chrome【亲测有效】

    一.安装 1.将下载源添加到系统源中. sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.li ...

  2. 【深度学习】ubuntu16.04下安装opencv3.4.0

    1.首先安装一些编译工具 # 安装编译工具 sudo apt-get install build-essential # 安装依赖包 sudo apt-get install cmake git li ...

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

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

  4. Ubuntu16.04下caffe CPU版的详细安装步骤

    一.caffe简介 Caffe,是一个兼具表达性.速度和思维模块化的深度学习框架. 由伯克利人工智能研究小组和伯克利视觉和学习中心开发. 虽然其内核是用C++编写的,但Caffe有Python和Mat ...

  5. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  6. ubuntu16.04下安装artoolkit5

    目前对AR技术的常见理解就是CV(Computer Vision)+CG(Computer Graphic).CV的方法很多,简单些比如FREAK+ICP(ARToolKit中的NFT),复杂些就是S ...

  7. Faster-RCNN-TensorFlow-Python3.5 在Ubuntu16.04下的配置方法

    目录 Faster-RCNN-TensorFlow-Python3.5 在Ubuntu16.04下的配置方法 安装过程 1. 深度学习环境Tensorflow的安装 2. 安装python包 3.   ...

  8. Ubuntu16.04下安装多版本cuda和cudnn

    Ubuntu16.04下安装多版本cuda和cudnn 原文 https://blog.csdn.net/tunhuzhuang1836/article/details/79545625 前言 因为之 ...

  9. caffe学习(1):多平台下安装配置caffe

    如何在 centos 7.3 上安装 caffe 深度学习工具   有好多朋友在安装 caffe 时遇到不少问题.(看文章的朋友希望关心一下我的创业项目趣智思成) 今天测试并整理一下安装过程.我是在阿 ...

随机推荐

  1. Angular生命周期理解

    Angular每个组件,包含根组件和每一级的子组件,都存在一个生命周期,从创建,变更到销毁.Angular提供组件生命周期钩子,把这些关键时刻暴露出来,赋予在这些关键结点和组件进行交互的能力. 在An ...

  2. 重学计算机网络(二) - 曾记否,查IP地址

    先献上几个梗 1.1.1.1 不是测试用的,原来一直没分配,现在被用来做一个DNS了,宣传是比谷歌等公司的dns服务 更保护用户隐私. IP地址255.255.255.255,代表有限广播,它的目标是 ...

  3. 试试 python-dotenv,避免敏感信息被硬编码到代码中

    我们开发的每个系统都离不开配置信息,例如数据库密码.Redis密码.邮件配置.各种第三方配置信息,这些信息都非常敏感,一旦泄露出去后果非常严重,被泄露的原因一般是程序员将配置信息和代码混在一起导致的. ...

  4. 10G的变态SQL文件,如何快速打开编辑?

    工作中,偶尔需要编辑一些大文件,比如 log 文件,后者一些变态的 SQL,此时用平常的编辑器就会显得力不从心,要么直接打不开,要么打开后卡得要死. 本文就给大家推荐几款可以操作大文件的编辑器,准备好 ...

  5. 基于HttpClient4.5.1实现Http访问工具类

    本工具类基于httpclient4.5.1实现 <dependency> <groupId>org.apache.httpcomponents</groupId> ...

  6. 随笔编号-02 阿里云CentOS7系列三 -- 配置防火墙

    前面讲到了安装JDK以及Tomcat.但是大家会发现,当我们访问 http:// XXX.XXX.XXX.XXX:8080/80 时候,tomcat 猫并没有出现.原因就是没有设置防火墙. 再次介绍下 ...

  7. 使用react定义组件的两种方式

    react组件的两种方式:函数定义,类定义 在定义一个组件之前,首先要明白一点:react元素(jsx)是react组件的最基本的组成单位 组件要求: 1,为了和react元素进行区分,组件名字首必须 ...

  8. python 28 网络协议

    目录 网络协议 1. C/S.B/S 架构 1.1 C/S 架构: 1.2 B/S 架构: 2. 网络通信原理 3. OSI七层协议(TCP/IP五层): 3.1 物理层: 3.2 数据链路层: 3. ...

  9. 自制微信小程序 提示插件 -- noticeUitis.js

    /* noticeMsg.js by: FEer_llx Modify 2016/08/24 */ function weNotice(obj) { this.fadeFlag = true; thi ...

  10. 解决ionic 中 $ionicHistory.goBack()无法返回

    这种解决方法目前只适合用了 <ion-side-menus>这一组件的<ion-view> 解决方法: 在<ion-view>下一级中包一个div,如下图: 搞了几 ...