caffe整体架构说明
纯粹的C++/CUDA架构,支持命令行,Python和MATLAB接口,可在CPU和GPU间无缝切换;模型的定义与最优化设置以及预训练的权重等都是以文本形式给出,
Caffe层定义由层属性和层参数组成
Blob 是用以存储数据的4维数组
对于数据:Number*Channel*height*width
对于卷积权重:Output*Input*Height*width
对于卷积偏置:Output*1*1*1
Caffe生成的数据分为2种格式:Lmdb和Leveldb都是键值对,lmdb的速度比leveldb快10%-15%,lmdb允许多种训练模型同时读取同一组数据集,lmdb是Caffe默认的数据集生成格式。
预处理图像的leveldb构建
输入一批图像和label 输出leveldb
指定包含:
convert_imageset(构建leveldb的可运行程序)
train/ 图像
label.txt
输出的leveldb文件夹的名字
CPU/GPUCNN网络配置文件
Imagenet_solver.prototxt 包含全局参数的配置文件
Imagenet.prototxt 包含训练网络的配置文件
Imagenet_val.prototxt 包含测试网络的配置文件
.prototxt 配置文件
.caffemodel
架构:
tools各种工具 用户不用直接使用主要有caffe、compute_image_mean、convert_imageset、extract_features、finetune_net、net_speed_benchmark、test_net、train_net、upgrade_net_proto_binary、upgrade_net_proto_text、upgrade_solver_proto_text
caffe实验步骤
solver.prototxt
各种设置,设置网络结构,迭代次数,学习率,最大迭代次数,动量因子,快照次数
train_val.prototxt
主要结构:数据层,对数据设定预处理,设定数据的来源
caffe实践
1.根据训练集和测试集生成lmdb
/data1/caffe/build/tools/convert_imageset \
/data1/image_abc/ /data1/deepImage/ft_TRAIN.txt \
/data1/deepImage/ft_train_lmdb \
--shuffle=true
/data1/caffe/build/tools/convert_imageset \
/data1/image_abc/ /data1/deepImage/ft_TEST.txt \
/data1/deepImage/ft_test_lmdb \
--shuffle=true
2.生成mean文件
`
/data1/caffe/build/tools/compute_image_mean \
/data1/deepImage/img_train_lmdb \
mean_ft.binaryproto
compute_image_mean.cpp:79] Check failed: size_in_datum == data_size (3812940 vs. 858240) Incorrect data field size 3812940
解决方案 图片需要resize到同样大小
重新生成lmdb数据集和mean文件
/data1/caffe/build/tools/convert_imageset \
/data1/image_abc/ /data1/deepImage/ft_TRAIN.txt \
/data1/deepImage/ft_train_lmdb \
–resize_height=256 \
–resize_width=256 \
–shuffle=true
/data1/caffe/build/tools/convert_imageset \
/data1/image_abc/ /data1/deepImage/ft_TEST.txt \
/data1/deepImage/ft_test_lmdb \
–resize_height=256 \
–resize_width=256 \
–shuffle=true
/data1/caffe/build/tools/compute_image_mean \
/data1/deepImage/img_train_lmdb \
mean_ft.binaryproto
3.训练
介绍两个常见的数据类型,1.lmdb 2.image
lmdb类型,直接使用上面生成的lmdb文件,粗体部分为需要注意的地方
layer {
name: “data”
type: “Data”
top: “data”
top: “label”
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 227
mean_file: “/data1/deepImage/mean_finetune.binaryproto”
}
data_param {
source: “/data1/deepImage/TRAIN.db”
batch_size: 500
backend: LMDB
}
}
image类型,不需要生成lmdb,根据train.txt直接读取文件,设置高宽
layer {
name: “data”
type: “ImageData”
top: “data”
top: “label”
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 227
mean_file: “/data1/deepImage/mean_finetune.binaryproto”
}
image_data_param {
source: “/data1/deepImage/train.txt”
batch_size: 500
new_height:256
new_width:256
}
}
/data1/caffe/build/tools/caffe train -solver=solver_finetune.prototxt -weights=initModel.caffemodel
测试
/data1/caffe/build/tools/caffe test -model=train_val.prototxt -weights=models/disc/caffe_alexnet_train_iter_370000.caffemodel -gpu=1
`