首页 > 学院 > 开发设计 > 正文

利用caffe训练网络的步骤

2019-11-08 00:35:37
字体:
来源:转载
供稿:网友

0:将图片设置好标号(从0开始的连续自然数)

1:首先需要将图片转换成需要的数据格式

#!/usr/bin/env sh# Create the imagenet lmdb inputs# N.B. set the path to the imagenet train + val data dirs# EXAMPLE=examples/imagenet# DATA=data/ilsvrc12TOOLS=build/tools# TRAIN_DATA_ROOT=/path/to/imagenet/train/# VAL_DATA_ROOT=/path/to/imagenet/val/TRAIN_DATA_ROOT=/examples/jb/train/VAL_DATA_ROOT=/examples/jb//val/LABEL_ROOT=/examples/jbSAVE_DATA_ROOT=/examples/jb/data# Set RESIZE=true to resize the images to 256x256. Leave as false if images have# already been resized using another tool.# RESIZE=falseRESIZE=trueif $RESIZE; then  RESIZE_HEIGHT=32  RESIZE_WIDTH=32else  RESIZE_HEIGHT=0  RESIZE_WIDTH=0fiif [ ! -d "$TRAIN_DATA_ROOT" ]; then  echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"  echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" /       "where the ImageNet training data is stored."  exit 1fiif [ ! -d "$VAL_DATA_ROOT" ]; then  echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"  echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" /       "where the ImageNet validation data is stored."  exit 1fiecho "Creating train lmdb..."GLOG_logtostderr=1 $TOOLS/convert_imageset /    --resize_height=$RESIZE_HEIGHT /    --resize_width=$RESIZE_WIDTH /    --shuffle /    $TRAIN_DATA_ROOT /    $LABEL_ROOT/train.txt /    $SAVE_DATA_ROOT/train_lmdbecho "Creating val lmdb..."GLOG_logtostderr=1 $TOOLS/convert_imageset /    --resize_height=$RESIZE_HEIGHT /    --resize_width=$RESIZE_WIDTH /    --shuffle /    $VAL_DATA_ROOT /    $LABEL_ROOT/val.txt /    $SAVE_DATA_ROOT/val_lmdbecho "Done."2:计算训练样本的均值(彩色图时需要)

#!/usr/bin/env sh# Compute the mean image from the imagenet training leveldb# N.B. this is available in data/ilsvrc12./build/tools/compute_image_mean examples/jb/data/train_lmdb /  examples/jb/data/image_mean.binaryPRotoecho "Done."3:定义好网络的结构

name: "AlexNet"layers {  name: "data"  type: DATA  top: "data"  top: "label"  data_param {    source: "examples/jb/data/train_lmdb"    backend: LMDB    batch_size: 256  }  transform_param {    crop_size: 227    mean_file: "examples/jb/data/image_mean.binaryproto"    mirror: true  }  include: { phase: TRAIN }}layers {  name: "data"  type: DATA  top: "data"  top: "label"  data_param {    source: "examples/jb/data/val_lmdb"    backend: LMDB    batch_size: 50  }  transform_param {    crop_size: 227    mean_file: "examples/jb/data/image_mean.binaryproto"    mirror: false  }  include: { phase: TEST }}layers {  name: "conv1"  type: CONVOLUTION  bottom: "data"  top: "conv1"  blobs_lr: 1  blobs_lr: 2  weight_decay: 1  weight_decay: 0  convolution_param {    num_output: 64    kernel_size: 5    stride: 1    weight_filler {      type: "gaussian"      std: 0.01    }    bias_filler {      type: "constant"      value: 0    }  }}layers {  name: "relu1"  type: RELU  bottom: "conv1"  top: "conv1"}layers {  name: "norm1"  type: LRN  bottom: "conv1"  top: "norm1"  lrn_param {    local_size: 9    alpha: 0.0001    beta: 0.75  }}layers {  name: "pool1"  type: POOLING  bottom: "norm1"  top: "pool1"  pooling_param {    pool: MAX    kernel_size: 3    stride: 2  }}layers {  name: "conv2"  type: CONVOLUTION  bottom: "pool1"  top: "conv2"  blobs_lr: 1  blobs_lr: 2  weight_decay: 1  weight_decay: 0  convolution_param {    num_output: 64    pad: 2    kernel_size: 5    group: 2    weight_filler {      type: "gaussian"      std: 0.01    }    bias_filler {      type: "constant"      value: 0.1    }  }}layers {  name: "relu2"  type: RELU  bottom: "conv2"  top: "conv2"}layers {  name: "norm2"  type: LRN  bottom: "conv2"  top: "norm2"  lrn_param {    local_size: 9
#!/usr/bin/env shecho "begin to train the net!"./build/tools/caffe train /    --solver=examples/jb/solver.prototxtecho "the net is finish"alpha: 0.0001 beta: 0.75 }}layers { name: "pool2" type: POOLING bottom: "norm2" top: "pool2" pooling_param { pool: MAX kernel_size: 3 stride: 2 }}layers { name: "conv3" type: CONVOLUTION bottom: "pool2" top: "conv3" blobs_lr: 1 blobs_lr: 2 weight_decay: 1 weight_decay: 0 convolution_param { num_output: 64 pad: 1
#!/usr/bin/env shecho "begin to train the net!"./build/tools/caffe train /    --solver=examples/jb/solver.prototxtecho "the net is finish"kernel_size: 3 weight_filler { type: "gaussian" std: 0.01 } bias_filler { type: "constant" value: 0 } }}layers { name: "relu3" type: RELU bottom: "conv3" top: "conv3"}layers { name: "conv4" type: CONVOLUTION bottom: "conv3" top: "conv4" blobs_lr: 1 blobs_lr: 2 weight_decay: 1 weight_decay: 0 convolution_param { num_output: 32 pad: 1 kernel_size: 3 group: 2 weight_filler { type: "gaussian" std: 0.01 } bias_filler { type: "constant" value: 0.1 } }}layers { name: "relu4" type: RELU bottom: "conv4" top: "conv4"}layers { name: "fc6" type: INNER_PRODUCT bottom: "conv4" top: "fc6" blobs_lr: 1 blobs_lr: 2 weight_decay: 1 weight_decay: 0 inner_product_param { num_output: 43 weight_filler { type: "gaussian" std: 0.005 } bias_filler { type: "constant" value: 0.1 } }}layers { name: "relu6" type: RELU bottom: "fc6" top: "fc6"}layers { name: "accuracy" type: ACCURACY bottom: "fc6" bottom: "label" top: "accuracy" include: { phase: TEST }}layers { name: "loss" type: SOFTMAX_LOSS bottom: "fc6" bottom: "label" top: "loss"}

4:定义好sover文件

net: "examples/jb/train_val.prototxt"test_iter: 1000test_interval: 1000base_lr: 0.01lr_policy: "step"gamma: 0.1stepsize: 100000display: 20max_iter: 450000momentum: 0.9weight_decay: 0.0005snapshot: 10000snapshot_prefix: "examples/jb/models/caffe_alexnet_train"solver_mode: GPU5:训练网络

#!/usr/bin/env shecho "begin to train the net!"./build/tools/caffe train /    --solver=examples/jb/solver.prototxtecho "the net is finish"

这样就完成了网络的整个训练过程,之后可以利用这个模型进行测试。

参考博客:http://blog.csdn.net/hebustkyl/article/details/45534219


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表