一、背景

深度学习中存在两种不确定性,偶然不确定性和认知不确定性。偶然不确定性指的是数据中本来就存在的误差,认知不确定性是指模型中存在的不确定性,它度量的是我们的input data是否存在于已经见过的数据的分布之中。在深度学习中,对于这种不确定性的建模非常重要,因为噪声普遍存在于数据之中。

大多数图像识别方法是将图像映射为高维空间中的一个点,通过欧氏距离来衡量两张图片的相似度,这样,相同label的图像往往会聚在一起。但对于有噪声的图像,其映射到高维空间后的位置,很可能与各个类中心的距离都很远,也就是说,低质量的图片在高维空间的点嵌入具有很大的不确定性。

PFE是首个考虑人脸识别领域不确定性的模型。对于每个样本,PFE将其映射为高维空间的高斯分布,而不是一个确定的点。具体而言,给定一个预训练好的点嵌入 FR 模型,PFE 将每个样本的点嵌入特征视作该样本高斯概率嵌入的均值,并固定住。接着,PFE 在原本的 FR 模型后接入一个新的分支用来预测其高斯概率嵌入的方差。

PFE 的训练损失函数基于一个新的相似性度量,mutual likelihood score(MLS),它可估计两个高斯分布之间的散度。通过优化 MLS 损失,高质量人脸样本的方差会被预测的较小,噪声人脸图像的方差则会被预测的较大。实际训练中,PFE模型的确有效地减少了噪声样本的误匹配率。

但同时,PFE仍有很多问题。PFE 仅仅优化方差的学习,而不优化原本点嵌入的特征(即均值)。因此,数据不确定性并没有被真正用于影响模型中特征的学习;并且,传统的基于余弦相似性的度量方式无法适用于 PFE 模型。而且,PFE 所依赖的 MLS 度量方式复杂度更高,也更耗内存。

而DUL模型则同时训练模型学习概率嵌入的均值和方差,从本质上优化了人脸特征的学习,也同时降低了数据不确定性的干扰。

二、模型原理

针对人脸数据中存在着的大量模糊图像,DUL模型假设每个人脸存在一个理想的嵌入 F,该嵌入最大程度地表征了人脸的ID信息,并最小程度的受到该图中与ID无关的其他信息的干扰。

而实际中深度学习模型提取到的人脸隐特征是Z,可以将其表示为Z= F + N,其中N衡量了与人脸ID无关的噪声信息。

具体而言,DUL对每个样本拟合一个高斯分布,对应均值μ 和方差σ两个参数。由于样本的表示不再是一个确定的点嵌入,而是一个从高斯隐空间分布中采样得到的随机性嵌入,所以阻碍了模型训练时的梯度反向传播,于是借鉴了VAE(变分编码器)使用重参技巧。首先,从标准正态分布中随机采样一个噪声\varepsilon,独立于模型参数之外,则随机性嵌入表征为:

将Si 输入一个softmax分类器,计算损失:

在仅优化该分类损失函数时,会出现模式坍塌效应,使得模型对于所有样本的 σ_i 的预测都偏小,且趋于一个常数,以使得分类损失可以正常收敛。在这种情况下,随机性的嵌入表征可以视为 s_i = μ_i + c(其中,c 为一个常数),此时,其实整个模型可以看做“退化”为了原本的确定性嵌入模型。

在优化过程引入了一个正则化项,约束模型学到的分布 N(μ_i, σ_i) 与标准正态分布 N(0,1) 接近。本文利用Kullback-Leibler散度(KLD)度量两个分布之间的「距离」:

KL-Loss能对softmax-Loss起到很好的平衡作用。具体地,当模型对于所有样本都预测出偏小的 σ 时,L_kl 损失(等式4)会增大,从而对模型起到乘法作用。反之,当模型对于所有样本都预测出偏大的 σ 时,虽然 L_kl 整体偏小,但是较大的 σ_i 会对于 μ_i 起到严重的“腐蚀”作用,从而使得分类 loss 无法被正常优化。最后,本文将整体损失函数构建为:

由于隐空间由离散变量构成,难以通过求导等方式逼近,于是DUL利用了一个预训练的人脸识别模型,提取其分类层的权重矩阵,每个属于W的w_c可以被当作该类样本的类中心,则对于每个样本x_i,应该最大化下面这个似然度:

为方便训练,取了对数:

本文训练神经网络来预测对数的方差,以稳定随机优化过程中的数值,并通过最小化损失函数获取似然度的最大化操作:

