赞
踩
众所周知,人脸识别中有一项重要的任务-人脸关键点预测,通过这个环节对齐,才能进行人脸识别,提高人脸识别的准确率。另外,一些活体检测/人脸状态分析也需要利用该方案进行实现。
经典的人脸检测模型MTCNN中具有人脸关键点的预测功能,但其关键预测精度比较差,对于大角度、模糊、遮挡、小尺度等情况的人脸效果下降更加严重。因此我结合openpose的关键点预测模型,自行设计了如下的人脸关键点热图预测模型,经过验证可以很好的实现人脸关键点预测的效果。
由于经典的openpose框架中heatmaps的热图有6个stage进行预测和中间监督,但我按照原始的框架发现到达后面几个stage后,loss基本和前面的stage一致,但多个stage对模型的速度会有影响,因此设计了3个stage和4个stage的版本,这里主要介绍4个stage的版本。
利用netscope可以将设计的网络可视化如下(如果看不清,可以利用我下面提供的proto内容自行验证):
所设计的网络proto文件内容如下:
- name: "landmarks-net"
-
- input: "data"
- input_shape {
- dim: 1
- dim: 3
- dim: 112
- dim: 112
- }
-
- layer {
- name: "conv1_1"
- type: "Convolution"
- bottom: "data"
- top: "conv1_1"
- param {
- lr_mult: 1.0
- decay_mult: 1
- }
- param {
- lr_mult: 2.0
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 1
- kernel_size: 3
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- }
- }
- }
- layer {
- name: "relu1_1"
- type: "ReLU"
- bottom: "conv1_1"
- top: "conv1_1"
- }
- layer {
- name: "conv1_2"
- type: "Convolution"
- bottom: "conv1_1"
- top: "conv1_2"
- param {
- lr_mult: 1.0
- decay_mult: 1
- }
- param {
- lr_mult: 2.0
- decay_mult: 0
- }
- convolution_param {
- num_output: 64
- pad: 1
- kernel_size: 3
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- }
- }
- }
- layer {
- name: "relu1_2"
- type: "ReLU"
- bottom: "conv1_2"
- top: "conv1_2"
- }
- layer {
- name: "pool1_stage1"
- type: "Pooling"
- bottom: "conv1_2"
- top: "pool1_stage1"
- pooling_param {
- pool: MAX
- kernel_size: 2
- stride: 2
- }
- }
- layer {
- name: "conv2_1"
- type: "Convolution"
- bottom: "pool1_stage1"
- top: "conv2_1"
- param {
- lr_mult: 1.0
- decay_mult: 1
- }
- param {
- lr_mult: 2.0
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 1
- kernel_size: 3
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- }
- }
- }
- layer {
- name: "relu2_1"
- type: "ReLU"
- bottom: "conv2_1"
- top: "conv2_1"
- }
- layer {
- name: "conv2_2"
- type: "Convolution"
- bottom: "conv2_1"
- top: "conv2_2"
- param {
- lr_mult: 1.0
- decay_mult: 1
- }
- param {
- lr_mult: 2.0
- decay_mult: 0
- }
- convolution_param {
- num_output: 128
- pad: 1
- kernel_size: 3
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- }
- }
- }
- layer {
- name: "relu2_2"
- type: "ReLU"
- bottom: "conv2_2"
- top: "conv2_2"
- }
- layer {
- name: "pool2_stage1"
- type: "Pooling"
- bottom: "conv2_2"
- top: "pool2_stage1"
- pooling_param {
- pool: MAX
- kernel_size: 2
- stride: 2
- }
- }
- layer {
- name: "conv3_1"
- type: "Convolution"
- bottom: "pool2_stage1"
- top: "conv3_1"
- param {
- lr_mult: 1.0
- decay_mult: 1
- }
- param {
- lr_mult: 2.0
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 1
- kernel_size: 3
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- }
- }
- }
- layer {
- name: "relu3_1"
- type: "ReLU"
- bottom: "conv3_1"
- top: "conv3_1"
- }
- layer {
- name: "conv3_2"
- type: "Convolution"
- bottom: "conv3_1"
- top: "conv3_2"
- param {
- lr_mult: 1.0
- decay_mult: 1
- }
- param {
- lr_mult: 2.0
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 1
- kernel_size: 3
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- }
- }
- }
- layer {
- name: "relu3_2"
- type: "ReLU"
- bottom: "conv3_2"
- top: "conv3_2"
- }
- layer {
- name: "conv3_3"
- type: "Convolution"
- bottom: "conv3_2"
- top: "conv3_3"
- param {
- lr_mult: 1.0
- decay_mult: 1
- }
- param {
- lr_mult: 2.0
- decay_mult: 0
- }
- convolution_param {
- num_output: 256
- pad: 1
- kernel_size: 3
- weight_filler {
- type: "gaussian"
- std: 0.01
- }
- bias_filler {
- type: "constant"
- }
- }
- }
- layer {
- name: "relu3_3"
- type: "ReLU"
- bottom: "conv3_3"
- top: "conv3_3"
- }
- layer {
- name: "conv3_4"
- type:

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。