caffe:训练自己的图片

本文详细介绍了使用Caffe深度学习框架进行图像分类任务的具体步骤,包括数据准备、转换为LMDB格式、计算均值、创建模型及配置文件,并解决了训练过程中常见的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.建立好自己的文件夹如图所示,总文件夹中包括train和test两个文件夹,train和test文件夹下又包含两个文件夹,cat和dog文件夹,如图所示


输入ls train/cat/ | sed "s:^:cat/:" |sed "s:$: 0:" >>train.txt,将cat的图片信息就会输入到TXT文件中,会看到生成的train.txt

然后输入ls train/dog/ | sed "s:^:dog/:" |sed "s:$: 1:" >>train.txt,将dog的图片信息写入到train.txt中。整个训练的图片的信息输入完成。


同理,输入测试集的图片的信息ls test/cat/ | sed "s:^:cat/:" |sed "s:$: 0:" >>t_test.txt,ls test/dog/ | sed "s:^:dog/:" |sed "s:$: 1:" >>t_test.txt。训练集和测试集的图片信息输入完成。

2.将图片数据转化为LMDB数据

在data文件夹下建立一个lmdb文件夹,然后将caffe-master下的imagenet文件夹的create_imagenet.sh复制到该文件夹下进行修改

#!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train + val data dirs
set -e

EXAMPLE=lmdb  #根据终端命令确定,data/lmdb
DATA=data_test #即生成的文件列表.txt文件所在文件夹  
TOOLS=/home/wuqingqing/caffe-master/build/tools

TRAIN_DATA_ROOT=/home/wuqingqing/data/data_test/train/  #待处理的训练数据,必须是绝对路径 
VAL_DATA_ROOT=/home/wuqingqing/data/data_test/test/    #待处理的测试数据 

# Set RESIZE=true to resize the images to 256x256. Leave as false if images have
# already been resized using another tool.
RESIZE=false
if $RESIZE; then
  RESIZE_HEIGHT=256
  RESIZE_WIDTH=256
else
  RESIZE_HEIGHT=0
  RESIZE_WIDTH=0
fi

if [ ! -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 1
fi

if [ ! -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 1
fi

echo "Creating train lmdb..."

GLOG_logtostderr=1 $TOOLS/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    $TRAIN_DATA_ROOT \
    $DATA/train.txt \
    $EXAMPLE/train_lmdb

echo "Creating val lmdb..."

GLOG_logtostderr=1 $TOOLS/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    $VAL_DATA_ROOT \
    $DATA/test.txt \
    $EXAMPLE/test_lmdb

echo "Done."
返回到data文件下,执行终端命令./lmdb/create_imagenet.sh。就可以看到lmdb下面生成两个lmdb文件夹






3.计算均值并保存

在data文件加下打开终端命令,输入sudo /home/wuqingqing/caffe-master/build/tools/compute_image_mean lmdb/train_lmdb lmdb/train_lmdb/mean.binaryproto
compute_image_mean带两个参数,第一个参数时lmdb训练数据位置,第二个参数设定均值文件的名字及保存路径。

    运行成功后,如下图所示

会在lmdb文件夹下看到mean.binaryproto

可能出现的错误

原因是:图片没有同一大小,把所有的图片都大小一致

4创建模型并编写配置文件

模型就用程序自带的caffenet模型,位置在 models/bvlc_reference_caffenet/文件夹下, 将需要的两个配置文件,复制到lmdb文件夹内

在data文件夹下执行命令 sudo cp /home/wuqingqing/caffe-master/models/bvlc_reference_caffenet/solver.prototxt lmdb/

修改其中的solver.prototxt   执行命令 sudo vi lmdb/solver.prototxt

net: "lmdb/train_val.prototxt"
test_iter: 2
test_interval: 50
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100
display: 20
max_iter: 500
momentum: 0.9
weight_decay: 0.0005
solver_mode: CPU
在data文件夹下执行命令sudo cp /home/wuqingqing/caffe-master/models/bvlc_reference_caffenet/train_val.prototxt lmdb/
修改其中的train_val.prototxt  执行命令 sudo vi lmdb/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: "lmdb/mean.binaryproto"
  }  
  data_param {
    source: "lmdb/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: "lmdb/mean.binaryproto"
  } 
  data_param {
    source: "lmdb/test_lmdb"
    batch_size: 50
    backend: LMDB
  }

实际上就是修改两个data layer的mean_file和source这两个地方,其它都没有变化 。

五、训练和测试

如果前面都没有问题,数据准备好了,配置文件也配置好了,这一步就比较简单了。

输入:sudo /home/wuqingqing/caffe-master/build/tools/caffe train --solver=lmdb/solver.prototxt

训练时出现的错误如下:

1.一直出现“Restarting data prefetching from start”,修改train_val.prototxt中参数,

data_param {
    source: "lmdb/train_lmdb"
    batch_size: 256
    backend: LMDB
  } 
训练集太笑了,将256改成50就可以了

2.出现Check failed:datum_height >= crop_size (220 vs. 227)错误

查看:http://www.cnblogs.com/hust-yingjie/p/6526370.html

最后跑了两个多小时,结果才出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值