【深度学习论文笔记】Recover Canonical-View Faces in the Wild with Deep Neural Network

本文介绍了一种基于深度学习的人脸正面重构方法,并利用重构的人脸进行人脸识别验证。该方法通过学习任意角度人脸到标准正面脸的转换,提高了人脸识别的准确性。
部署运行你感兴趣的模型镜像

文章来源:CVPR2014

作者:Zhenyao Zhu,Ping Luo,Xiaogang Wang,Xiaoou Tang

(香港中文大学果然牛)


主要内容:

提出了利用深度学习(还是CNN)来进行人脸图像重构正面人脸,然后利用重构的正面人脸图像来进行人脸的verification,当然能够取得更高的准确率(比没有用正脸去verification),文章提出利用DL来学习从任意脸到canonical 脸的转换,可以认为是一个回归问题(也不一定非得用DL方法来做)。


现有的方法有两种:1. 考虑生成3D脸模型;2. 直接在2D图像空间上进行(这篇文章采用的方法)。


主要步骤:

1. 正面人脸的选择依据,2.人脸正面脸重构。


1. 关于正面人脸的选择准则:1. 左右对称性,2. 图像的秩Rank,3,结合1和2(文章采用的方法)。

所以采用的度量公式如下:

其中Yi是人脸图像,P,Q 矩阵是参数,第一项表示对称性,第二项表示图像的秩,lamda 则表示这两个准则的tradeoff。

在文章中,作者只是采用M值最小的。(可能会有问题,或者说有改进的空间,文章中作者也说了,可以采用线性组合等来计算正面人脸)


2. 正面人脸重构:

正面人脸选择之后,就可以进行训练是深度学习网络了,其准则是:

其中W是深度神经网络的参数,Yi是选择的正面脸。

网络的结构如下所示:

其包含3个卷积层,其中头两个采用max pooling ,最后一个采用全连接,不共享权值,具体的网络结构跟经典的没有太大的改进。


verification的过程:

1. 对于每一个训练图像对,重构正面脸,然后提取5个特征点Landmark,然后基于这些Landmark提取Patch。

2. 利用每个patch对来训练网络,多个特征最后被级联在一起形成最后的特征。

3. 使用PCA降维和利用SVM分类(二分类问题)。

实验细节:不是采用LFW中的图像来训练DL模型,而是采用其它的人脸图像库CelebFaces来进行训练,在LFW中能够取得96.45%的准确率。



最后看下他们的重构效果



您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

在硬标签设置下,攻击者仅能通过查询模型获得预测的类别标签,而非完整的概率输出。在这种条件下,**多项式时间密码分析提取深度神经网络**(Polynomial Time Cryptanalysis for Extracting Deep Neural Networks)方法旨在以高效的方式重建目标模型的结构与参数。 该方法借鉴了密码学中的差分分析思想,通过构造特定输入并观察输出标签的变化来推断模型内部的线性变换和激活函数信息。具体而言,攻击过程可以分为以下几个阶段: 1. **线性层恢复**:对于全连接或卷积层,假设其权重矩阵为 $ W \in \mathbb{R}^{m \times n} $,攻击者可以通过设计差分输入对 $ (x, x+\Delta x) $,并记录对应的输出标签差异 $ \Delta y $,从而构建关于 $ W $ 的线性方程组。由于硬标签输出是离散的,需结合多个差分样本并通过最大似然估计等手段逼近真实权重。这种策略在浅层网络中表现良好,并可扩展至深层网络[^1]。 2. **激活函数识别**:不同类型的激活函数(如 ReLU、Sigmoid、Tanh)会在输入空间中产生不同的边界响应模式。攻击者可以通过在输入空间中沿特定方向扰动样本,并观察输出标签是否翻转,从而推断出激活函数的形式及其阈值参数。例如,在 ReLU 情况下,当输入超过零点时,输出可能发生跳变,而这一特性可用于识别激活类型[^1]。 3. **多层结构拼接**:在逐层恢复的基础上,攻击者利用中间层输出的标签一致性进行层间对齐。通过固定前一层参数并微调后一层输入,逐步构建完整模型。这种方法依赖于输入空间的高维性质以及模型输出的稳定性,在满足一定查询预算的前提下能够在多项式时间内完成模型提取任务。 值得注意的是,尽管该方法在理论上展示了对硬标签黑盒模型的有效攻击能力,但其成功依赖于若干前提条件,包括但不限于:模型具有规则结构(如标准 CNN 或 MLP)、输入维度相对较低、允许大量查询访问等。此外,防御机制如标签平滑、随机化输出或限制查询频率均可显著削弱此类攻击效果。 ### 相关代码示例 以下是一个简化的线性层恢复模拟示例(假设已知激活函数为 ReLU): ```python import numpy as np def recover_linear_layer(query_func, input_dim, output_dim, num_samples=1000): # query_func: 输入一个batch的x,返回硬标签y X = np.random.randn(num_samples, input_dim) Y = query_func(X) # 构造差分输入对 delta_X = np.random.randn(num_samples, input_dim) X_perturbed = X + delta_X Y_perturbed = query_func(X_perturbed) # 构建线性系统 AW = B A = [] B = [] for i in range(num_samples): if not np.array_equal(Y[i], Y_perturbed[i]): diff_input = delta_X[i] diff_output = Y_perturbed[i] - Y[i] A.append(diff_input) B.append(diff_output) A = np.array(A) B = np.array(B) W, residuals, rank, s = np.linalg.lstsq(A, B, rcond=None) return W # 示例使用 input_dim = 10 output_dim = 5 W_true = np.random.randn(input_dim, output_dim) def dummy_query(x): return np.argmax(np.maximum(0, x @ W_true), axis=1) W_recovered = recover_linear_layer(dummy_query, input_dim, output_dim) ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值