人脸属性多任务学习
基本步骤:
1、使用人脸检测方法,将输入图像中的人脸检测出来;
2、将检测出的人,经过几层深度分离卷积进行特征提取,并下采样到原来图像的1/16大小的特征图;
3、将得到的特征图与前面几个不同尺寸的特征图连接起来,作为不同任务的输入;
4、每个属性任务的输入首先经过一个注意力机制,以专注于不同任务的特征;
5、使用GlobalAveragePooling代替传统的全连接层,进行不同任务的输出。
基于mobilenet框架搭建人脸属性多任务学习
1、mobilenet框架复习
深度可分离卷积网络介绍可参考
使用深度可分离卷积代替传统的卷积层,从而减少参数。深度可分离卷积:把标准的卷积分解成深度卷积和逐点卷积,这么做的好处是可以大幅度降低参数量和计算量。分解示意图如下:
2、注意力机制
注意力机制相关论文可参考论文《Residual Attention Networks for Image Classification》的阅读笔记。
计算机视觉中的注意力机制的基本思想就是让系统学会注意力----能够忽略无关信息而关注重点信息。举个例子,生活中我们坐在咖啡店玩手机,如果注意力放在自己的手机上,基本上完全不知道外界在说什么东西,但是如果你恰好听到一个人说话,眼睛离开手机,开始讲注意力集中到那个人的声音上,你就能听清楚谈话的内容了。
在深度学习发展的今天,搭建能够具备注意力机制的神经网络开始显得很重要,一方面是这种神经网络能够自主学习注意力机制,另一方面则是注意力机制能够反过来帮助我们去理解神经网络看到的世界。
注意力机制在计算机视觉中的作用:
学习权重分布:输入数据或特征图上的不同部分对应的专注度不同,这个加权可以是保留所有分量均做加权(即soft attention);也可以是在分布中以某种采样策略选取部分分量(即hard attention),此时常用RL来做。
任务聚焦:通过将任务分解,设计不同的网络结构(或分支)专注于不同的子任务,重新分配网络的学习能力,从而降低原始任务的难度,使网络更加容易训练。
GlobalAveragePooling
Global Average Pooling(简称GAP,全局池化层)技术最早提出是在这篇论文(第3.2节)中,被认为是可以替代全连接层的一种新技术。在keras发布的经典模型中,可以看到不少模型甚至抛弃了全连接层,转而使用GAP,而在支持迁移学习方面,各个模型几乎都支持使用Global Average Pooling和Global Max Pooling(GMP)。
GAP简单的说,就是在卷积层之后使用GAP代替FC全连接层。这样做有两恶搞优点:
- 1、GAP在特征图与最终的分类间转换更加简单自然;
- 2、没有大量的需要学习的参数,降低了空间参数,是模型更健壮,有效的防止过拟合。
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