caffe是小编在毕业设计做的,在前期也遇到一些问题,现在自己能够整理一下,一方面我们也能够相互讨论,另一方面,自己也能够加强印象。
众所周知,caffe作为一个比较成熟的深度学习框架,里面提供了大量的工具,用来改善训练的结果,比如计算均值的,生成lmdb的工具,各类的激活函数等等,对于不同的数据集可能 采取的网络结构是不一样的,需要我们寻找到一个最优化的目标。下面就是我在训练图片时遇到的一些问题和总结的步骤,
由于官网cifar-10 或者 image-1000等数据库的数量图片巨大,不适合用来作测试,特别是对于我只是cpu版本的caffe来说,计算量太大,反而不是理想的数据库。这里提供了有[五类的数据] ()感谢主人的分享。一共有500张图片,400张5类,每类80张,另外的20张×5类用于测试,4比1的比例对于测试和训练自己的图片很合适。**note:下载后存到caffe/data/re/train和caffedata/re/test**
这个时caffe中统一存放各种相关数据的文件夹。
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 ""
rm -rf $ #删除旧的文档
for i in 3 4 5 6 7
do
find $DATA/train -name $i*.jpg | cut -d '/' -f4-5 | sed "s/$/ $i/">>$
done
#cut截取地址 sed 添加类别 find寻找文件
echo ""
rm -rf $
for i in 3 4 5 6 7
do
find $DATA/test -name $i*.jpg | cut -d '/' -f4-5 | sed "s/$/ $i/">>$
done
echo "All done"
esc+:+wq 保存退出,运行程序
sudo sh examples/myfile/create_filelist.sh
在examples/看到以下。
**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/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/img_test_lmdbecho "All Done.."
通过利用利用计算均值,更够相对减少数据的处理,加快计算的速度。caffe工具中,提供了这么一个工具。
sudo build/tools/compute_image_mean examples/myfile/img_train_lmdb examples/myfile/mean.binaryproto
compute_image_mean带两个参数,第一个参数是lmdb训练数据位置,第二个参数设定均值文件的名字及保存路径。
运行成功后,会在 examples/myfile/ 下面生成一个mean.binaryproto的均值文件。
由于在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
caffe工具箱下,提供了专门训练的函数。
sudo build/tools/caffe train -solver examples/myfile/solver.prototxt
在cpu模式下,大约训练半个小时即可迭代完300次,以下是我的训练结果。
训练中,由于计算机硬件的限制问题,把原来256*256的数据格式,修改成了32*32,发现效果在短时间内完成的也是可以的。
对于后期,可以通过改善一些参数,比如增加层数,调整最优结构,将参数尝试调试的更加理想。这也是我后期做实验主攻的方向。
本文发布于:2024-01-30 22:03:28,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170662341223140.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |