caffe 训练自己的数据集或者是imgnet上的数据集

参考这篇优秀的博文,基本上都能够实现训练自己的数据集以及标注过程。

https://blog.youkuaiyun.com/qq_27923041/article/details/54139887#comments

这个小哥的过程很是详细,我不在这里重复,仅在此做一些细节上的补充和说明。

首先是数据集的获取,我直接用的这个小哥收集的数据。

需要注意的是,图像的命名都为-------三位数字.jpg,如301.jpg,这样命名是为了之后方便lmdb数据库的生成,以及标注图像的类别。博主是把图像名字的第一个数字当作了对应的类别,通过在配置文件中的命令实现这个操作。

这一过程的实现实在create_filelist.sh中实现的,因为要生成lmdb格式的数据库,对应的txt文件必须要是前面一行是文件路径/文件名 和 类别。

如图所示。现在说一下实现的代码:

#!/usr/bin/env sh
DATA=data/re/      这一行是你的数据所在的文件目录,但是首先都是在caffe目录下
MY=examples/myfile  这是你自己touch的一个文件,用来保存配置文件

echo "Create train.txt..."

rm -rf $MY/train.txt   删除现有的train.txt文件,即是清除历史文件,生成新的文件

for i in 3 4 5 6 7      总共有5类,从3开始到7结束,这也是每一幅图像名字的开头的数字标号
do
find $DATA/train -name $i*.jpg | cut -d '/' -f4-5|sed "s/$/ $i/">>$MY/train.txt  从图像的名字中剪出类别,即只取第一个数字。sed是把剪出来的类别加到生成的txt文件每一行的末尾。的
done
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"

运行这个.sh文件会生成两个txt文件,train.txt和test.txt。如上图所示。

前期的材料已经备齐,之后是生成lmdb数据库。这在creat_lmdb.sh中实现

#!/usr/bin/env sh
MY=examples/myfile 保存creat_lmdb.sh配置文件的路径

echo "Create train lmdb.."

rm -rf $MY/img_train_lmdb
build/tools/convert_imageset \  要用到caffe tools 中的 convert_imageset 函数。
--shuffle \
--resize_height=256 \
--resize_width=256 \
/home/mysj/caffe/data/re/ \   图像数据所在的路径
$MY/train.txt \           create_filelist.sh生成的train.txt文件,即是图像名和类别。
$MY/img_train_lmdb




echo "Creat test lmdb.."
 

rm -rf $MY/img_test_lmdb

build/tools/convert_imageset \
--shuffle \
--resize_width=256 \
--resize_height=256 \
/home/mysj/caffe/data/re/ \
$MY/test.txt \
$MY/img_test_lmdb

echo "All Done.."

运行这个.sh文件会生成两个 img_test_lmdb、img_train_lmdb文件。即成功的把自己的数据集转成了caffe网络需要的数据格式。

补充说明:creat_filelist.sh、creat_lmdb.sh是需要自己写的,之后网络的配置文件是copy自models/bvlc_reference_caffenet中的solver.prototxt    train_val.prototxt

然后是修改这两个配置文件:

首先是solver.prototxt文件:

net: "examples/myfile/train_val.prototxt" 这个路径一定要注意,一定要是你的train_val.prototxt所在的路径,不然一定会报错
test_iter: 2
test_interval: 50  这两个数据根据你的测试数据集的大小进行设置。2×50
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100
display: 50
max_iter: 5000       迭代次数
momentum: 0.9
weight_decay: 0.0005


solver_mode: GPU     是否使用gpu

然后是train_val.prototxt

name: "CaffeNet"
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: true
    crop_size: 227
    mean_file: "examples/myfile/mean.binaryproto" 改为你的mean.binaryproto文件所在的路径,这个文件的生成会在下面讲。
  }
# mean pixel / channel-wise mean instead of mean image
#  transform_param {
#    crop_size: 227
#    mean_value: 104
#    mean_value: 117
#    mean_value: 123
#    mirror: true
#  }
  data_param {
    source: "examples/myfile/img_train_lmdb"            你的训练数据所在的路径
    batch_size: 250
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {
    mirror: false
    crop_size: 227
    mean_file: "examples/myfile/mean.binaryproto" 上同
  }
# mean pixel / channel-wise mean instead of mean image
#  transform_param {
#    crop_size: 227
#    mean_value: 104
#    mean_value: 117
#    mean_value: 123
#    mirror: false
#  }
  data_param {
    source: "examples/myfile/img_test_lmdb"    你的测试数据所在的路径
    batch_size: 50
    backend: LMDB
  }
}

只需要修改这几个地方就可以。

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

感兴趣的可以到所在路径下查看源码。

自此,所有的准备工作完成,可以跑网络了。

sudo build/tools/caffe train -solver examples/myfile/solver.prototxt

完成。

之后研究一下imgnet数据集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nobrody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值