前言:

本文章记录了我将自己的数据集处理并训练的流程,帮助一些刚入门的学习者,也记录自己的成长,万事起于忽微,量变引起质变。

正文:

一、流程

  1)准备数据集

    2)数据转换为lmdb格式

    3)计算均值并保存(非必需)

  4)创建模型并编写配置文件

  5)训练和测试

二、实施

(一)准备数据集

在深度学习中,数据集准备往往是最难的事情,因为数据涉及隐私、商业等各方面,获取难度很大,不过有很多科研机构公布了供学习使用的数据集,我们可以在网上下载。还有一种获取的途径是论文,查阅国内外相关的论文,看他们是如何获取到数据集的,我们也可以使用他 们所采用的数据集。

我要训练的模型是人脸识别,训练的数据集是在网上下载的,经过整理,在我的网盘可以下载:http://pan.baidu.com/s/1jIxCcKI

(二)数据转换为lmdb格式

生成lmdb格式的文件通过脚本来实现,这就需要我们自己编写脚本文件,这里遇到了一些坑,首先使用vim创建脚本文件create1.sh

#!/usr/bin/env sh
DATA=AR1
MY=newfile
echo "Create train.txt..."
rm -rf $MY/train.txt
for i in
do
find $DATA/train/$i -name *.pgm|cut -d '/' -f2- | sed "s/$/ $i/">>$MY/train.txt
done
echo "Create test.txt..."
rm -rf $MY/test.txt
for i in
do
find $DATA/test/$i -name *.pgm|cut -d '/' -f2- | sed "s/$/ $i/">>$MY/test.txt
done
echo "All done"

这个脚本文件中,用到了rm,find, cut, sed,cat等linux命令。

rm: 删除文件

find: 寻找文件

cut: 截取路径

sed: 在每行的最后面加上标注。本例中将找到的*cat.jpg文件加入标注为1,找到的*bike.jpg文件加入标注为2

cat: 将两个类别合并在一个文件里。

执行这个脚本:

sh data/face/create1.sh

成功的话就会在newfile文件夹里生成train.txt和test.txt文件,比如

f2-4的含义是选取以“/”而分隔开的第2至第4部分

接着再编写一个脚本文件,调用convert_imageset命令来转换数据格式。

vim lmdb.sh
#!/usr/bin/env sh
MY=data/face/newfile
echo "Create train lmdb.."
rm -rf $MY/img_train_lmdb
build/tools/convert_imageset --shuffle \
--resize_height= \
--resize_width= \
/home/zyf/ygh/project/caffe/data/face/AR1/ $MY/train.txt $MY/img_train_lmdb
echo "Create test lmdb.."
rm -rf $MY/img_test_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_width= \
--resize_height= \
/home/zyf/ygh/project/caffe/data/face/AR1/ \
$MY/test.txt \
$MY/img_test_lmdb
echo "All Done.."

我统一转换成256*256大小。

sh lmdb.sh

运行成功后,会在 newfile下面生成两个文件夹img_train_lmdb和img_test_lmdb,分别用于保存图片转换后的lmdb文件。

(三)计算均值并保存(非必需)

图片减去均值再训练,会提高训练速度和精度。因此,一般都会有这个操作。

caffe程序提供了一个计算均值的文件compute_image_mean.cpp,我们直接使用就可以了

build/tools/compute_image_mean data/face/newfile/img_train_lmdb data/face/newfile/mean.binaryproto 

compute_image_mean带两个参数,第一个参数是lmdb训练数据位置,第二个参数设定均值文件的名字及保存路径。运行成功后,会在 newfile/ 下面生成一个mean.binaryproto的均值文件。

(四)创建模型并编写配置文件

模型里面的数据

data_param {
source: "data/face/newfile/img_train_lmdb"
backend:LMDB
batch_size:
} transform_param {
mean_file: "data/face/newfile/mean.binaryproto"
mirror: true
}

这其中的source和mean_file的路径要改成前面你自己生成的文件目录,其余的不需要修改,我这里采用的是网上训练精度不错的一个网络,具体下载可以转到百度云: 链接

其中的train_val.prototxt是训练网络

然后修改其中的solver.prototxt

net: "data/face/train_val.prototxt"
test_iter:
test_interval: base_lr: 0.001
lr_policy: "step"
gamma: 0.95
stepsize:
momentum: 0.9
weight_decay: 0.0005 display:
max_iter:
snapshot:
snapshot_prefix: "data/face"
solver_mode: GPU
device_id:
#debug_info: true
其中test_iter: 10,test_interval: 100,一千张图片每次测试100张,10次就都可以覆盖了。。在训练过程中,调整学习率,逐步变小。

(五)训练和测试

如果前面都没有问题,数据准备好了,配置文件也配置好了,这一步就比较简单了。

build/tools/caffe train -solver data/face/solver.prototxt

