paper1:Pose-Robust Face Recognition via Deep Residual Equivariant Mapping 2018CVPR

基于深度残差等变映射的姿态鲁棒人脸识别
一.摘要
背景:人脸识别模型的效果相比正脸,侧脸的效果不是很好。
原因:关键的原因是正脸和侧脸的训练样本数量高度不平衡。
难度:从本质上讲,要学习对大姿态变化具有几何不变性的深度表示是很困难的。
本文假设:正脸和侧脸之间存在固有的映射关系,在特征空间将侧脸特征通过等变映射转换为正脸特征,从而提高侧脸识别的准确率。
出发点:利用这种映射关系,提出了新的深度残差等变映射块,它能够自适应地向输入深度表示添加残差,从而将一个侧脸表示转化为一个标准正脸姿态,简化了识别。
效果:对于包括ResNet模型在内的许多强大的深度网络,DREAM block在不刻意增加侧面人脸训练数据的情况下,持续地提高了侧面人脸识别的性能。
二.介绍
1.为什么人脸识别在侧脸上效果不佳?
深度学习很大程度上由数据驱动的,侧脸数据和正脸数据不平衡
深度模型的泛化能力通常与训练数据的大小成正比。
在数据集中,由于侧面和正面的分布不均匀,深度学习的特征往往偏向于区分正面,而不是侧面。收集一个包含所有可能姿势且分布均匀的大数据集是不可行。
2.侧脸识别的更好的方法
在识别前将图像归一化为单一的正面姿态
3D人脸检测
专门用于人脸正面化深度模型(生成对抗模型)
缺点:整个过程对整个系统产生很大的负担,人脸正面化在野外,尤其是极端的侧脸仍旧是很难得挑战。
3.本文的方法
假设侧脸区域和正脸区域在深度特征空间拥有一个逐步连接
给定一个任意pose的输入图像,我们可以通过添加残差的映射函数将其特征映射到正面空间,许多深层的表示依赖于输入图像的转换。这种转换可以通过映射函数从数据中学习,然后这个函数可以用于操作输入图像的表示以实现所需的转换。
提出了深度残差等价映射块,能够在正脸和侧脸之间的转换建模。本研究是首次尝试在深度特征空间中进行侧脸到正面的转换。
4.深度残差映射块的优点:
实现简单
轻量级 它只向基本模型添加少量的参数和计算 它只在ResNet-18上添加0.3%的参数,前向时间增加1.6%
该方法帮助一个已经在近正面人脸识别方面做得很好的基础网络在识别极端姿态变化的人脸时获得更好的性能
三.训练
stitching
DREAM块可以直接连接在在一个训练好的基础CNN的最后的特征层(全连接层)不需要改变原始模型的任何学习参数。
End-to-end+retrain
一起训练stem CNN和DREAM block,然后用front -profile face pair分开训练DREAM block。
检验模块的有效性
使用GAN模型将深层特征映射回重建图像,GAN模型用于可视化由我们的模型生成的原始和映射的特性。(重构添加残差之后的特征,会发现将侧脸图像映射到了正脸图像)
四.模型探究
在这里插入图片描述
Mid-feature:图像经过残差网络,再经过一个全连接层后的特征

def __init__(self, block, layers, num_classes=1000, end2end=True):
    self.inplanes = 64
    self.end2end = end2end
    super(ResNet, self).__init__()
    self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3,
                           bias=False)
    self.bn1 = nn.BatchNorm2d(64)
    self.relu = nn.ReLU(inplace=True)
    self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
    self.layer1 = self._make_layer(block, 64, layers[0])
    self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
    self.layer3 = self._make_layer(block, 256, layers[2], stride=2)
    self.layer4 = self._make_layer(block, 512, layers[3], stride=2)
    self.avgpool = nn.AvgPool2d(7)
    self.feature = nn.Linear(512 * block.expansion, 256)
def forward(self, x, yaw):
    x = self.conv1(x)
    x = self.bn1(x)
    x = self.relu(x)
    x = self.maxpool(x)

    x = self.layer1(x)
    x = self.layer2(x)
    x = self.layer3(x)
    x = self.layer4(x)

    x = self.avgpool(x)
    x = x.view(x.size(0), -1)
    mid_feature = self.feature(x)

Raw-feature:在mid-feature的基础上再经过两个全连接层后的特征

