人脸识别 论文阅读(3)

  1. Finding Tiny Faces in the Wild with Generative Adversarial Network,CVPR 2018,Oral
    论文链接

三个主要贡献:

  • 新颖的端到端方式的人脸检测CNN网络结构,提出了super-resolution network(SRN)和 refinement network (RN)生成真实并且高分辨率的图像;
  • 引入新的loss去同时判断真/假脸、是否为人脸,指导生成器生成更清晰的人脸并用于分类;
  • 通过从模糊小脸恢复成高分辨率清晰人脸证明模型的有效性,并且在WIDER FACE数据集上的检测表现达到了state-of-the-art的水平。(注:WIDER FACE数据集包含大量具有较低分辨率的面)

难点:
wild比正常情况下的人脸图像受任意姿势,照明和模糊影响可能更大

问题引入:
1)由于小脸缺乏详细的信息去区分来自相似背景的人脸和模糊人脸
2)现在的CNN人脸检测器通常使用上采样的方式去表示人脸,丢失了大部分的空间信息并且对于小脸来说太粗糙了;普通的上采样的放大因子一般较小,最多两倍,否则容易产生伪图,因此格外地增加计算空间和时间。
3)使用intermediate conv 可以达到计算负担和效果的平衡(即论文中卷积和反卷积都用到了)
4)引入SRN:使用更大的放大因子但能减少伪图
5)引入RN:恢复上采样的一些缺失细节生成清晰的高分辨率图像用于分类

在这里插入图片描述

  • a:原始的低分辨率模糊图
  • b:bi-linear 直接resize
  • c:super-resolution network(SRN)方法生成图像
  • d:refinement network (RN)方法学习一个颜色和清晰度都最好、最接近真实的图像

bi-linear 双线性插值公式:
二次差值公式 ,v(x,y) = ax + by + cxy + d

网络结构:在这里插入图片描述

  • A:输入一张RGB图像;

  • B:FB-FCN检测器,通过输入图像裁剪生成正样本(人脸)和负样本(非人脸),以训练生成器和判别器,或者用来生成用于测试的regions of interest (ROI);

  • C:通过生成器、判别器或者ROI生成正样本和负样本;

  • D:生成器,输入小模糊图像生成清晰的超分辨率网络,生成器包括上采样子网络(使用4倍放大因子)和细分子网络;
    损失函数是基于像素的MSE损失:
    在这里插入图片描述
    G1表示上采样子网络,G2表示细分子网络

  • E:判别器,在VGG19的基础上做了两个改动:
    在这里插入图片描述
    1)移除conv5的max pool层(为什么要移除,我理解的是:conv5已经算深层了,这一层的feature map很小,如果再用max pool降维的话会使感受野变得很小,可能会丢失一些重要的上下文信息)
    2)将f1~f3替换为两个并行的全连接层在这里插入图片描述(上部分,输出是真实图像的概率)、在这里插入图片描述(下部,输出是人脸的概率)

判别器损失:

在这里插入图片描述
其中,在这里插入图片描述表示高分辨率的人脸(???疑问: 论文中只提到了它是高分辨率图像,但是具体是生成的高分辨图像,还是原始训练集就有的和低分辨率图像配套的呢????想法1:初始低分辨率做label,生成的高分辨率图像和label计算损失,再作为新的label;想法2:训练的时候要同时用到一张图像的高分辨率和低分辨率版本,低分辨率输入,高分辨率监督。--------------->最终通过找到了答案:对原始高分辨率图像进行下采样生成低分辨率图像,是想法2)
表示低分辨率的人脸(原始图像),y是label(Face or Non-face)。

为什么要最大化D的损失,最小化G的损失?

在这里插入图片描述
标准GAN的判别器对假数据的损失原理相同,最终达到的目标是对于所有的真实图片,输出为1;对于所有的假图片,输出为0。 生成器的目标是愚弄辨别器蒙混过关,需要达到的目标是对于生成的图片,输出为1(正好和鉴别器相反).
所以我认为生成器训练的速度比判别器快或者判别器训练到一定结果就不训练了,使得判别器的判别能力较强,但是生成器生成的图像更强,强到能欺骗过这个判别器。

所以最终总损失:

在这里插入图片描述
α和β是待学习的参数


基于模型共识的大规模无标注数据标签传播方法

2.Consensus-Driven Propagation in Massive Unlabeled Data for Face Recognition,ECCV 2018,商汤科技

论文链接

问题引出:标注错误、类内差异大。 现在的人脸识别技术主要依赖于神经网络的大容量和规模越来越大的标注数据集。令作者左右为难的是,现在提升准确率的一个小数点都可能需要数十万手工标注特征,而且容易过拟合(无法泛化到更多身份)。而且,人工标注的错误难以避免,人工标注的可靠性可能还不如模型本身;真实情况下,无标注数据很"wild"。("wild"指无约束环境,即来源没有限制,因此同一类身份的光照、姿态、遮挡等会有很大的差异。)

问题:如何通过未标注数据代替一部分手工标注的数据来提升人脸识别的表现?

