使用libcaffe为工程添加深度学习功能

Ubuntu

相比windows, ubuntu下配置会简单很多.

首先对caffe源码做编译, copy build里的库文件: _caffe.so, libcaffe.so, libcaffe.so.1.0.0-rc5, libproto.a到一个专门的目录(如CAFFE_LIB/lib), 需要注意的是, libcaffe.so有链接属性, cp -d 做copy, 否则会丢掉该属性.

然后需要copy 源代码里的 include 到 CAFFE_LIB/include, 同时 copy build 里的include/caffe/proto 到CAFFE_LIB/include/caffe/proto.

新建QT工程, .pro文件的库引用和头文件引用(参考这里)

#-------------------------------------------------
#
# Project created by QtCreator 2017-02-22T17:10:47
#
#-------------------------------------------------

QT       += core

QT       -= gui

TARGET = mnist
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp \
    classify.cpp

# add dynamic links of CAFFE and its dependencies

# caffe
INCLUDEPATH +=  /home/yayo/CAFFE/CAFFE_LIB/include
LIBS += -L/home/yayo/CAFFE/CAFFE_LIB
LIBS += -lcaffe

# opencv
INCLUDEPATH +=  /usr/include
LIBS += -L/usr/lib/x86_64-linux-gnu
LIBS += -lopencv_core -lopencv_imgproc -lopencv_highgui

# cuda
INCLUDEPATH +=  /usr/local/cuda/include
LIBS += -L/usr/local/cuda/lib64
LIBS += -lcudart -l cublas -lcurand

# others
LIBS += -lglog -lgflags -lprotobuf -lboost_system -lboost_thread -llmdb -lleveldb -lstdc++ -lcblas -latlas

HEADERS += \
    classify.h

Windows

很多时候需要在自己的解决方案里添加caffe的功能,基本思路是在工程(x64)里添加编译好的libcaffe.lib(使用windows版本)。
以下是配置方法


1)首先将原始caffe工程里 Build/x64/Debug 和 Build/x64/Release 的所有 DLL 和编译好的 libcaffe.lib 复制到独立的目录(如 CAFFE_LIB/dlls/Debug 和 CAFFE_LIB/dlls/Release)方便后期引用(注意,Debug和Release的libcaffe.lib是不同的,需要区分)

2)为工程添加 INCLUDE
将caffe原工程的include目录复制到 CAFFE_LIB/include

// Debug & Rlease
F:\Projects\CAFFE\CAFFE_LIB\include
F:\Projects\CAFFE\NugetPackages\boost.1.59.0.0\lib\native\include
F:\Projects\CAFFE\NugetPackages\glog.0.3.3.0\build\native\include
F:\Projects\CAFFE\NugetPackages\gflags.2.1.2.1\build\native\include
F:\Projects\CAFFE\NugetPackages\protobuf-v120.2.6.1\build\native\include
F:\Projects\CAFFE\NugetPackages\OpenBLAS.0.2.14.1\lib\native\include
F:\Projects\CAFFE\NugetPackages\OpenCV.2.4.10\build\native\include
E:\CUDA\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include
E:\CUDA\cuda\include

3)为工程添加 LIB

// Debug
F:\Projects\CAFFE\NugetPackages\lmdb-v120-clean.0.9.14.0\lib\native\lib\x64  
F:\Projects\CAFFE\NugetPackages\LevelDB-vc120.1.2.0.0\build\native\lib\x64\v120\Debug 
F:\Projects\CAFFE\NugetPackages\OpenCV.2.4.10\build\native\lib\x64\v120\Debug                        
F:\Projects\CAFFE\NugetPackages\boost_date_time-vc120.1.59.0.0\lib\native\address-model-64\lib 
F:\Projects\CAFFE\NugetPackages\boost_filesystem-vc120.1.59.0.0\lib\native\address-model-64\lib 
F:\Projects\CAFFE\NugetPackages\boost_system-vc120.1.59.0.0\lib\native\address-model-64\lib      
F:\Projects\CAFFE\NugetPackages\glog.0.3.3.0\build\native\lib\x64\v120\Debug\dynamic              
F:\Projects\CAFFE\NugetPackages\boost_thread-vc120.1.59.0.0\lib\native\address-model-64\lib     
F:\Projects\CAFFE\NugetPackages\boost_chrono-vc120.1.59.0.0\lib\native\address-model-64\lib     
F:\Projects\CAFFE\NugetPackages\boost_python2.7-vc120.1.59.0.0\lib\native\address-model-64\lib 
F:\Projects\CAFFE\NugetPackages\gflags.2.1.2.1\build\native\x64\v120\static\Lib   
F:\Projects\CAFFE\NugetPackages\hdf5-v120-complete.1.8.15.2\lib\native\lib\x64  
F:\Projects\CAFFE\NugetPackages\protobuf-v120.2.6.1\build\native\lib\x64\v120\Debug 
F:\Projects\CAFFE\NugetPackages\OpenBLAS.0.2.14.1\lib\native\lib\x64 
E:\CUDA\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64  
F:\Projects\CAFFE\CAFFE_LIB\dlls\Debug  
E:\CUDA\cuda\lib\x64  
\$(PythonDir)\libs

