人脸特征点检测(三)基于神经网络的方法:VGG,Mobilenet-v2尝试

本篇主要尝试着用CNN做特征点检测。主要尝试VGG, MobilenetV2的结构。
代码https://github.com/goodluckcwl/Face-alignment-mobilenet-v2

VGG尝试

VGG的结构包含两个卷积加一个ReLU。

网络结构设计

网络输入大小确定为 70×60 70 × 60 ,这个大小的输入设计几个卷积层就足够了。设计的网络结构如下:

InputOperatorchannelsstridepadkernel size
70×60×3 70 × 60 × 3 Conv2d6411 3×3 3 × 3
70×60×64 70 × 60 × 64 Conv2d6411 3×3 3 × 3
70×60×64 70 × 60 × 64 Pooling-2- 2×2 2 × 2
35×30×64 35 × 30 × 64 Conv2d12811 3×3 3 × 3
35×30×128 35 × 30 × 128 Conv2d12811 3×3 3 × 3
35×30×128 35 × 30 × 128 Pooling-2- 2×2 2 × 2
18×15×128 18 × 15 × 128 Conv2d19211 3×3 3 × 3
18×15×192 18 × 15 × 192 Conv2d19211 3×3 3 × 3
18×15×192 18 × 15 × 192 Pooling-2- 2×2 2 × 2
9×8×192 9 × 8 × 192 Conv2d25610 3×3 3 × 3
8×7×256 8 × 7 × 256 Inner Product256---
256 256 Dropout----
256 256 Inner Product136---

Dropout比率设置

分别尝试了0~1之间的dropout比率,最佳值为0.3。

目标函数

用相对于瞳距归一化的欧式距离损失函数,可以收敛。主要的trick是图片要扩增,以及学习率要调整。

最终示例图片如下:
这里写图片描述
这个结果其实不是特别好,有比较多的改进的地方。

MobileNetv2尝试

MobileNetv2构造了一个线性嵌入层的逆残差模块:首先把低维表达映射到高维表达,用depthwise卷积来提取特征,最后再把特征通过一个线性的卷积层投影回低维表达。通过这种方式减少了参数。

网络结构设计

决定采用MobileNetv2,具体的结构设计经过实验,结合输入的图片的大小(采用64*64的输入),采用如下的结构:

InputOperatortchannelsnstride
642×3 64 2 × 3 conv2d-1612
322×16 32 2 × 16 bottleneck62412
162×24 16 2 × 24 conv2d62411
162×24 16 2 × 24 conv2d63212
82×32 8 2 × 32 conv2d63211
82×32 8 2 × 32 conv2d66412
42×64 4 2 × 64 conv2d66411
42×64 4 2 × 64 inner product-2001-
200 200 inner product-2001-
200 200 inner product-501-
50 50 inner product-1361-

其中,每个卷积模块由下面几部分组成:

  • Conv层
  • BatchNorm层
  • Scale层
  • LeakyReLU层
    最后的全连接层映射到低维嵌入(50),再映射回landmark空间。

损失函数

损失函数采用标准的欧几里得损失函数,或者以瞳距归一化的欧几里得函数。

训练数据

  • 300W
  • Menpo

数据扩增

  • 随机镜像。
  • 随机旋转。从-30~30随机采样旋转的角度。
  • 随机平移。
  • 随机缩放。
  • 添加高斯噪声。

本文的代码已在github上,就不多说了。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值