由于深度学习的种种优势,使我们对于深度学习的使用越来越频繁。很多时候,我们都需要在自己的项目中配置caffe环境,来调用caffe网络模型完成自己的任务。今天我主要讲的关于"在自己的项目中配置caffe环境所遇到问题的相关说明和解答",因为项目的需要,需要在项目中配置caffe来完成VGG网络的分类任务。大概花费了一周的时间,总算成功了。期间,也是辗转反侧,遇到了诸多问题,查阅了诸多资料,但是有些问题并没有讲的非常清楚。这里,我就这些遇到的问题,根据自己的情况以及解决的办法跟大家分享一下。

  首先,需要准备好安装环境:

(1)已编译好的caffe  https://github.com/Microsoft/caffe,必须是已经编译好的caffe工程,因为我们需要用到caffe第三方库,以及编译生成的libcaffe.lib

(2)vs2013  因为caffe需要vs2013的编译器,所以最好是vs2013

(3)GPU环境的还要安装CUDA,Cudnn。可以去官网根据自己的电脑配置下载安装

(4)如果需要做UI的话,也可以在vs中配置相关界面工具,比如QT

  然后,环境已经准备好了,接下来就是新建vs工程了,这里可以根据自己的情况新建自己的项目,比如win32控制台程序等。由于,我选择用QT来做c++应用的界面,所有我新建的是QT GUI Application。

  工程新建完成后,接下来就是各种include,lib,dll的配置问题了。我这里要说的是vs2013,x64,Debug,GPU模式。如果你是Release模式,那么就将下面所有的Debug改为Release即可。具体地,打开属性->VC++目录

  需要说明的是,这里面你需要根据你的caffe环境和CUDA的安装路径,进行更改,否则会报错找不到文件等等

  接下来是链接器->输入

//debug
opencv_calib3d2410d.lib
opencv_contrib2410d.lib
opencv_core2410d.lib
opencv_features2d2410d.lib
opencv_flann2410d.lib
opencv_gpu2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_legacy2410d.lib
opencv_ml2410d.lib
opencv_objdetect2410d.lib
opencv_ts2410d.lib
opencv_video2410d.lib
caffe.lib
libcaffe.lib
cudart.lib
cublas.lib
curand.lib
gflagsd.lib
libglog.lib
libopenblas.dll.a
libprotobuf.lib
leveldb.lib
hdf5.lib
hdf5_hl.lib
Shlwapi.lib

  最后,由于要用到caffe模型,那么必然会出现注册层的问题,这里我们新建一个head.h的头文件,然后在代码中引用该头文件即可。有人说,不这样不行么,建议大家最好这样,因为不这样一般会报出"未知的层"等相关错误。比如:

  head.h的内容为(注意,这里面的层必须至少要包含你用到的网络的相关层,否则会出错):

#include<caffe/common.hpp>
#include "caffe/caffe.hpp"
#include<caffe/proto/caffe.pb.h>
#include<caffe/layers/batch_norm_layer.hpp>
#include<caffe/layers/bias_layer.hpp>
#include <caffe/layers/concat_layer.hpp>
#include <caffe/layers/conv_layer.hpp>
#include <caffe/layers/dropout_layer.hpp>
#include<caffe/layers/input_layer.hpp>
#include <caffe/layers/inner_product_layer.hpp>
#include "caffe/layers/lrn_layer.hpp"
#include <caffe/layers/pooling_layer.hpp>
#include <caffe/layers/relu_layer.hpp>
#include "caffe/layers/softmax_layer.hpp"
#include<caffe/layers/scale_layer.hpp>
namespace caffe
{
extern INSTANTIATE_CLASS(BatchNormLayer);
extern INSTANTIATE_CLASS(BiasLayer);
extern INSTANTIATE_CLASS(InputLayer);
REGISTER_LAYER_CLASS(Input);
extern INSTANTIATE_CLASS(InnerProductLayer);
extern INSTANTIATE_CLASS(DropoutLayer);
extern INSTANTIATE_CLASS(ConvolutionLayer);
REGISTER_LAYER_CLASS(Convolution);
extern INSTANTIATE_CLASS(ReLULayer);
REGISTER_LAYER_CLASS(ReLU);
extern INSTANTIATE_CLASS(PoolingLayer);
REGISTER_LAYER_CLASS(Pooling);
extern INSTANTIATE_CLASS(LRNLayer);
REGISTER_LAYER_CLASS(LRN);
extern INSTANTIATE_CLASS(SoftmaxLayer);
REGISTER_LAYER_CLASS(Softmax);
extern INSTANTIATE_CLASS(ScaleLayer);
extern INSTANTIATE_CLASS(ConcatLayer); }

  这样,完成后就可以对工程进行第一次编译,在编译时,可能会出现如下主要问题:

1 出现某一层重复注册的问题:

这时,你就要根据错误提示,找到是哪个层重复注册了,就将相应的REGISTER_LAYER_CLASS(Convolution);双斜杠掉即可,最后类似于这样:

#include<caffe/common.hpp>
#include "caffe/caffe.hpp"
#include<caffe/proto/caffe.pb.h>
#include<caffe/layers/batch_norm_layer.hpp>
#include<caffe/layers/bias_layer.hpp>
#include <caffe/layers/concat_layer.hpp>
#include <caffe/layers/conv_layer.hpp>
#include <caffe/layers/dropout_layer.hpp>
#include<caffe/layers/input_layer.hpp>
#include <caffe/layers/inner_product_layer.hpp>
#include "caffe/layers/lrn_layer.hpp"
#include <caffe/layers/pooling_layer.hpp>
#include <caffe/layers/relu_layer.hpp>
#include "caffe/layers/softmax_layer.hpp"
#include<caffe/layers/scale_layer.hpp>
namespace caffe
{
extern INSTANTIATE_CLASS(BatchNormLayer);
extern INSTANTIATE_CLASS(BiasLayer);
extern INSTANTIATE_CLASS(InputLayer);
//REGISTER_LAYER_CLASS(Input);
extern INSTANTIATE_CLASS(InnerProductLayer);
extern INSTANTIATE_CLASS(DropoutLayer);
extern INSTANTIATE_CLASS(ConvolutionLayer);
//REGISTER_LAYER_CLASS(Convolution);
extern INSTANTIATE_CLASS(ReLULayer);
//REGISTER_LAYER_CLASS(ReLU);
extern INSTANTIATE_CLASS(PoolingLayer);
//REGISTER_LAYER_CLASS(Pooling);
extern INSTANTIATE_CLASS(LRNLayer);
//REGISTER_LAYER_CLASS(LRN);
extern INSTANTIATE_CLASS(SoftmaxLayer);
//REGISTER_LAYER_CLASS(Softmax);
extern INSTANTIATE_CLASS(ScaleLayer);
extern INSTANTIATE_CLASS(ConcatLayer); }

2 如果出现相关dll文件找不到的系统错误情况:


两种办法:(1)在D:\Resource\caffe\caffe-windows\Build\x64\Debug(如果你是Release就在Release文件中)文件下,找到对应的dll文件,将其拷贝到项目生成的Debug文件夹下面即可,比如:

(2)在项目文件下新建一个dll文件夹,将D:\Resource\caffe\caffe-windows\Build\x64\Debug文件下所有的dll文件拷贝进dll文件夹中,并在属性->配置属性->调试->环境中添加:path=E:\qt\ImageRetrival\dll;再编译即可。

   总结:上面的两个是在新建项目中配置caffe出现最多的问题,当然也会有其他的问题,这时就需要你根据具体的问题,查阅相关文档或者自己调试,找出问题,对症下药了。可能这需要花费很多时间,但是不要轻言放弃,相信最后都会解决的。我前后花费了一周多的时间,也是每天不想再调了,但是咬咬牙还是坚持着去解决问题。最后,祝大家都能顺利配置成功,如果有什么问题可以在下面给我留言,我一定依照我的经验给大家一一解答,希望能帮到大家,少走一些弯路。

  另外:有过有人对于如何在自己的工程里面如何通过caffe加载你要用的网络模型的话,我给大家提供一个链接,该链接对于如何通过caffe调用网络模型提取特征,以代码的形式给予了详细解答:http://blog.csdn.net/mr_curry/article/details/52456548,后续我会补上关于通过caffe调用网络模型提取Mat类型特征的相关预处理及后处理操作详细代码,比如设置与网络模型要求相同的图像大小,通道类型,加载并减去均值等预处理,以及后续的对高维度的特征进行归一化,最后保存到容器中后处理。欢迎大家一起交流探讨!

