注意:该版本为CPU版本。
用到的caffe-windows来自:https://github.com/happynear/caffe-windows
先下载caffe-windows,解压;然后下载第三方库:https://pan.baidu.com/s/1eStyfrc 解压到caffe-windows-master,看起来是这样:caffe-windows-master\3rdparty
把3rdparty的bin加入环境变量或者复制里面的dll到build_cpu_only\caffelib下(cudnn的不需要)。
打开caffe-windows-master\src\caffe\proto,双击extract_proto.bat,然后用VS2013打开./build_cpu_only/MainBuilder.sln。请确保为Release x64
1.右键caffelib项目,重命名为:multi_recognition_cpu(按个人爱好,其他名字也行,不改也可以);再右键该项目——>属性——>配置属性——>常规:
配置类型修改为动态库(.dll),目标扩展名修改为.dll。
2.C/C++——>常规:
附加包含目录:
../../3rdparty/include
../../src
../../include
C/C++——>预处理器:
添加 MULTI_RECOGNITION_API_EXPORTS
3.链接器——>常规:
附加库目录:
../../3rdparty/lib
链接器——>输入:
去掉cuda和cudnn的lib(cu开头和cudnn开头的lib)
4.修改net.hpp和net.cpp
为了支持模型多输出,要知道输出的顺序,所以把输出blob的名字输出到控制台,打开net.hpp,给Net类添加:
protected:
std::vector<std::string> outputblobnames;
以及:
public:
inline std::vector<std::string> output_blobs_names() const
{
return outputblobnames;
}
net.cpp修改:(最后一行,把输出blob名字保存到vector中)
for (set<string>::iterator it = available_blobs.begin();
it != available_blobs.end(); ++it) {
LOG_IF(INFO, Caffe::root_solver())
<< "This network produces output " << *it;
net_output_blobs_.push_back(blobs_[blob_name_to_idx[*it]].get());
net_output_blob_indices_.push_back(blob_name_to_idx[*it]);
outputblobnames.push_back(*it);
}
这样,属性就配置好了代码也修改完了,再右键该项目,添加新建项,有四个:
classification.h
classification.cpp
multi_recognition_cpu.h
multi_recognition_cpu.cpp
classification.h:
#ifndef C