Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练.docx

上传人:b****6 文档编号:5617320 上传时间:2022-12-29 格式:DOCX 页数:15 大小:45.14KB
下载 相关 举报
Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练.docx_第1页
第1页 / 共15页
Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练.docx_第2页
第2页 / 共15页
Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练.docx_第3页
第3页 / 共15页
Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练.docx_第4页
第4页 / 共15页
Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练.docx

《Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练.docx》由会员分享,可在线阅读,更多相关《Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练.docx(15页珍藏版)》请在冰豆网上搜索。

Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练.docx

Windows下使用caffe进行VGG人脸识别深度神经网络模型的微调训练

Windows下采用caffe进行

VGG人脸识别深度神经网络模型的微调训练

2016-8-29

本文介绍在Windows环境下,采用采用caffe进行VGG人脸识别深度神经网络模型的fine-tune(微调训练)。

运行环境为:

windows7+vs2013+matlab2015a+caffe(微软版)。

1.代码和文件准备 

代码caffe:

vgg-face模型:

http:

//www.robots.ox.ac.uk/~vgg/software/vgg_face/。

该网页包括caffe,matconvnet,torch三个版本,下载caffe版本即可。

2.数据准备 

收集人脸图像数据及对应的标签数据,vgg处理的图片的尺寸是224*224,因此不符合尺寸要求的要对尺寸进行修正。

然后采用caffe中的convert_imageset工具将人脸图像及对应的标签转换为leveldb格式的库文件。

并采用caffe中的compute_image_mean工具计算leveldb库文件中所包含人脸的均值文件face_mean.binaryproto。

将训练数据和评估数据的库文件分别放置在下述位置:

J:

/caffe-windows/vggface_mycmd/vggface_train_leveldb

J:

/caffe-windows/vggface_mycmd/vggface_val_leveldb

3.训练网络 

第三部分就开始训练网络了,首先需要到vggface的官网上下载vggface的caffe模型(官网还包括matconvnet模型,试过finetuning太慢了,torch没有试过),下载好了,就会有两个文件,一个是VGG_FACE_deploy.prototxt,一个是VGG_FACE.caffemodel(深度网络的模型文件)。

 

先建立一个.prototxt文件,命名为vggface_train_test.prototx(深度网络的模型框架定义文件)即可,把之前VGG_FACE_deploy.prototxt的所有的复制过来,然后加入数据层。

VGG_FACE.caffemodel(深度网络的模型文件)与vggface_train_test.prototx(深度网络的模型框架定义文件)要相配套。

(1).vggface_train_test.prototxt

name:

"VGG_ILSVRC_16_layers"

layers{

name:

"data"

type:

DATA

include{

phase:

TRAIN

}

transform_param{

crop_size:

224

mean_value:

104

mean_value:

117

mean_value:

123

mirror:

true

}

data_param{

source:

"J:

/caffe-windows/vggface_mycmd/vggface_train_leveldb"

batch_size:

3

backend:

LEVELDB

}

top:

"data"

top:

"label"

}

layers{

name:

"data"

type:

DATA

include{

phase:

TEST

}

transform_param{

crop_size:

224

mean_value:

104

mean_value:

117

mean_value:

123

mirror:

false

}

data_param{

source:

"vggface_mycmd/vggface_val_leveldb"

batch_size:

3

backend:

LEVELDB

}

top:

"data"

top:

"label"

}

