Caffe源码编译,win10+vs2015+Ninja,C++接口测试(mnist),Python接口测试(mnist),(坑爹篇)

#PS:要转载请注明出处,本人版权所有

#PS:这个只是 《 我自己 》理解,如果和你的

#原则相冲突,请谅解,勿喷

说明:首先为了帮队友在win下配置caffe,本人特意在win平台下折腾了一波。在此只想说一句话:个人认为,caffe编译Win比Linux更坑,更难,花了我接近一天的时间(我以前在Linux上配置过N次了)。

date 2017.12.18

注意事项(这才是精华,我就是因为这个才浪费了这一天时间)

  1. 是否安装readme提供的符合要求的vs,cmake,ninja版本?
  2. 是否安装了正确的python版本?
  3. 对于VS来说,检查,你的电脑上应该只存在一个版本,而且此版本应该包含VC++的功能(包括MFC以及基础功能)(不理解就全部装上,绝对不吃亏,不上当,我就是因为节约空间,少装了一些东西,出问题了)
  4. 检查python是否只有一个版本,建议安装anaconda?
  5. 检查自己的环境变量,对于cl.exe,python.exe,cmake.exe,ninja.exe是否找到?
  6. 最后,不想折腾就尽量按照帮助文档,一个钉子一个眼的做法,这样会少很多错误?

下载caffe,切换分支,运行脚本,一切顺利,你就是幸运的那个人。

执行以下命令以前,保证注意事项都看了,想要加速的,自己确定自己的cuda和cudnn配置好了。

git clone https://github.com/BVLC/caffe.git
cd caffe
git checkout windows
./scripts/build_win.cmd
(喝口水)

WindowsDownloadPrebuiltDependencies.cmake 此脚本报错,报找不到服务器

原因:主要是天朝牌防火墙
方法:
1 开vpn或者其他工具翻墙。
2 自己想办法去下对应的文件(自己分析以下这段文字),放到.caffe/download目录(一般在用户目录下)
我的下载地址:https://github.com/willyd/caffe-builder/releases/download/v1.1.0/libraries_v140_x64_py35_1.1.0.tar.bz2(对应vs2015,python3.5)

set(DEPENDENCIES_VERSION 1.1.0)
set(DEPENDENCIES_NAME_1800_27 libraries_v120_x64_py27_${DEPENDENCIES_VERSION})
set(DEPENDENCIES_NAME_1900_27 libraries_v140_x64_py27_${DEPENDENCIES_VERSION})
set(DEPENDENCIES_NAME_1900_35 libraries_v140_x64_py35_${DEPENDENCIES_VERSION})

set(DEPENDENCIES_URL_BASE https://github.com/willyd/caffe-builder/releases/download)
set(DEPENDENCIES_FILE_EXT .tar.bz2)
set(DEPENDENCIES_URL_1800_27 "${DEPENDENCIES_URL_BASE}/v${DEPENDENCIES_VERSION}/${DEPENDENCIES_NAME_1800_27}${DEPENDENCIES_FILE_EXT}")
set(DEPENDENCIES_SHA_1800_27 "ba833d86d19b162a04d68b09b06df5e0dad947d4")
set(DEPENDENCIES_URL_1900_27 "${DEPENDENCIES_URL_BASE}/v${DEPENDENCIES_VERSION}/${DEPENDENCIES_NAME_1900_27}${DEPENDENCIES_FILE_EXT}")
set(DEPENDENCIES_SHA_1900_27 "17eecb095bd3b0774a87a38624a77ce35e497cd2")
set(DEPENDENCIES_URL_1900_35 "${DEPENDENCIES_URL_BASE}/v${DEPENDENCIES_VERSION}/${DEPENDENCIES_NAME_1900_35}${DEPENDENCIES_FILE_EXT}")
set(DEPENDENCIES_SHA_1900_35 "f060403fd1a7448d866d27c0e5b7dced39c0a607")

.\caffe/export.hpp(7): fatal error C1083: 无法打开包括文件: “caffe/include_symbols.hpp”: No such file or directory

此文件在caffe/build 目录,自己拷贝到caffe/include/caffe/下,就好了。
这个bug主要是由于没有把build目录传递给cl.exe,导致找不到文件。
(参考此问题https://github.com/BVLC/caffe/issues/5840,我也提交了可能的解决方法,希望帮助你们)

caffe mnist数据集的train 和test

首先请下载mnist数据集,这里我打包上传了四个文件,下载地址。http://download.csdn.net/download/u011728480/10163922(下载地址参考caffe/data/mnist/get_mnist.sh文件,在原生的win下,wget是找不到的,所以,自己去下载吧)
如图
这里写图片描述

做以下操作时,保证caffe已经正常编译通过。
首先把数据集转为lmdb格式存放,这是caffe支持的存储格式。
转换:
./convert_mnist_data.exe ../../../data/mnist/train-images-idx3-ubyte ../../../data/mnist/train-labels-idx1-ubyte ./mnist_train_lmdb --backend=lmdb

./convert_mnist_data.exe ../../../data/mnist/t10k-images-idx3-ubyte ../../../data/mnist/t10k-labels-idx1-ubyte ./mnist_test_lmdb --backend=lmdb
生成如图A两个文件夹

train:
./build/tools/caffe.exe train --solver=examples/mnist/lenet_solver.prototxt
生成如图B四个文件
结果如图C,迭代10000,准确率99.03%.
test:
./build/tools/caffe.exe test -model=examples/mnist/lenet_train_test.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel -gpu=0

测试结果如图D,测试集,准确率98.56%

图A
这里写图片描述
图B
这里写图片描述
图C
这里写图片描述
图D
这里写图片描述

Caffe Python 接口测试

(我用的anaconda环境,开vpn执行,
conda config –add channels conda-forge
conda config –add channels willyd
conda install –yes cmake ninja numpy scipy protobuf==3.1.0 six scikit-image pyyaml pydotplus graphviz)
把caffe/python/caffe目录放到python的site-packages目录。
把caffe/python目录添加到PYTHONPATH环境变量

准备一个py文件吧,迭代10000次。

import caffe
caffe.set_device(0)
caffe.set_mode_gpu()
solver = caffe.SGDSolver('examples/mnist/lenet_solver.prototxt')

iter = solver.iter
while iter<10000:
    solver.step(1)
    iter = solver.iter
    input_data = solver.net.blobs['data'].data  
    loss = solver.net.blobs['loss'].data
    accuracy = solver.test_nets[0].blobs['accuracy'].data
    print('iter:', iter, 'loss:', loss,'accuracy:',accuracy)

这里写图片描述

注意:这里很有可能要报一个错误,PIL模块中的Image模块加载失败,提示核心提示:from PIL import Image , DLL 加载失败。我把PIL模块降级到4.2左右就可以了,具体看你python版本,不要用最新的,不知道降到哪个版本就自己一个一个的降级。

总结

说真的,没有特别需求,别在windows下用源码折腾caffe,太坑。
不喜欢折腾的人可以去下载已经编译好的二进制文件。
最后说一句,在Linux下用caffe真的很简单的,点F*ck。
#PS:请尊重原创,不喜勿喷

#PS:要转载请注明出处,本人版权所有.

有问题请留言,看到后我会第一时间回复

猜你喜欢

转载自blog.csdn.net/u011728480/article/details/78834630