三、PFE与DUL对比

在PFE中,针对离散变量难以训练的问题,模型采取的方法是用预训练得到的embedding作为高斯分布的均值,然后固定不变,用似然度作为损失去训练方差σ;

而DUL中,则利用VAE的重参技巧,同时训练了均值和方差,对样本的表征更为准确。

四、核心代码

五、效果和优缺点

参考:

【1】旷视研究院提出数据不确定性算法 DUL,优化人脸识别性能 - 知乎

【2】【ICCV2019】probabilistic face embeddings 概率人脸嵌入_木盏-CSDN博客

【3】http://openaccess.thecvf.com/content_ICCV_2019/papers/Shi_Probabilistic_Face_Embeddings_ICCV_2019_paper.pdf

【4】人脸识别不确定性研究Data Uncertainty Learning in Face Recognition (DUL)学习与复现 - 知乎

DUL模型详解——代码+原理——Data Uncertainty Learning相关推荐

  1. 数学建模_随机森林分类模型详解Python代码

    数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...

  2. 快速排序算法详解(原理,时间复杂度,实现代码)

    快速排序算法详解(原理.实现和时间复杂度) 快速排序是对冒泡排序的一种改进,由 C.A.R.Hoare(Charles Antony Richard Hoare,东尼·霍尔)在 1962 年提出. 快 ...

  3. 『ML笔记』HOG特征提取原理详解+代码

    HOG特征提取原理详解+代码! 文章目录 一. HOG特征介绍 二. HOG算法具体流程+代码 2.1. 图像灰度化和gamma矫正 2.2. 计算图像像素梯度图 2.3. 在8×8的网格中计算梯度直 ...

  4. 数学建模——智能优化之模拟退火模型详解Python代码

    数学建模--智能优化之模拟退火模型详解Python代码 #本功能实现最小值的求解#from matplotlib import pyplot as plt import numpy as np imp ...

  5. 数学建模——智能优化之粒子群模型详解Python代码

    数学建模--智能优化之粒子群模型详解Python代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplo ...

  6. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  7. 数学建模——一维、二维插值模型详解Python代码

    数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...

  8. 数学建模——线性规划模型详解Python代码

    数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...

  9. 新书推荐 |《5G NR物理层技术详解:原理、模型和组件》

    新书推荐 <5G NR物理层技术详解:原理.模型和组件> 点击上图了解及购买 5G专家和学者撰写,详解5G NR物理层技术(包括波形.编码调制.信道仿真和多天线技术等)及其背后的成因,爱立 ...

最新文章

  1. 第十五届智能车赛比赛 比赛组织参考文档
  2. 程振波 算法设计与分析_算法分析与设计之动态规划
  3. 2020-11-7( servlet)
  4. Python多线程threading和多进程multiprocessing的区别及代码实现
  5. Python(88)_双下划线方法
  6. linux C总结篇(进程)
  7. android动画效果 --- 设置activity 跳转动画
  8. openstack初探
  9. 腾讯自然语言处理实习面经
  10. 有限维线性空间过两点有且只有一条直线的证明
  11. 【JavaSE基础】09-网络编程
  12. 用Python下载抖音无水印视频
  13. 微信公总测试号的申请+微信网页授权
  14. 【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:3.2 分式化简。设计算法,将一个给定的真分数化简为最简分数形式。例如,将6/8化简为3/4
  15. java时间为什么只显示到日_java-为什么此日期未在格林尼治标准时间显示?
  16. 一篇很哇塞的MyBatis入门到精通
  17. pillow之new和paste
  18. SQL 如何查询时竖着的数据横着显示
  19. 【资源】什么是原生广告 What Is Native Advertising?
  20. C语言基础代码(10题)

热门文章

  1. 谁是鱼谁是饵?红队视角下蜜罐识别方式汇总
  2. java 垃圾回收之垃圾回收器篇
  3. L8梯度消失、梯度爆炸
  4. 嵌入式Qt5.6应用编程之触摸屏控制LED灯 - JZ2440V3
  5. HTML导出生成Word文档
  6. nacos2.0服务提示注册成功,但是服务管理列表中没有注册到
  7. 【20210910】【机器/深度学习】lightGBM模型训练中报错:“Cannot set reference after freed raw data“
  8. 如何做好软文推广?软文推广有哪些宣传平台值得推荐
  9. 计算机共享打印机怎么弄,电脑共享打印机怎么设置,手把手教你设置共享打印机...
  10. 关联规则—频繁项集Apriori算法