// Release
F:\Projects\CAFFE\NugetPackages\lmdb-v120-clean.0.9.14.0\lib\native\lib\x64
F:\Projects\CAFFE\NugetPackages\LevelDB-vc120.1.2.0.0\build\native\lib\x64\v120\Release
F:\Projects\CAFFE\NugetPackages\OpenCV.2.4.10\build\native\lib\x64\v120\Release
F:\Projects\CAFFE\NugetPackages\boost_date_time-vc120.1.59.0.0\lib\native\address-model-64\lib
F:\Projects\CAFFE\NugetPackages\boost_filesystem-vc120.1.59.0.0\lib\native\address-model-64\lib
F:\Projects\CAFFE\NugetPackages\boost_system-vc120.1.59.0.0\lib\native\address-model-64\lib
F:\Projects\CAFFE\NugetPackages\boost_thread-vc120.1.59.0.0\lib\native\address-model-64\lib
F:\Projects\CAFFE\NugetPackages\boost_chrono-vc120.1.59.0.0\lib\native\address-model-64\lib
F:\Projects\CAFFE\NugetPackages\boost_python2.7-vc120.1.59.0.0\lib\native\address-model-64\lib
F:\Projects\CAFFE\NugetPackages\glog.0.3.3.0\build\native\lib\x64\v120\Release\dynamic
F:\Projects\CAFFE\NugetPackages\gflags.2.1.2.1\build\native\x64\v120\static\Lib
F:\Projects\CAFFE\NugetPackages\hdf5-v120-complete.1.8.15.2\lib\native\lib\x64
F:\Projects\CAFFE\NugetPackages\protobuf-v120.2.6.1\build\native\lib\x64\v120\Release
F:\Projects\CAFFE\NugetPackages\OpenBLAS.0.2.14.1\lib\native\lib\x64
E:\CUDA\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64
F:\Projects\CAFFE\CAFFE_LIB\dlls\Release
E:\CUDA\cuda\lib\x64
\$(PythonDir)\libs  

3)添加库依赖

// Debug
libglog.lib 
libcaffe.lib         
gflagsd.lib   
gflags_nothreadsd.lib 
hdf5.lib         
hdf5_hl.lib     
libprotobuf.lib     
libopenblas.dll.a  
cublas.lib 
cuda.lib   
curand.lib 
cudart.lib 
cudnn.lib 
Shlwapi.lib
LevelDb.lib 
lmdbD.lib 
opencv_core2410d.lib       
opencv_highgui2410d.lib    
opencv_imgproc2410d.lib   
opencv_video2410d.lib      
opencv_objdetect2410d.lib

// Release
libglog.lib
libcaffe.lib
gflags.lib
gflags_nothreads.lib
hdf5.lib
hdf5_hl.lib
libprotobuf.lib
libopenblas.dll.a
cublas.lib
cuda.lib
curand.lib
cudart.lib
cudnn.lib
Shlwapi.lib
LevelDb.lib
lmdb.lib
opencv_core2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
opencv_video2410.lib
opencv_objdetect2410.lib

4)宏定义

_SCL_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS
USE_OPENCV
USE_LEVELDB
USE_LMDB
USE_CUDNN

5)添加DLL依赖
配置属性 -> 调试 -> 环境
path=F:\Projects\CAFFE\CAFFE_LIB\dlls\Debug;


理论上通过上面的配置,就可以在工程里调用caffe了(比如把classification.cpp内容添加进来就可以实现分类)
但此时运行还会报错 “Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Input (known types: Input )”
参考这里,需要再对caffe的layer做一个声明。于是添加一个头文件:

#ifndef LAYER_H_
#define LAYER_H_

#include "caffe/common.hpp"
#include "caffe/layers/input_layer.hpp"
#include "caffe/layers/inner_product_layer.hpp"

namespace caffe
{
    extern INSTANTIATE_CLASS(InputLayer);
    extern INSTANTIATE_CLASS(InnerProductLayer);
}

#endif

我这里只出现这两个层的错误,对于其他应用,可能需要添加其他层


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值