if self.end2end:
        raw_feature = self.fc1(mid_feature)
        raw_feature = self.relu(raw_feature)
        raw_feature = self.fc2(raw_feature)
        raw_feature = self.relu(raw_feature

feature = yaw * raw_feature + mid_feature

yaw = yaw.view(yaw.size(0),1) #将yaw的数据拉成一行
yaw = yaw.expand_as(raw_feature) #将yaw的维度扩展成和残差特征一致的维度,便于计算
feature = yaw * raw_feature + mid_feature #最后得到的特征

Yaw:头部旋转估计器,利用人脸标记的21个标记点,使用EPnP算法估计旋转角度并通过非线性函数映射到[0,1] 之间。

  • 侧脸的旋转角越大,yaw越大,对特征的惩罚越大。正脸的时候,yaw=0,当侧脸的旋转角度大于45度时,yaw=1.

    def sigmoid(x):
         return 1 / (1 + math.exp(-x))
    def norm_angle(angle):
         norm_angle = sigmoid(10 * (abs(angle) / 45.0 - 1))
    return norm_angle
    
  • 数据集中正脸侧脸都有,但是算法一般都是针对正脸而设计,所以导致侧脸的识别性能不好,用yaw判断侧脸的旋转度,从而对特征进行惩罚乘以yaw,然后加上原始特征,就在特征空间内对侧脸特征进行了转换,转换为正脸特征,进行识别。
    用GAN网络可视化后的结果
    可以清晰的看到,侧脸向正脸的转换效果
    在这里插入图片描述
    从特征空间来看,在特征空间,将侧脸特征通过等变映射,转换到正脸特征空间
    在这里插入图片描述
    相同类别的正脸和侧脸特征经过深度特征空间的映射,类类紧凑
    在这里插入图片描述

五.实验

1.实验方向

  • 验证正脸向全侧脸的人脸验证的有效性
  • 在一个拥有全姿态变化的数据集上和最先进的方法比较
  • 进一步分析了人脸yaw的影响并提出了消融研究
    2.数据集的选择
    数据集MS-Celeb-1M,拥有十万张从谷歌收集的名人的照片,没有手动清理过。
    清理数据并选择一个子集来形成我们的训练和测试分区。
    训练分区包含来自13,385个身份的696,446张图像。
    测试分区包含70730张来自3084位名人的照片,测试分区只用于我们进一步的分析和消融研究,因为它包含更多的侧脸图像。
    训练和测试集中的所有人脸图像都被预处理为224*224
    3.在CFP上用正脸侧脸设置的评估
    1.测试数据集
    创建了一个具有挑战性的数据集来检查“在野外”的正面到侧面人脸验证问题。数据集包含500位名人,每个名人有10张正面和4张侧面脸图像。在评估中遵循标准的10折协议,整个数据集被分为10个折叠,每个折叠包含50个个体生成的350对相同和350对不同的对(每个个体有7对相同和7对不同的对)。相同的协议被用于正脸-侧脸,正脸-正脸的设置。
    2.stem CNN
    使用ResNet-18作为我们的基础网络,也尝试ResNet-50。
    3.基准
    我们将我们的方法与三个具有代表性的baseline进行了比较,这三个baseline也有助于减少正脸和侧脸验证间的差距。
    CDFE
    通用判别特征提取是一种专门针对模间问题的具有代表性的特征提取方法。该算法同时学习两种变换,将两种模式的样本分别映射到公共特征空间。
    JB
    联合贝叶斯在人脸验证中广泛使用的度量学习方法,也支持从一个域到另一个域的转移,我们在CFP数据集上训练一个JB模型。用9个块来训练,其余的用来测试。我们重复这个过程10次,并报告平均错误。
    FF
    人脸正面化是用一个生成对抗网络将面部从侧面形态转化为正面形态。在CFP测试分区将所有的侧脸图像转换为正脸的一个。
    DREAM表明,在深层特征空间中执行“frontalization”比在图像空间中执行“frontalization”效果更好
    4.在IJB-A用全姿态变化评估
    1.测试集
    数据集包含500个主题,其中5,712个图像和20,414帧从视频中提取。IJBA数据集中的人脸包含极端的姿势和光照,比LFW更具挑战性
    2.网络
    使用ResNet-18和ResNet-50进行训练MS-Celeb-1M作为stem CNN。
    3.结果
    我们的模型在MS-Celeb-1M上进行训练,并直接在ibb - a上进行测试,没有进行微调。我们的方法只训练使用典型的loss,没有微调。
    DREAM 块 由于soft yaw 系数的存在,使得该块不改变人脸的正面表现,因此非侧脸人脸识别的性能影响不大
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值