直接训练即可,可以实时在命令行下查看其精度与loss。

待续。。。

by  still

Caffe学习系列(四)之--训练自己的模型的更多相关文章

  1. Caffe学习系列(13):对训练好的模型进行fine-tune

    使用http://www.cnblogs.com/573177885qq/p/5804863.html中的图片进行训练和测试. 整个流程差不多,fine-tune命令: ./build/tools/c ...

  2. Caffe学习系列(12):训练和测试自己的图片--linux平台

    Caffe学习系列(12):训练和测试自己的图片   学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测 ...

  3. Caffe学习系列(12):训练和测试自己的图片

    学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...

  4. 转 Caffe学习系列(12):训练和测试自己的图片

    学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...

  5. Caffe 学习系列

    学习列表: Google protocol buffer在windows下的编译 caffe windows 学习第一步:编译和安装(vs2012+win 64) caffe windows学习:第一 ...

  6. Caffe学习系列(23):如何将别人训练好的model用到自己的数据上

    caffe团队用imagenet图片进行训练,迭代30多万次,训练出来一个model.这个model将图片分为1000类,应该是目前为止最好的图片分类model了. 假设我现在有一些自己的图片想进行分 ...

  7. Caffe学习系列(3):视觉层(Vision Layers)及参数

    所有的层都具有的参数,如name, type, bottom, top和transform_param请参看我的前一篇文章:Caffe学习系列(2):数据层及参数 本文只讲解视觉层(Vision La ...

  8. Caffe学习系列(22):caffe图形化操作工具digits运行实例

    上接:Caffe学习系列(21):caffe图形化操作工具digits的安装与运行 经过前面的操作,我们就把数据准备好了. 一.训练一个model 右击右边Models模块的” Images" ...

  9. Caffe学习系列(21):caffe图形化操作工具digits的安装与运行

    经过前面一系列的学习,我们基本上学会了如何在linux下运行caffe程序,也学会了如何用python接口进行数据及参数的可视化. 如果还没有学会的,请自行细细阅读: caffe学习系列:http:/ ...

  10. 转 Caffe学习系列(3):视觉层(Vision Layers)及参数

    所有的层都具有的参数,如name, type, bottom, top和transform_param请参看我的前一篇文章:Caffe学习系列(2):数据层及参数 本文只讲解视觉层(Vision La ...

随机推荐

  1. 用smarty来做简易留言系统,明细步骤简单操作

    留言信息是之前用php做过的一个例子,现在把它用smarty模板来做 大概是这样子 点击发布信息 然后填写内容,发送后会返回表格,写的内容都会出现在表格里 数据库的数据是这样的: 先建两个文件.php ...

  2. 10条建议让你创建更好的jQuery插件

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使 ...

  3. 《深入理解Java虚拟机》学习笔记之最后总结

    编译器 Java是编译型语言,按照编译的时期不同,编译器可分为: 前端编译器:其实叫编译器的前端更合适些,它把*.java文件转变成*.class文件,如Sun的Javac.Eclipse JDT中的 ...

  4. 【解题报告】VijosP1351 棋盘制作

    思路: 1. 矩形:用f[i][j][1]表示右下角为(I,j),最大的,符合条件的矩形的长,用f[i][j][2]表示右下角为(I,j),最大的,符合条件的矩形的高,预设f内所有元素为1 If(a[ ...

  5. 基于 Koa平台Node.js开发的KoaHub.js的跳过组件代码

    koahub-skip koahub skip middleware koahub skip Conditionally skip a middleware when a condition is m ...

  6. 基于 Koa平台Node.js开发的KoaHub.js连接打印机的代码

    最近好多小伙伴都在做微信商城的项目,那就给大家分享一个基于 Koa.js 平台的 Node.js web 开发的框架连接微信易联云打印机接口的代码,供大家学习.koahub-yilianyun 微信易 ...

  7. WPF 动态生成DataGrid及动态绑定解决方案

    一.场景 有过WPF项目经验的朋友可能都知道,如果一个DataGrid要绑定静态的数据是非常的简单的(所谓静态是指绑定的数据源的类型是静态的),如下图所示,想要显示产品数据,只需绑定到一个产品列表即可 ...

  8. django generic view - ListView

    ListView (带分页) 1.带分页效果的基础模板 1) view from django.views.generic.list import ListView from employ.model ...

  9. ###服务(Service)

    Start服务开启方式 1)   创建服务 public class MyService extends Service 2)   添加注册表 <service android:name=&qu ...

  10. Asp.NetCore1.1版本没了project.json,这样来生成跨平台包

    本章将要和大家分享的是Asp.NetCore1.1版本去掉了project.json后如何打包生成跨平台包, 为了更好跟进AspNetCore的发展,把之前用来做netcore开发的vs2015卸载后 ...