用MATLAB训练caffe,[转载]windows caffe部署训练+python调用全部流程

原版caffe代码项目编译在windows下非常麻烦,还好微软集成了所有三方包之后放出了一个windows版本的,省了不少时间。

项目下载地址:

https://github.com/Microsoft/caffe

网上有这个版本caffe编译现成的教程可以搜。如果自己下载编译,建议注释data_layer.cpp下

DLOG(INFO) << "Prefetch batch: " <<

batch_timer.MilliSeconds() << " ms.";

DLOG(INFO) << "  Read time: " << read_time / 1000 << " ms.";

DLOG(INFO) << "Transform time: " << trans_time /

1000 << " ms.";

这三行,要不然训练时干扰loss显示很烦人。

修改源码以及编译IDE使用visual studio 2013

如果有加载libcaffe和test_all项目失败的情况,先确保正确版本的cuda已经安装。

/windows/CommonSettings.props

文件里可以设置是否使用CuDNN以及Cuda版本。Python接口一般是编译的,matlab看使用需求是否编译。

解决方案位于/windows/caffe.sln

放出我配置好的windows caffe项目以及数据集、网络结构,照搬下载,更改路径和配置即可。

windows caffe项目(已编译好libcaffe、caffe、pycaffe、convert_imageset):

http://pan.baidu.com/s/1dFJYLDv

数据集(汉字识别)+网络(自设计)

http://pan.baidu.com/s/1bpbx6Gn

eclipse环境以及数据预处理、模型调用解决方案

http://pan.baidu.com/s/1jHQZTB4

http://pan.baidu.com/s/1bEyZP8

python2.7目录下所有内容,包含三方库

http://pan.baidu.com/s/1c1Q6mUc

内容以及结构说明会在后面详细说明。

编译顺序:libcaffe、caffe、pycaffe、convert_imageset

这里需要设置一些引用,具体如截图:

libcaffe引用python安装路径,默认c:\Python27

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

caffe项目引用:

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

pycaffe:

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

convert_imageset

a4c26d1e5885305701be709a3d33442f.png

------------------------------------------------

编译好之后的目录在  /Build/x64/Debug下,内容如下:

a4c26d1e5885305701be709a3d33442f.png

之后复制pycaffe下所有内容到 {python安装目录这里是c:\python27}Libsite-packages

这个目录也是python三方库所在位置,不光是python,还需要安装numpy、scipy、sckit-image、opencv_python、matplotlib之类的一堆东西,才能让在python环境下调用caffe并且对图片进行预处理。

如果在eclipse里import东西时出错,多半是这些需要的库没有安装好。安装教程同样网上找,比较零散。

当然也可以下载python27.rar然后复制粘贴覆盖,省得一个一个去安装。

目录截图:

a4c26d1e5885305701be709a3d33442f.png

接下来eclipse安装以及配置pyDev环境,网上找教程省略不写,或者直接下载eclipse.rar解压即可。

===========================================================

到此为止开发环境已配置部署完毕。

创建自己的训练集:

dpsample.rar解压, /dpsample/dpsample

目录下是原始数据,需要进行一系列处理,使用testcaffe.rar里的解决方案。

prepareSamples()方法将文字等比拉伸并且居中到32x32大小的图片,并且根据文字放入相应的文件夹,目录/dpsample/cha_data/...

prepareTraining()方法从分类好的文字里筛选至少有50个文字样本的字,随机放入训练或是测试数据集文件夹,自设放置训练与测试的比例。限定训练文件夹内同一个字最多不超过60个,以满足训练样本平衡。

最终得到以下内容:

/dpsample/data/character_dict.txt  汉字Index(caffe只能识别int型作为softmax分类)

/dpsample/data/train.txt

训练集目录

/dpsample/data/val.txt

测试集目录

/dpsample/data/train

训练集图片文件夹

/dpsample/data/val

测试集图片文件夹

之后修改caffe-master目录下convertimage2ldb.bat和convertimage2ldb_test.bat两个脚本内的路径,调用

/Build/x64/Debug/convert_imageset.exe程序分别生成训练集以及测试集的lmdb数据文件。注意这里使用--shuffle打乱图片排列顺序很重要。

两个bat脚本运行完得到/dpsample/data/testldb 和/dpsample/data/trainldb

文件夹。

之后在/dpsample/solver目录下创建编辑三个prototxt文档,分别是

lenet_solver.prototxt  训练模型使用的参数

lenet_train_test.prototxt  训练模型使用的网络,带accuracy以及loss函数

lenet_deploy.prototxt  模型训练好后,python调用模型时使用的网络。

三个prototxt文档内的内容含义网上有教程,不重复叙述。

这里放一个很实用的网络结构可视化网站:

http://ethereon.github.io/netscope/#/editor

网络结构以及solver定义好、lmdb数据准备好之后,就可以开始训练了。

/caffe-master/Build/x64/Debug 下打开控制台,运行

caffe.exe train

-solver={lenet_solver.prototxt文档路径}

等待训练结束。

当然也可以训练一段时间之后手动ctrl+c结束

得到一系列.caffemodel以及.solverstate文件

其中caffemodel文件是可以调用的模型,solverstate文件是继续检查点接着训练需要用到的文件。

python里调用caffemodel文件,对指定图片(30_47.png图,character_dict.txt里:多=30)进行分类:

import省略

deploy='C:/Users/Shirui/Downloads/dpsample/solver/lenet_deploy.prototxt'

#deploy文件

caffe_model='C:/Users/Shirui/Downloads/dpsample/solver_iter_1000.caffemodel'

#训练好的caffemodel

imgtest='C:/Users/Shirui/Downloads/dpsample/solver/30_47.png'

#随机找的一张待测图片

net = caffe.Net(deploy, caffe_model, caffe.TEST)

transformer = caffe.io.Transformer({'data':

net.blobs['data'].data.shape})

#设定图片的shape格式(1,3,28,28)

transformer.set_transpose('data', (2,0,1))  #改变维度的顺序,由原始图片(28,28,3)变为(3,28,28)

#transformer.set_mean('data',

np.load(mean_file).mean(1).mean(1))  #减去均值,前面训练模型时没有减均值,这儿就不用

#transformer.set_raw_scale('data', 1)  # 缩放到【0,1】之间  已经在网络prototxt里已设置scale,这里可以不用

transformer.set_channel_swap('data', (2,1,0))

#交换通道,将图片由RGB变为BGR

im=caffe.io.load_image(imgtest)  #加载图片

net.blobs['data'].data[...] =

transformer.preprocess('data',im)  #执行上面设置的图片预处理操作,并将图片载入到blob中

out = net.forward()

prob= net.blobs['prob'].data[0].flatten()

#取出最后一层(Softmax)属于某个类别的概率值,并打印

print prob

order=prob.argsort()[-1]  #获取最大prob的index

print(order)

最终得到正确的图片分类index 30

a4c26d1e5885305701be709a3d33442f.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值