Caffe+Win使用笔记

Caffe

Caffe是一个好用的深度学习框架,引用Caffe官网介绍:

Caffe is a deep learning framework made with expression, speed, and modularity in mind. It is developed by the Berkeley Vision and Learning Center (BVLC) and by community contributors. Yangqing Jia created the project during his PhD at UC Berkeley. Caffe is released under the BSD 2-Clause license.

Caffe安装说明

Linux系统

Linux类系统下安装参考官方安装说明Caffe | Installation

Windows系统

Windows系统下的安装我使用的是happynear大神Caffe-windows版本,中文安装说明是大神的博客如何快糙好猛地在Windows下编译CAFFE并使用其matlab和python接口

安装步骤为:

准备
  • 安装CUDA 7.0版,下载页为https://developer.nvidia.com/cuda-toolkit-70
  • 到项目主页https://github.com/happynear/caffe-windows下载源码
  • 去百度云下载happynear封装的第三方库:http://pan.baidu.com/s/1pJmW7tL。如果需要Debug模式,需要下载http://pan.baidu.com/s/1qW88MTY,不过我没试过。
  • 在Caffe源码的根目录下建立个3rdparty文件夹,把第三方文件解压进去
  • 将3rdparty/bin文件夹添加到环境变量的PATH中,这样才能让程序找到这些第三方库的dll
  • 安装MKL,MKL是可选的,大家可以去Intel官方申请,如果不用cpu模式的话其实也无所谓,在第三方库包中提供了openblas的库文件。
  • 要使用Python接口的安装Python,使用Matlab接口的安装Matlab。

PS:如果没有NVIDIA显卡或者显卡比较老,请还是将CUDA安装上,然后在C/C++选项卡的预处理器定义中,将USE_CUDNN删除。3个项目都要删。同时,为了您的身心健康,请尽快购置显卡。

编译
  • 双击./src/caffe/proto/extract_proto.bat批处理文件来生成caffe.pb.h和caffe.pb.cc两个c++文件,和caffe_pb2.py这个python使用的文件。
  • 打开./buildVS2013/MainBuilder.sln,打开之后切换编译模式至Release X64模式。如果打开之后显示加载失败,可能你的CUDA版本和我的不一致,我的是CUDA 7.0版,这时就要用记事本打开./buildVS2013目录下各个文件夹内的.vcxproj文件,搜索CUDA 7.0,把这个7.0换成你自己的CUDA版本,就可以正常打开了。
  • 点上边工具栏中的绿色三角编译吧。编译大概需要半小时左右,请耐心等待。

以上为编译过程,实际编译过程中遇到了缺少各种lib的问题,都是与Matlab和Python相关的,解决方案:

如果要用matlab wrapper来提取特征、观察训练好的权重的话呢,只需要把matcaffe项目里面的matlab目录修改成你自己的,然后编译,你就能从matlab/+caffe/private文件夹里面找到一个叫caffe_.mexw64的文件啦。
python的wrapper类似,把pycaffe项目里的python目录改成你自己的(我用的是Anaconda),就能在python/caffe文件夹中生成_caffe.pyd的python dll文件。

就是在VS2013里的pycaffe路径设置中,添加包含这些库的路径。可以使用搜索功能找到对应路径,再添加。

PS:编译器使用VS2013版本,不保证其他版本的可用性

测试

http://pan.baidu.com/s/1mgl9ndu下载已经转换好的MNIST的leveldb数据文件,解压至./examples/mnist文件夹中,然后运行根目录下的run_mnist.bat即可开始训练,训练日志会保存在./log文件夹中,以INFO开头,txt格式的日志文件中。

格式支持

happynear的caffe-windows已经支持lmbd的使用了,但磁盘必须是NTFS格式的才可以,需要的请到http://pan.baidu.com/s/1dDHbbgP 下载,并覆盖掉3rdparty/lib 中同名的文件,然后右键各个工程->仅用于项目->仅链接 即可,无需重新生成。

似乎lmbd的使用还需要protobuf,根据官方说明:

For protobuf, you may download the codes from https://github.com/google/protobuf. Copy caffe-windows-root/src/caffe/proto/protoc.exe to protobuf-root/src. Then run python setup.py install in protobuf-root/python.

就是要下载protobuf的源码,之后将caffe安装目录下 src/caffe/proto/protoc.exe复制到。protobuf目录下的src文件夹中,之后在protobuf下的ptyhon目录中在命令行中执行python setup.py install

对于leveldb,说明如下:

For leveldb, I have created a repository https://github.com/happynear/py-leveldb-windows . Please follow the instructions in README.md to install it.

Windows下Caffe使用

以LMBD格式为例:

模型训练

数据处理:

法一,转换成caffe接受的格式:lmdb, leveldb, hdf5 / .mat, list of images, etc.;
法二,自己写数据读取层(如https://github.com/tnarihi/tnarihi-caffe-helper/blob/master/python/caffe_helper/layers/data_layers.py)

数据转换方法:

首先将数据集分为train和validate, 分别写到train.txt和val.txt中。
格式为每一行文件名+ 空格 + label (label 是从0开始, 并连续),如:

00001.jpg 0
00002.jpg 1
00004.jpg 1
00003.jpg 2

在caffe目录下运行命令:

bin\convert_imageset.exe --resize_height=256 --resize_width=256 --backend=lmdb <train_dir> <train.txt_dir> <train_save_dir>\zh_train-lmdb 0
bin\convert_imageset.exe --resize_height=256 --resize_width=256 --backend=lmdb <val_dir> <val.txt_dir> <val_save_dir>\zh_val-lmdb 0

bin\compute_image_mean.exe mine\zh_train-lmdb mine\zh_train-lmdb\mean.binaryproto --backend=lmdb
bin\compute_image_mean.exe mine\zh_val-lmdb mine\zh_val-lmdb\mean.binaryproto --backend=lmdb

其中--resize_height=256 --resize_width=256表示调整图片后的大小;--backen=lmdb表示采用LMBD格式;<train_dir><val_dir>分别为存放训练图片及验证图片的文件夹;<train.txt_dir><val.txt_dir>是train.txt和val.txt的路径,<train_save_dir><val_save_dir>是转换后数据保存的文件。
运行成功后在<save_dir>下生成data.mdb和lock.mdb文件;以及表示均值的mean.binaryproto文件。

定义网络结构、配置Solver参数

对模型下train_val.prototxtsolver.prototxt文件进行修改(bvlc_alexnet网络是这两个文件,其他的可能略有不同)。
主要修改:
train_val.prototxt文件中mean_filesource的路径,以及最后的num_output
solver.prototxt文件中net路径为train_val.prototxt路径。snapshot_prefix路径为快照保存路径。

训练:

在caffe目录下运行命令:

bin\caffe.exe train --solver=<solver.prototxt_dir> --gpu=all

其中<solver.prototxt_dir>是solver.prototxt的路径。

训练所得模型会保存在snapshot_prefix路径中。

模型使用

模型的使用可以采用Python接口。

首先要将caffe路径加入path中,可以采用

caffe_root = "<caffe_dir>"

import sys
sys.path.insert(0, caffe_root + 'python')

之后可以import caffe了。

要使用模型还需要将mean.binaryproto转为可识别的格式的mean.npy

from caffe.proto import caffe_pb2
from caffe.io import blobproto_to_array

MEAN_BIN = <mean.binaryproto_dir>
MEAN_NPY = <mean.npy_dir>

print('generating mean file...')

mean_blob = caffe_pb2.BlobProto()
mean_blob.ParseFromString(open(MEAN_BIN, 'rb').read())

import numpy as np

mean_npy = blobproto_to_array(mean_blob)
mean_npy_shape = mean_npy.shape
mean_npy = mean_npy.reshape(mean_npy_shape[1], mean_npy_shape[2], mean_npy_shape[3])

np.save(file(MEAN_NPY, 'wb'), mean_npy)

print('done...')

还需要修改预测配置文件deploy.prototxt中的最终num_output

接下来可以设置目录,导入模型:

MODEL_FILE = <deploy.prototx_dir>
PRETRAINED = <model_dir>
net = caffe.Classifier(MODEL_FILE, PRETRAINED, mean=np.load(MEAN_NPY).mean(1).mean(1), raw_scale=255,
                       channel_swap=(2, 1, 0))
caffe.set_mode_gpu()

导入模型后可以对图片进行预测:

prediction = net.predict([imput_image])
pridect = prediction.argmax()

预测结果prediction为一个保存图片属于每一类的概率的List,通过argmax()取得其中概率最大的,作为结果。

PS:模型训练也可以通过python接口实现,Document & Examples: https://github.com/BVLC/caffe/pull/1733
更多内容可以参考参考文献中博客。

声明:个人对Caffe了解很少,只是初学时记录下一些过程,希望能给其他初学者一些借鉴。如有疏漏错误之处,望海涵,欢迎指出,定会订正。

References

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值