layers{

bottom:

"data"

top:

"conv1_1"

name:

"conv1_1"

type:

CONVOLUTION

convolution_param{

num_output:

64

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv1_1"

top:

"conv1_1"

name:

"relu1_1"

type:

RELU

}

layers{

bottom:

"conv1_1"

top:

"conv1_2"

name:

"conv1_2"

type:

CONVOLUTION

convolution_param{

num_output:

64

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv1_2"

top:

"conv1_2"

name:

"relu1_2"

type:

RELU

}

layers{

bottom:

"conv1_2"

top:

"pool1"

name:

"pool1"

type:

POOLING

pooling_param{

pool:

MAX

kernel_size:

2

stride:

2

}

}

layers{

bottom:

"pool1"

top:

"conv2_1"

name:

"conv2_1"

type:

CONVOLUTION

convolution_param{

num_output:

128

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv2_1"

top:

"conv2_1"

name:

"relu2_1"

type:

RELU

}

layers{

bottom:

"conv2_1"

top:

"conv2_2"

name:

"conv2_2"

type:

CONVOLUTION

convolution_param{

num_output:

128

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv2_2"

top:

"conv2_2"

name:

"relu2_2"

type:

RELU

}

layers{

bottom:

"conv2_2"

top:

"pool2"

name:

"pool2"

type:

POOLING

pooling_param{

pool:

MAX

kernel_size:

2

stride:

2

}

}

layers{

bottom:

"pool2"

top:

"conv3_1"

name:

"conv3_1"

type:

CONVOLUTION

convolution_param{

num_output:

256

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv3_1"

top:

"conv3_1"

name:

"relu3_1"

type:

RELU

}

layers{

bottom:

"conv3_1"

top:

"conv3_2"

name:

"conv3_2"

type:

CONVOLUTION

convolution_param{

num_output:

256

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv3_2"

top:

"conv3_2"

name:

"relu3_2"

type:

RELU

}

layers{

bottom:

"conv3_2"

top:

"conv3_3"

name:

"conv3_3"

type:

CONVOLUTION

convolution_param{

num_output:

256

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv3_3"

top:

"conv3_3"

name:

"relu3_3"

type:

RELU

}

layers{

bottom:

"conv3_3"

top:

"pool3"

name:

"pool3"

type:

POOLING

pooling_param{

pool:

MAX

kernel_size:

2

stride:

2

}

}

layers{

bottom:

"pool3"

top:

"conv4_1"

name:

"conv4_1"

type:

CONVOLUTION

convolution_param{

num_output:

512

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv4_1"

top:

"conv4_1"

name:

"relu4_1"

type:

RELU

}

layers{

bottom:

"conv4_1"

top:

"conv4_2"

name:

"conv4_2"

type:

CONVOLUTION

convolution_param{

num_output:

512

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv4_2"

top:

"conv4_2"

name:

"relu4_2"

type:

RELU

}

layers{

bottom:

"conv4_2"

top:

"conv4_3"

name:

"conv4_3"

type:

CONVOLUTION

convolution_param{

num_output:

512

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv4_3"

top:

"conv4_3"

name:

"relu4_3"

type:

RELU

}

layers{

bottom:

"conv4_3"

top:

"pool4"

name:

"pool4"

type:

POOLING

pooling_param{

pool:

MAX

kernel_size:

2

stride:

2

}

}

layers{

bottom:

"pool4"

top:

"conv5_1"

name:

"conv5_1"

type:

CONVOLUTION

convolution_param{

num_output:

512

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv5_1"

top:

"conv5_1"

name:

"relu5_1"

type:

RELU

}

layers{

bottom:

"conv5_1"

top:

"conv5_2"

name:

"conv5_2"

type:

CONVOLUTION

convolution_param{

num_output:

512

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv5_2"

top:

"conv5_2"

name:

"relu5_2"

type:

RELU

}

layers{

bottom:

"conv5_2"

top:

"conv5_3"

name:

"conv5_3"

type:

CONVOLUTION

convolution_param{

num_output:

512

pad:

1

kernel_size:

3

}

}

layers{

bottom:

"conv5_3"

top:

"conv5_3"

name:

"relu5_3"

type:

RELU

}

layers{

bottom:

"conv5_3"

top:

"pool5"

name:

"pool5"

type:

POOLING

pooling_param{

pool:

MAX

kernel_size:

2

stride:

2

}

}

layers{

bottom:

"pool5"

top:

"fc6"

name:

"fc6"

type:

INNER_PRODUCT

inner_product_param{

num_output:

4096

}

}

layers{

bottom:

"fc6"

top:

"fc6"

name:

"relu6"

type:

RELU

}

layers{

bottom:

"fc6"

top:

"fc6"

name:

"drop6"

type:

DROPOUT

dropout_param{

dropout_ratio:

0.5

}

}

layers{

bottom:

"fc6"

top:

"fc7"

name:

"fc7"

type:

INNER_PRODUCT

inner_product_param{

num_output:

4096

}

}

layers{

bottom:

"fc7"

top:

"fc7"

name:

"relu7"

type:

RELU

}

layers{

bottom:

"fc7"

top:

"fc7"

name:

"drop7"

type:

DROPOUT

dropout_param{

dropout_ratio:

0.5

}

}

layers{

bottom:

"fc7"

top:

"fnc8"

name:

"fnc8"

type:

INNER_PRODUCT

inner_product_param{

num_output:

6

}

}

layers{

bottom:

"fnc8"

top:

"prob"

name:

"prob"

type:

SOFTMAX

}

所做的修改主要为在原文件的第一个layer之前添加数据层。

拉到文件的最底部,有个num_output:

2622的那一层,这一层主要是概率输出层,就是softmax分类器层。

因为vgg训练这个网络,用了2622个人,所以就是2622,现在可以根据自己的人的个数来设置,我用了6个人,把num_output:

2622改为了num_output:

6,并且把name:

所有的fc8改为了fnc8,即对fc8改名,否则会报错。

好了,现在网络搭建好。

 

另外,还需修改以下内容:

(2).vgg_solver.prototxt

完成vggface_train_test.prototxt模型框架定义文件后,还需要编制一个对神经网络进行微调训练的参数文件VGG_solver.prototxt。

VGG_solver.prototxt代码如下:

net:

"vggface_mycmd/vggface_train_test.prototxt"

test_iter:

500

test_interval:

500

test_initialization:

false

display:

40

average_loss:

40

base_lr:

0.00005

lr_policy:

"step"

stepsize:

320000

gamma:

0.96

max_iter:

1000

momentum:

0.9

weight_decay:

0.0002

snapshot:

200

snapshot_prefix:

"vggface_mycmd/mymodel"

solver_mode:

CPU

(3).编写训练的命令文件

打开windows下的cmd命令窗口,然后进入J:

\caffe-windows\目录,在cmd命令窗口下输入以下命令:

Build\x64\Release\caffe.exetrain-solvervggface_mycmd\vggface_solver.prototxt-weightsvggface_mycmd\VGG_FACE.caffemodel

就可以对VGG_FACE.caffemodel进行微调了。

跑结果的模型也会保存在J:

\caffe-windows\vggface_mycmd\目录下。

上述命令中,如果不包含-weightsvggface_mycmd\VGG_FACE.caffemodel,则进行训练一个全新的深度神经网络来进行人脸识别。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1