caffe 如何训练自己的数据图片

前言

caffe是小编在毕业设计做的,在前期也遇到一些问题,现在自己能够整理一下,一方面我们也能够相互讨论,另一方面,自己也能够加强印象。
众所周知,caffe作为一个比较成熟的深度学习框架,里面提供了大量的工具,用来改善训练的结果,比如计算均值的,生成lmdb的工具,各类的激活函数等等,对于不同的数据集可能 采取的网络结构是不一样的,需要我们寻找到一个最优化的目标。下面就是我在训练图片时遇到的一些问题和总结的步骤,

训练步骤

step 1 准备数据

 由于官网cifar-10 或者 image-1000等数据库的数量图片巨大,不适合用来作测试,特别是对于我只是cpu版本的caffe来说,计算量太大,反而不是理想的数据库。
 这里提供了有[五类的数据]  (http://pan.baidu.com/s/1nuqlTnN)
 感谢主人的分享。
 一共有500张图片,400张5类,每类80张,另外的20张×5类用于测试,4比1的比例对于测试和训练自己的图片很合适。
 **note:下载后存到caffe/data/re/train和caffedata/re/test**   

这个时caffe中统一存放各种相关数据的文件夹。

step 2 转变数据格式lmdb

caffe中训练数据需要用到lmdb或者leveldb的数据格式,这里我们以转换成lmdb为例。
首先建立批读取文件。
$ cd  caffe
$ sudo mkdir  examples/myfile
$ sudo vi examples/myfile/create_filelish.sh

在文件中添加以下内容:

#!/usr/bin/env sh #指定寻找的目标位置
DATA=data/re/      #类似定义宏变量,
MY=examples/myfile #方便取地址

echo "Create train.txt..."
rm -rf $MY/train.txt  #删除旧的文档
for i in 3 4 5 6 7 
do
find $DATA/train -name $i*.jpg | cut -d '/' -f4-5 | sed "s/$/ $i/">>$MY/train.txt
done
#cut截取地址 sed 添加类别 find寻找文件 
echo "Create test.txt..."
rm -rf $MY/test.txt
for i in 3 4 5 6 7
do
find $DATA/test -name $i*.jpg | cut -d '/' -f4-5 | sed "s/$/ $i/">>$MY/test.txt
done
echo "All done"

esc+:+wq 保存退出,运行程序

sudo sh examples/myfile/create_filelist.sh 

在examples/myfile/train.txt看到以下。
**test/305.jpg 3
test/317.jpg 3
test/319.jpg 3
test/313.jpg 3
test/318.jpg 3
test/315.jpg 3
test/302.jpg 3**
对于转变lmdb的功能,caffe自带了一个工具。我们可以首先编写一个脚本程序。

 sudo vi examples/myfile/create_lmdb.sh

编辑文件,插入以下内容:
note:转变数据格式,太大了需要的数据量太大,后期我在实验中发现大的数据和小的数据对于训练结果影响不大。

#!/usr/bin/env sh   #寻找sh可执行目标
MY=examples/myfile  #简化地址

echo "Create train lmdb.."
rm -rf $MY/img_train_lmdb  
build/tools/convert_imageset \#系统自带的工具
--shuffle \               #打乱顺序
--resize_height=32 \
--resize_width=32 \     #转变为32位极大减轻了cpu的工作负担
/home/xxx/caffe/data/re/ \#修改自己的数据
$MY/train.txt \
$MY/img_train_lmdb    

echo "Create test lmdb.."
rm -rf $MY/img_test_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_width=32 \
--resize_height=32 \         
/home/xxx/caffe/data/re/ \  #勿忘修改
$MY/test.txt \
$MY/img_test_lmdb

echo "All Done.."

step 3 计算平均值,加快速度

通过利用利用计算均值,更够相对减少数据的处理,加快计算的速度。caffe工具中,提供了这么一个工具。

sudo build/tools/compute_image_mean examples/myfile/img_train_lmdb examples/myfile/mean.binaryproto

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

step 4 搭建框架,创建solvel .prototext和train_test_ proto文件。

由于在32*32位框架中,cifar-10有现成的学习框架,我们只需要进行一些关键数据的改写就可以快速的训练进行我们的训练了,以下时详细的说明。
首先拷贝文件。

sudo cp examples/cifar10/cifar10_quick_solver.prototxt  examples/myfile/
examples/cifar10/cifar10_quick_train_test.prototxt  examples/myfile/

接着进行修改里面的一些文件。

sudo vi examples/myfile/cifar10_quick_train_test.prototxt  

“`

“` python
name: “CIFAR10_quick”
layer {
name: “cifar”
type: “Data”
top: “data”
top: “label”
include {
phase: TRAIN
}
transform_param {
mean_file: “examples/myfile/mean.binaryproto”#修改
}
data_param {
source: “examples/myfile/img_train_lmdb”
batch_size: 50
backend: LMDB
}
}
layer {
name: “cifar”
type: “Data”
top: “data”
top: “label”
include {
phase: TEST
}
transform_param {
mean_file: “examples/myfile/mean.binaryproto”#修改
}
data_param {
source: “examples/myfile/img_test_lmdb”#修改
batch_size: 50
backend: LMDB
接下来,修改另一个文件。
$ sudo vi examples/myfile/cifar10_quick_train_test.prototxt
只需要修改几句,其它参数默认即可。想要调优的话,可以试试其它的参数。
“examples/myfile/cifar10_quick_train_test.prototxt” #修改
test_iter: 2 # 一次迭代50,迭代2次
test_interval: 50
base_lr: 0.001
momentum: 0.9
weight_decay: 0.004
lr_policy: “fixed”
display: 100
max_iter: 300
snapshot: 100
snapshot_format: HDF5
snapshot_prefix: “examples/myfile/cifar10_quick”
solver_mode: CPU

step 5 训练

caffe工具箱下,提供了专门训练的函数。
sudo build/tools/caffe train -solver examples/myfile/solver.prototxt
在cpu模式下,大约训练半个小时即可迭代完300次,以下是我的训练结果。这里写图片描述

总结

训练中,由于计算机硬件的限制问题,把原来256*256的数据格式,修改成了32*32,发现效果在短时间内完成的也是可以的。
对于后期,可以通过改善一些参数,比如增加层数,调整最优结构,将参数尝试调试的更加理想。这也是我后期做实验主攻的方向。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值