自己的Qt GUI 项目+vs2013+opencv+caffe环境配置的更多相关文章

  1. Windows下的Anaconda+OpenCV的环境配置

    Windows下的Anaconda+OpenCV的环境配置

  2. win7下qt+opencv的环境配置

    博客http://blog.csdn.net/qiurisuixiang/article/details/8665278已经完整地介绍了整个环境配置.需要一步不差按原执行.需要说明的是,几个path的 ...

  3. 学习Opencv 2.4.9 (一)---Opencv + vs2012环境配置

    作者:咕唧咕唧liukun321 来自:http://blog.csdn.net/liukun321 首先获得最新的Opencv 2.4.9源代码:opencv源代码下载 一.Opencv环境变量配置 ...

  4. Opencv + vs2012环境配置

    首先获得最新的Opencv 2.4.10源码:opencv源码下载 一.Opencv环境变量配置 1.将源码安装到制定目录: 2.为Opencv 添加环境变量:计算机-->属性 点击高级系统设置 ...

  5. python Web项目上线之服务器环境配置

    1.下载安装Xftp 安装成功后,登录服务器用户密码,登录成功后 使用Xftp 将下载好的python解释器linux压缩包放置在服务器根目录下(这里用的是python3.7) 2. 解压压缩包,安装 ...

  6. win7(X64)+VS2013+OpenCV3.1环境配置

    &1 源文件 VS2013: 链接:http://pan.baidu.com/s/1o8EKQq2 密码:open OpenCV3.1:  链接:http://pan.baidu.com/s/ ...

  7. Windows下OpenCV的环境配置

    首先去官网下载所需版本的OpenCV(我这里下载的是OpenCV2.4.9),然后安装(也就是解压缩)到某个地方(个人推荐解压到硬盘的根目录).解压完成后,可以得到如下的目录结构(版本不同,可能会有一 ...

  8. python调用caffe环境配置

    背景是这样的,项目需要,必须将训练的模型通过C++进行调用,所以必须使用caffe或者mxnet,而caffe是用C++实现,所以有时候简单的加载一张图片然后再进行预测十分不方便 用caffe写pro ...

  9. Visual Studio OpenCV 开发环境配置

    因为VS配置OpenCV好多新手都很难一次配置成功,而且OpenCV库每新建一个项目都要配置很是麻烦,所以今天就给大家介绍一个“一劳永逸”的方法. 注:理论上只要VS和OpenCV是版本兼容的,该方法 ...

随机推荐

  1. Win10权限问题

    通过组策略打开Administrator用户后,Edge.图片查看器等内置程序不能使用,提示“无法使用内置管理员账户打开” 网上的方法: 1.组策略:本地安全策略编辑器——安全设置——本地策略——安全 ...

  2. 51nod 1640 天气晴朗的魔法

    题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 这样阴沉的天气持续下去,我们不免担心起他的健康.   51nod魔法学校近日开展了主题为“天气晴朗 ...

  3. 恢复为TrustedInstaller权限

    每次我们要改动系统文件/文件夹时,都会被提示权限不够,而这个文件的所有者就是TrustInstaller.所以,就出现各种各样的教程,甚至傻瓜式的一键操作,让大家把自己设为文件的所有者,让自己得到最高 ...

  4. Array - Container With Most Water

    /** * 此为暴力解法 * Find two lines, which together with x-axis forms a container, such that the container ...

  5. 2018.4.1 Ubuntu16.04 下配置Tomcat服务器以及设置dingshi启动

    Tomcat自启动的设置技巧 以root用户登录系统: cd /etc/rc.d/init.d/ vi tomcat #!/bin/sh # # tomcat: Start/Stop/Restart ...

  6. python_86_shutil模块

    #高级的文件.文件夹.压缩包.处理模块 import shutil f1=open('sys模块.py','r',encoding='utf-8') f2=open('copy1.py','w',en ...

  7. 用简单的语言描述C++ 是什么?

    用简单的语言描述C++ 是什么? 答:C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛.C++支持多种编程范式 --面向对象编程.泛型编程和过程化编程. 其编程领域众广,常用于系统开发,引 ...

  8. java基础—面向对象2

    一.JAVA类的定义

  9. Linux学习日记:第二天

    今天学习vi编辑命令: root@ubuntu:vi hello.java 使用到的命令: 插入命令: a 和 i:在当前光标前或后插入文本(A 和 I 分别在当前行行末或行首插入文本):  o 和  ...

  10. Maven各种常用架包配置文件,保存一份

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...