人脸属性多任务学习

2019-05-09  本文已影响0人  LuDon

人脸属性多任务学习

基本步骤:
1、使用人脸检测方法,将输入图像中的人脸检测出来;
2、将检测出的人,经过几层深度分离卷积进行特征提取,并下采样到原来图像的1/16大小的特征图;
3、将得到的特征图与前面几个不同尺寸的特征图连接起来,作为不同任务的输入;
4、每个属性任务的输入首先经过一个注意力机制,以专注于不同任务的特征;
5、使用GlobalAveragePooling代替传统的全连接层,进行不同任务的输出。

基于mobilenet框架搭建人脸属性多任务学习

1、mobilenet框架复习

深度可分离卷积网络介绍可参考
使用深度可分离卷积代替传统的卷积层,从而减少参数。深度可分离卷积:把标准的卷积分解成深度卷积和逐点卷积,这么做的好处是可以大幅度降低参数量和计算量。分解示意图如下:

深度可分离卷积

2、注意力机制

注意力机制相关论文可参考论文《Residual Attention Networks for Image Classification》的阅读笔记。

计算机视觉中的注意力机制的基本思想就是让系统学会注意力----能够忽略无关信息而关注重点信息。举个例子,生活中我们坐在咖啡店玩手机,如果注意力放在自己的手机上,基本上完全不知道外界在说什么东西,但是如果你恰好听到一个人说话,眼睛离开手机,开始讲注意力集中到那个人的声音上,你就能听清楚谈话的内容了。

在深度学习发展的今天,搭建能够具备注意力机制的神经网络开始显得很重要,一方面是这种神经网络能够自主学习注意力机制,另一方面则是注意力机制能够反过来帮助我们去理解神经网络看到的世界。

注意力机制在计算机视觉中的作用:

GlobalAveragePooling

Global Average Pooling(简称GAP,全局池化层)技术最早提出是在这篇论文(第3.2节)中,被认为是可以替代全连接层的一种新技术。在keras发布的经典模型中,可以看到不少模型甚至抛弃了全连接层,转而使用GAP,而在支持迁移学习方面,各个模型几乎都支持使用Global Average Pooling和Global Max Pooling(GMP)。

GAP简单的说,就是在卷积层之后使用GAP代替FC全连接层。这样做有两恶搞优点:

GAP的工作原理如下图所示。

GAP的工作原理
如图所示,特征图为,经过GAP转化之后变成了的输出值,也就是说每一个通道的的feature被平均化为一个值。GAP的具体代码如下:
class GlobalAveragePooling2D(GlobalPooling2D):
  """Global average pooling operation for spatial data.
  Arguments:
      data_format: A string, one of `channels_last` (default) or `channels_first`
  Output shape:
      2D tensor with shape: `(batch_size, channels)`
  """
  def call(self, inputs):
    if self.data_format == 'channels_last':
      return backend.mean(inputs, axis=[1, 2])
    else:
      return backend.mean(inputs, axis=[2, 3])

总结

参考文献

[1] https://www.jianshu.com/p/78381b68a531
[2] Residual Attention Networks for Image Classification
[3] NetworkInNetwork

上一篇下一篇

猜你喜欢

热点阅读