您的位置:首页 > 其它

在自己的数据集上微调Light CNN

2017-11-29 20:16 323 查看

遇到的坑

light cnn 加载的是灰度图,所以在 data 层要添加参数:

is_color:false

示例如下:

layer {
name: "data"
type: "ImageData"
top: "data"
top: "label"
image_data_param{
source: "/home/code/caffe-master/lightCNNFace/val.txt"
batch_size: 20
is_color:false
}
transform_param {
scale: 0.00390625
crop_size: 128
mirror: false
}
include: { phase: TEST }
}


1.编写微调的网络结构lightcnn_train_test.prototxt

2.准备训练图像数据,分成训练集和验证集合

注意 要将图像灰度化

3.运行训练脚本文件

code/caffe-master/build/tools/caffe train \
--solver=code/caffe-master/lightCNNFace/LCNN_solver.prototxt \
--weights=code/caffe-master/lightCNNFace/LightenedCNN_B.caffemodel -gpu=0


4.微调时报错

Cannot copy param 0 weights from layer 'conv1'; shape mismatch.  Source param shape is 96 1 5 5 (2400); target param shape is 96 3 5 5 (7200). To learn this layer's parameters from scratch rather than copying from a saved net, rename the layer


5.附 lightcnn_train_test.prototxt

有过微调light cnn的网友吗?求解决方案,另外 如何进一步减小模型大小?

name: "DeepFace_set003_net"

layer {
name: "data"
type:"ImageData"
top: "data"
top: "label"
image_data_param{
source: "/home/himon/code/caffe-master/lightCNNFace/train.txt"
batch_size: 20
shuffle: true
}
transform_param {
scale: 0.00390625
crop_size: 128
mirror: true

}
include: { phase: TRAIN }
}

layer {
name: "data"
type: "ImageData"
top: "data"
top: "label"
image_data_param{
source: "/home/himon/code/caffe-master/lightCNNFace/val.txt"
batch_size: 20
}
transform_param {
scale: 0.00390625
crop_size: 128
mirror: false
}
include: { phase: TEST }
}

layer{
name: "conv1"
type: "Convolution"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 96
kernel_size: 5
stride: 1
pad: 2
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0.1
}
}
bottom: "data"
top: "conv1"
}

layer{
name: "slice1"
type:"Slice"
slice_param {
slice_dim: 1
}
bottom: "conv1"
top: "slice1_1"
top: "slice1_2"
}
layer{
name: "etlwise1"
type: "Eltwise"
bottom: "slice1_1"
bottom: "slice1_2"
top: "eltwise1"
eltwise_param {
operation: MAX
}
}
layer{
name: "pool1"
type: "Pooling"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
bottom: "eltwise1"
top: "pool1"
}

layer{
name: "conv2a"
type: "Convolution"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 96
kernel_size: 1
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0.1
}
}
bottom: "pool1"
top: "conv2a"
}
layer{
name: "slice2a"
type:"Slice"
slice_param {
slice_dim: 1
}
bottom: "conv2a"
top: "slice2a_1"
top: "slice2a_2"
}
layer{
name: "etlwise2a"
type: "Eltwise"
bottom: "slice2a_1"
bottom: "slice2a_2"
top: "eltwise2a"
eltwise_param {
operation: MAX
}
}

layer{
name: "conv2"
type: "Convolution"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 192
kernel_size: 3
stride: 1
pad: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0.1
}
}
bottom: "eltwise2a"
top: "conv2"
}

layer{
name: "slice2"
type:"Slice"
slice_param {
slice_dim: 1
}
bottom: "conv2"
top: "slice2_1"
top: "slice2_2"
}
layer{
name: "etlwise2"
type: "Eltwise"
bottom: "slice2_1"
bottom: "slice2_2"
top: "eltwise2"
eltwise_param {
operation: MAX
}
}
layer{
name: "pool2"
type: "Pooling"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
bottom: "eltwise2"
top: "pool2"
}

layer{
name: "conv3a"
type: "Convolution"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 192
kernel_size: 1
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0.1
}
}
bottom: "pool2"
top: "conv3a"
}
layer{
name: "slice3a"
type:"Slice"
slice_param {
slice_dim: 1
}
bottom: "conv3a"
top: "slice3a_1"
top: "slice3a_2"
}
layer{
name: "etlwise3a"
type: "Eltwise"
bottom: "slice3a_1"
bottom: "slice3a_2"
top: "eltwise3a"
eltwise_param {
operation: MAX
}
}

layer{
name: "conv3"
type: "Convolution"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 384
kernel_size: 3
stride: 1
pad: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0.1
}
}
bottom: "eltwise3a"
top: "conv3"
}

