Caffe的基本使用

:::tip
本文主要描述如何训练、测试一个自己的模型。内容参考博客
:::

1 说明

首先我们需要在 ~/caffe/example/ 目录下创建一个自己的文件夹,如 /cancer,后面将会在该目录下创建一些脚本和模型文件,训练的模型也会存储在该目录下。另外,需要在 caffe 根目录下执行这些脚本,主要是因为一些路径问题。下面是本次实验结束时的目录结构:

└── cancer
    ├── create_lmdb.sh
    ├── create_mean_value.sh
    ├── get_filelist.sh
    ├── image
    │   ├── test
    │   └── train
    ├── img_test_lmdb
    ├── img_train_lmdb
    ├── mean.binaryproto
    ├── solver_iter_500.caffemodel
    ├── solver_iter_500.solverstate
    ├── solver.prototxt
    ├── start_train.sh
    ├── test.txt
    ├── train.txt
    └── train_val.prototxt

2 准备数据

数据集先自己做预处理,不同类别的图片最好是在名称上有区别,便于后面脚本对它的查找,如:img-bike.jpg、img-car.jpg,并将数据分为训练集和测试集,并存储到对应文件夹:image/test/image/train/

3 预处理数据

:::tip 说明
本次实验中,模型训练需要的格式为 lmdb,所以需要将 jpg、png 等图像格式转换过来,caffe 里面自带有转换的程序,对应可执行文件在 build/tools/convert_imageset。不过在使用之前需要给数据集生成一个文件名列表,存放在 .txt 中。
:::

3.1 生成文件名列表

创建 get_filelist.sh 脚本,编写如下:

# /usr/bin/env sh
DATA=examples/cancer
DATA_TRAIN=$DATA/image/train
DATA_TEST=$DATA/image/test

echo "Create train.txt..."
rm -rf $DATA/train.txt
find $DATA_TRAIN -name *P_1_* | cut -d '/' -f 7-10 | sed "s/$/ 1/">>$DATA/train.txt
find $DATA_TRAIN -name *P_2_* | cut -d '/' -f 7-10 | sed "s/$/ 2/">>$DATA/1.txt
cat $DATA/1.txt>>$DATA/train.txt
rm -rf $DATA/1.txt

echo "Create train.txt..."
rm -rf $DATA/test.txt
find $DATA_TEST -name *P_1_* | cut -d '/' -f 7-10 | sed "s/$/ 1/">>$DATA/test.txt
find $DATA_TEST -name *P_2_* | cut -d '/' -f 7-10 | sed "s/$/ 2/">>$DATA/1.txt
cat $DATA/1.txt>>$DATA/test.txt
rm -rf $DATA/1.txt

echo "Done.."

执行脚本后将会生成 train.txttest.txt 文件,里面存放了数据集的相对路径和标签。上面的语法根据自身情况修改,其中 cut 命令可以设置字符串剪切范围,这里的 7-10 将它剪切为 /cancer 下的相对路径;sed 命令在后面追加类别标签 1、2 等。也可以使用 python 脚本。

3.2 转换为lmdb格式

创建 create_lmdb.sh 脚本,内容如下:

#!/usr/bin/env sh
DATA=examples/cancer

echo "Create train lmdb.."

rm -rf $DATA/img_train_lmdb
build/tools/convert_imageset --shuffle \
    --resize_height=256 --resize_width=256 \
    $DATA/ $DATA/train.txt  $DATA/img_train_lmdb

echo "Create test lmdb.."

rm -rf $DATA/img_test_lmdb
build/tools/convert_imageset --shuffle \
    --resize_height=256 --resize_width=256 \
    $DATA/ $DATA/test.txt  $DATA/img_test_lmdb

echo "done."

执行脚本后会生成 img_train_lmdbimg_test_lmdb 文件夹,里面存放了 lmdb 格式数据。

4 计算均值

图片减去均值再训练,会提高训练速度和精度,所以一般都会有这个操作。同样,caffe 自带有处理程序,可执行程序在 build/tools/compute_image_mean,指定对应的 lmdb 数据集的路径即可生成均值。

创建 create_mean_value.sh 脚本,内容如下:

#!/usr/bin/env sh
DATA=examples/cancer

build/tools/compute_image_mean \
    $DATA/img_train_lmdb \
    $DATA/mean.binaryproto

5 创建模型

本实验直接使用 caffe 自带的模型,修改对应配置即可使用。首先,将其拷贝到 /cancer 目录下:

cp models/bvlc_reference_caffenet/solver.prototxt examples/cancer/
cp models/bvlc_reference_caffenet/train_val.prototxt examples/cancer/
  • 修改 solver.prototxt
net: "examples/cancer/train_val.prototxt"
test_iter: 2
test_interval: 50
base_lr: 0.001
lr_policy: "step"
gamma: 0.1
stepsize: 100
display: 20
max_iter: 500
momentum: 0.9
weight_decay: 0.005
solver_mode: GPU

其中,net 改成了当前路径下 train_val.prototxt 的路径,另外还可以更改步长、学习率等。

  • 修改 train_val.prototxt
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: true
    crop_size: 227
    mean_file: "examples/cancer/mean.binaryproto"
  }
  data_param {
    source: "examples/cancer/img_train_lmdb"
    batch_size: 256
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {
    mirror: false
    crop_size: 227
    mean_file: "examples/cancer/mean.binaryproto"
  }
  data_param {
    source: "examples/cancer/img_train_lmdb"
    batch_size: 50
    backend: LMDB
  }
}

其中,mean_file 和 source 改成了当前文件夹的路径。

6 运行

创建 start_train.sh 脚本,内容如下:

#!/usr/bin/env sh

build/tools/caffe train -solver examples/cancer/solver.prototxt

然后在 caffe 根目录下执行该脚本即可开始训练。训练完毕后,将会在 /cancer 目下下生成训练的模型:

solver_iter_500.caffemodel
solver_iter_500.solverstate
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值