解决办法:一种改进的半监督算法——共识驱动算法(CDP)解决这一具有挑战性的问题,两个精心设计的模块——“committee”和“mediator”,前者在通过聚合多视图信息提议positive face pairs,后者聚合所有信息输出最终结果(二元分类器,是否选择face pair)。实验证明仅使用9%的无标注数据即可获得达到和全标注数据一样的效果。

与传统半监督的不同:
1) 无标注数据的wild性质。
2) 无标注数据与有标注数据几乎没有身份重叠,所以传统的标签传播算法(如KNN)不可行

在这里插入图片描述

在这里插入图片描述
训练过程:
1)在无标注数据集在这里插入图片描述训练得到N+1个模型:
base模型 B 和 mediator 模型 在这里插入图片描述
映射函数:
在这里插入图片描述
在这里插入图片描述
2)用前面训练好的N+1个模型提取特征,并创建KNN Graph(nmslib库,一种相似性搜索库,每个样本利用余弦相似度找k个最近邻,分别连接起来,所有的样本及它们的邻居构成了graph) 。作者设置k=20

index = nmslib.init(method='hnsw', space='cosinesimil')
index.addDataPointBatch(feats)
index.createIndex({'post': 2}, print_progress=True)
neighbours = index.knnQueryBatch(feats, k=k)
  1. 在KNN Graph中顺序取两个节点n0和n1,构建Mediator的输入:
    ①relationship在这里插入图片描述
    在这里插入图片描述
    ② affinity 在这里插入图片描述
    在这里插入图片描述
    阈值设定 0.96
    ③ neighbors distribution
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    把 B 简写为C0,输入的是2个节点(n0和n1)在 N+1 个模型中的 K 个邻居的期望和方差。

在这里插入图片描述
所以一共是 6N + 5 维
4)Mediators是一种改进的聚类方式,选择有意义的对。使用MLP,两个隐藏层,每层包含50个节点,Relu激活函数。输出二分类结果,是or 不是。
因为是有标注数据,所以pair是有label。
在这里插入图片描述

测试过程:
1)使用训练过程中训练好的模型,提取特征得到在这里插入图片描述在这里插入图片描述
每个样本N+1个特征向量
2)生成N+1个KNN 图
3)Mediator 选择有意义的对 ,生成Consensus-Driven Graph
4)伪标签传播,这个过程完全不用到标注数据的类别
5) 伪标注数据混入在这里插入图片描述重新训练前面的模型
在这里插入图片描述在这里插入图片描述
在这里插入图片描述 损失用的都是softmax损失

committee的思想来自于1992年的一篇论文Query-by-Committee(QBC),此方法是用来对分类器选择性采样的,可以删除掉不太准确的分类器。生成多个学习器,选择对样本分类争议最大的学习器询问标签,误差传播。
在此篇论文中,committee确保了graph 的多样性。
在这里插入图片描述

经过测试,Tiny NASNet-A,Inception-ResnetV2,DenseNet121,ResNet101的集成在两个基准测试中产生68.86%和76.97%准确率。

伪标签传播算法:看不太懂
iv. Pseudo Label Propagation. The pairs selected by the mediator in the previous step compose a “Consensus-Driven Graph”, whose edges are weighted by pairs’ probability to be positive. Note that the graph does not need to be a connected graph. Unlike conventional label propagation algorithms, we do not assume labeled nodes on the graph. To prepare for subsequent model training, we propagate pseudo labels based on the connectivity of nodes. To propagate
pseudo labels, we devise a simple yet effective algorithm to identify connected components.

At first, we find connected components based on the current edges in the graph and add it to a queue. For each identified component, if its node number is larger than a pre-defined value, we eliminate low-score edges in the component, find connected components from it, and add the new disjoint components to the queue. If the node number of a component is below the pre-defined value, we annotate all nodes in the component with a new pseudo label. We iterate this process until the queue is empty when all the eligible components are labeled.
我的理解是:

  #标注判断
  if 邻居没有标注 : 标注为新的类别  
  else: 标注成跟邻居一类
  
  for pair in Classified pairs:
		for  node for nodes of pair:
		        if the node number > pre-defined value:
		              if 当前边是低分边:删除当前边
		              else: 进行标注判断
		        if  the node number <= pre-defined value :
	                  进行标注判断

pre-defined value指的是分类的类数

参数初始化用的是Xavier ,每一层输入和输出的方差尽可能相等,信号不会突然很大或很小

推导:
在这里插入图片描述
权衡以上两者得到 在这里插入图片描述 已知[a,b]的均匀分布方差在这里插入图片描述
所以可以解得 在这里插入图片描述
参数初始化作用:
在这里插入图片描述
可以试着换一下
在这里插入图片描述

我改进的想法:

  • Mediator为什么全连接,加入dropout行不行?

  1. SphereFace
    参考论文 SphereFace: Deep Hypersphere Embedding for Face Recognition,CVPR 2017

trick:

  • A-Softmax:新提出一种的损失函数,通过权重和特征向量之间的角度进行分类,可在流形超球面(高维空间)增加角度判别能力,即对降低类内差异、增加类间差异有帮助。