layer{
name: "slice3"
type:"Slice"
slice_param {
slice_dim: 1
}
bottom: "conv3"
top: "slice3_1"
top: "slice3_2"
}
layer{
name: "etlwise3"
type: "Eltwise"
bottom: "slice3_1"
bottom: "slice3_2"
top: "eltwise3"
eltwise_param {
operation: MAX
}
}
layer{
name: "pool3"
type: "Pooling"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
bottom: "eltwise3"
top: "pool3"
}

layer{
name: "conv4a"
type: "Convolution"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param{
num_output: 384
kernel_size: 1
stride: 1
weight_filler{
type:"xavier"
}
bias_filler{
type: "constant"
value: 0.1
}
}
bottom: "pool3"
top: "conv4a"
}
layer{
name: "slice4a"
type:"Slice"
slice_param {
slice_dim: 1
}
bottom: "conv4a"
top: "slice4a_1"
top: "slice4a_2"
}
layer{
name: "etlwise4a"
type: "Eltwise"
bottom: "slice4a_1"
bottom: "slice4a_2"
top: "eltwise4a"
eltwise_param {
operation: MAX
}
}
layer{
name: "conv4"
type: "Convolution"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param{
num_output: 256
kernel_size: 3
stride: 1
pad: 1
weight_filler{
type:"xavier"
}
bias_filler{
type: "constant"
value: 0.1
}
}
bottom: "eltwise4a"
top: "conv4"
}

layer{
name: "slice4"
type:"Slice"
slice_param {
slice_dim: 1
}
bottom: "conv4"
top: "slice4_1"
top: "slice4_2"
}
layer{
name: "etlwise4"
type: "Eltwise"
bottom: "slice4_1"
bottom: "slice4_2"
top: "eltwise4"
eltwise_param {
operation: MAX
}
}

layer{
name: "conv5a"
type: "Convolution"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param{
num_output: 256
kernel_size: 1
stride: 1
weight_filler{
type:"xavier"
}
bias_filler{
type: "constant"
value: 0.1
}
}
bottom: "eltwise4"
top: "conv5a"
}
layer{
name: "slice5a"
type:"Slice"
slice_param {
slice_dim: 1
}
bottom: "conv5a"
top: "slice5a_1"
top: "slice5a_2"
}
layer{
name: "etlwise5a"
type: "Eltwise"
bottom: "slice5a_1"
bottom: "slice5a_2"
top: "eltwise5a"
eltwise_param {
operation: MAX
}
}
layer{
name: "conv5"
type: "Convolution"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param{
num_output: 256
kernel_size: 3
stride: 1
pad: 1
weight_filler{
type:"xavier"
}
bias_filler{
type: "constant"
value: 0.1
}
}
bottom: "eltwise5a"
top: "conv5"
}

layer{
name: "slice5"
type:"Slice"
slice_param {
slice_dim: 1
}
bottom: "conv5"
top: "slice5_1"
top: "slice5_2"
}
layer{
name: "etlwise5"
type: "Eltwise"
bottom: "slice5_1"
bottom: "slice5_2"
top: "eltwise5"
eltwise_param {
operation: MAX
}
}

layer{
name: "pool4"
type: "Pooling"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
bottom: "eltwise5"
top: "pool4"
}

layer{
name: "fc1"
type: "InnerProduct"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
inner_product_param {
num_output: 512
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0.1
}
}
bottom: "pool4"
top: "fc1"
}
layer{
name: "slice_fc1"
type:"Slice"
slice_param {
slice_dim: 1
}
bottom: "fc1"
top: "slice_fc1_1"
top: "slice_fc1_2"
}
layer{
name: "etlwise_fc1"
type: "Eltwise"
bottom: "slice_fc1_1"
bottom: "slice_fc1_2"
top: "eltwise_fc1"
eltwise_param {
operation: MAX
}
}

layer{
name: "drop1"
type: "Dropout"
dropout_param{
dropout_ratio: 0.7
}
bottom: "eltwise_fc1"
top: "eltwise_fc1"
}

layer{
name: "fnc2"
type: "InnerProduct"

inner_product_param{
num_output: 50
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0.1
}
}
bottom: "eltwise_fc1"
top: "fnc2"
}

layer {
name: "accuracy"
type: "Accuracy"
bottom: "fnc2"
bottom: "label"
top: "accuracy"
include: { phase: TEST }
}

layer {
name: "softmaxloss"
type: "SoftmaxWithLoss"
bottom: "fnc2"
bottom: "label"
top: "loss"
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息