① face detection:使用 MTCNN 学习关键点,MTCNN是一种多分辨率图片读入方式。
在这里插入图片描述
论文使用的是64-layer

MTCNN 参考论文:Joint Face Detection and Alignment using
Multi-task Cascaded Convolutional Networks,ECCV 2016

训练过程:
在这里插入图片描述

网络结构:
在这里插入图片描述

  • 给定一个图像,resize成不同的比例来构建图像金字塔。
  • Proposal Network (P-Net):该网络结构主要获得了人脸区域的候选窗口和边界框的回归向量。并用该边界框做回归,对候选窗口进行校准,然后通过非极大值抑制(NMS)来合并高度重叠的候选框。

NMS计算过程:
1)将所有候选框和ground truth 的IOU值记录下来,记作score,初始化最终候选框集合,初始化阈值t;
2)选择最大score的框放入最终集合,计算其他框和当前最大score框的IOU,超过t则剔除;
3) 重复步骤2直至所有候选框筛选完毕

  • Refine Network (R-Net):该网络结构还是通过边界框回归和NMS来去掉那些false-positive区域(因为全连接层能学习到更充分的上下文信息)。只是由于该网络结构和P-Net网络结构有差异,多了一个全连接层,所以会取得更好的抑制false-positive的作用。 (??为什么)
  • Output Network (O-Net):该层比R-Net层又多了一个卷积层,所以处理的结果会更加精细。作用和R-Net层作用一样。但是该层对人脸区域进行了更多的监督,同时还会输出5个landmark坐标,是一个10维的向量。

整个网络中有三项任务:
1)人脸分类:对于每个样本xi,我们使用交叉熵损失在这里插入图片描述

2)边界框回归:在这里插入图片描述
ground truth 指的是 the bounding boxes’ left, top, height, and width

3)关键点定位:在这里插入图片描述
ground truth 指的是 left eye, right eye, nose, left mouth corner, and right mouth corner共5个坐标

将以上三个任务统一起来:在这里插入图片描述
N为训练样本数量,aj表示任务的重要性,bj为样本类型指示符(表示只对ground truth为人脸的样本计算损失),Lj为上面的损失函数。

在卷积层和全连接层后面使用的激活函数是PRelu在这里插入图片描述
区别与leacky relu ai是(1,+∞)区间内的固定参数。
此处的α根据小于0的数据变化的 ,更新公式为:在这里插入图片描述这篇论文的作者证明这一点是机器超过人类的关键点。

比较特别一点的是对hard sample的处理:取对每个小批量的数据前向传播的损失进行排序,只取前70%作为hard sample,反向传播,忽略掉不太有帮助的简单样本。实验证明,这种策略是有用的,论文在FDDB数据集上提升了1.5%
在这里插入图片描述

② face alignment:根据关键点做相似变换

③ face representation:

对比其它在深度学习中有用的损失函数:

  • contrastive loss、triplet loss 必须同时输入一对图像
  • center loss只对减小类内差异有帮助
    在这里插入图片描述
    xi是特征向量,cyi表示第yi个类别的特征中心

以二分类为例,
在这里插入图片描述

其中,对于改进的softmax 损失规定:||W1||=||W2||=1,b1=b2=0
(归一化权重可以缓解训练数据类别分布不均匀的影响,减小类内差异)

m是一个待学习参数,正整数,这样第i类的特征相比其他类具有较小的θi,m用来控制angular margin,给当前类的角度θ加权,使得特征对几乎固定的角度敏感,增大类别的判别力,也就是增大类间差异。

分别使用sigmoid激活函数和对数损失函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
几种损失函数学到的特征分布如下图所示:

在这里插入图片描述

可以观察到A-softmax 利用角度分类的特性,确实判别能力更好。

结论:
性质1:A-Softmax Loss定义了一个大角度间隔的学习方法,m越大这个间隔(其它类的角度和ground truth的角度间隔)也就越大,相应区域流形的大小就越小。

性质2:类内最大角度特征距离小于类间最小角度特征距离(这样可以让类内差异尽可能小,类间差异尽可能大)。在二分类问题中,在这里插入图片描述;在多分类中,在这里插入图片描述
证明:
1)对二分类:
在这里插入图片描述为W1、W2之间的夹角

  • 若X在W1、W2之间,可以由mθ1=θ2求出θ1的最大值为在这里插入图片描述
    在这里插入图片描述
  • 若X在W1、W2之外,有两种情况:在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
3)类间最小角度特征距离:在这里插入图片描述
在这里插入图片描述
所以,对于二分类有:
在这里插入图片描述
解得:在这里插入图片描述

对于多分类,设在这里插入图片描述在这里插入图片描述的夹角,最好的情况是均匀分布,所以在这里插入图片描述
在这里插入图片描述
解得:在这里插入图片描述

经过试验,m取4
在这里插入图片描述

④ face verification:
在这里插入图片描述

附录:
在二分类情况下,softmax相关损失函数对比:
在这里插入图片描述

还有一篇叫NormFace的,说的是训练的时候有必要正则化。如果基于余弦距离做改进,就是带正则化的。

猜你喜欢

转载自blog.csdn.net/qq_37717661/article/details/84140904