活体检测PatchNet学习笔记
论文题目:PatchNet: A Simple Face Anti-Spoofing Framework via Fine-Grained Patch Recognition
论文链接:https://openaccess.thecvf.com/content/CVPR2022/papers/Wang_PatchNet_A_Simple_Face_Anti-Spoofing_Framework_via_Fine-Grained_Patch_Recognition_CVPR_2022_paper.pdf
一、创新点
(1) 将 FAS 重新定义为细粒度的 patch 识别问题,并提出了名为 PatchNet 的简单框架。以patch 为输入可以增加数据的多样性,使模型学习类似人脸识别中的 embedding space,还可以使模型捕获来自局部 patch 的内在信息,防止网络过拟合数据集而引入的偏差,提升模型在未知场景中的鲁棒性。
(2)提出了基于非对称 Margin 的 Softmax Loss 和 Self-supervised Similarity Loss 来监督 PatchNet 训练。 前者有助于学习更通用的 patch 嵌入空间来解决活体和假体之间的不对称性,后者可以强制来自同一图片的不同 patch 的特征保持不变。
二、动机
以前的 FAS 方法受到数据集的规模大小和多样性的限制。作者观察到,使用二元分类模型在此类数据集上进行训练容易过度拟合。此外,网络在这类数据集中训练容易过拟合,这使得模型学习到的特征在未知的测试场景中很容易受到攻击。因此,近期的 FAS 方法利用辅助像素级监督信息 (如,binary mask 和 pseudo depth map)作为强大的先验知识,以在未知的测试场景下拥有更好的鲁棒性。然而基于整图输入的 FAS 模型缺乏捕获局部细粒度内在信息的能力,因此作者将 FAS 重新定义为细粒度的局部 patch 识别问题。
三、PatchNet
(1)总体框架
如图1所示,作者将 FAS 重新定义为细粒度的 patch 识别问题,并提出了一个简单的训练框架来有效地学习特征。首先对原始图像进行一定的变换 (此类变换不会导致图像失真) 以获得 patch 输入,然后通过编码器提取特征并在特征空间中进行归一化。此外,作者根据假体材料和捕获设备对类别进行精细划分。
图1 PatchNet 整体框架
受人脸识别方法的启发,在训练过程中,采用了基于角边距的 softmax 损失,它可以强制类内特征紧凑分布,并具有更好的泛化能力。此外,由于欺骗样本之间的分布差异大于真人样本,作者对活体样本和假体样本进行不对称处理:强制模型在活体样本中学习更紧凑的分布,同时使欺骗样本在特征空间中更加分散。作者还修改了基于角边距的 softmax 损失,将不对称边距应用在损失函数中,对活体类型施加更大的角距以获得更紧凑的边界。最后,自监督的相似性损失通过将对比损失中对正样本对之间的处理应用于来自同一图像的两个不同的 patch 中,进一步规范了 patch 特征。考虑到假体的欺骗信息在空间上存在于整个面部区域,那么来自同一面部捕获的两个不同 patch 之间的特征应该是相似的。
(2)提取 patch 特征
使用的数据增强策略应避免导致图像失真,给定原始人脸图像 ,对来自
的两个 patch 进行数据增强,公式如下:
其中, 和
是一系列非失真增强操作,只包含随机水平翻转、随机旋转和固定大小裁剪。
然后将两个输入 patch 前向传播到编码器和归一化层以获得最终特征,公式如下:
其中, 为编码器,
为归一化层。
(3)细粒度的 patch 识别损失
假设在训练集中有 N 个 patch 类别,它由 k 个 活体 和 N-k 个假体类别组成。每个输入都属于一个细粒度 ground truth ∈ {
,
, ...,
,
,
, ...,
}。Angular-Margin Softmax Loss 有很多变体,常用于人脸识别,以提高对开放数据集身份的泛化能力。在这项工作中,作者使用 AMSoftmax 损失来优化细粒度的 patch 识别模型并对其进行修改以解决 FAS 中的不对称性质。具体来说,分别对活体和假体类别的输入施加不同的裕值
和
。活体和假体类别分别为:
修改后的 AM-Softmax Loss 公式如下:
来自同一图像的两个增强 patch 上的非对称识别损失公式如下:
(4)自监督相似损失
给定来自同一人脸图像的两个不同 patch,应用自监督的相似性约束来强制特征相似。公式如下:
(5)训练和测试
总体损失如下:
其中, 和
是用于平衡两个损失影响的权重,在实验中都设置为1。
在测试时,给定一张测试人脸图像,首先从整个图像中统一裁剪 patch 进行网络推理,patch 大小与训练过程中的一致。假设有来自一张人脸图像的 P 个裁剪块特征,最终的预测分数为对 P (默认值为 9) 个patch 的分数取平均值,公式如下:
四、实验
OULU-NPU、SiW、CASIA-FASD、Replay-Attack、MSU-MFSD 被用于测试。前两个数据集为包含四个和三个协议的大规模高分辨率数据集,用于验证泛化能力。后三个数据集是包含低分辨率视频的数据集,用于跨数据集测试。五个数据集的信息如表 1 所示:
表 1 FAS 数据集统计数据
训练集中的人脸图像使用 RetinaFace 进行检测和裁剪获得,patch 的大小为160*160。超参数设置为:s = 30.0,,
。实验中使用 ResNet18 作为特征编码器、SGD 作为优化器,初始学习率为 0.002,训练 epoch 为 200,学习率每 90 epoch 下降为原来的一半。测试时,patch 的裁剪大小与训练时一致,裁剪框 x, y 坐标的最小值为裁剪大小的一半,最大值分别为:
在 OULU-NPU 数据集上的测试结果如表 2 所示:
表 2 OULU-NPU 测试结果
在 SiW 数据集上的测试结果如表 3 所示:
表 3 SiW 测试结果
框架各模块的消融实验如表 4 所示:
表 4 消融实验结果
patch 裁剪大小对模型的影响如图 2 所示:
图 2 patch大小选择之间的比较
在 CASIA-FASD、Replay-Attack 数据集上的测试结果如表 5 所示:
表 5 CASIA-FASD、Replay-Attack 测试结果
在四个跨数据集协议上评估结果如表 6 所示:
表 6 四个跨数据集协议上评估所提出方法的不同组件
PatchNet 与 SOTA 方法在四种域泛化协议上的比较结果如表 7 所示:
表 7 与 SOTA 方法的对比实验结果
来自 OULU-NPU 的5种不同类型的 patch 分数图如图 3 所示:
图 3 patch 分数图
五、结论
PatchNet 能有效地将 patch 特征映射到嵌入空间,修改后的 AM-Softmax Loss 能够增强特征识别能力。
活体检测PatchNet学习笔记相关推荐
- 活体检测CDCN学习笔记
原文链接:https://arxiv.org/pdf/2003.04092v1.pdf 代码链接:GitHub - ZitongYu/CDCN: Central Difference Convolut ...
- 目标检测SSD学习笔记
目标检测SSD学习笔记 SSD: Single Shot MultiBox Detector Abstract. 我们提出了一种使用单一深度神经网络来检测图像中的对象的方法.我们的方法,命名为SSD, ...
- Task 06 数据增强;模型微调;目标检测基础 学习笔记
Task 06 数据增强:模型微调:目标检测基础 学习笔记 数据增强 图像增广 在5.6节(深度卷积神经网络)里我们提到过,大规模数据集是成功应用深度神经网络的前提.图像增广(image augmen ...
- 深入目标检测原理学习笔记1
目标检测(object detection)学习笔记 文章目录 目标检测(object detection)学习笔记 一.目标检测任务概述 1.图像识别的任务 2.图像识别的两种模式 3.目标检测的定 ...
- 活体检测FaceBagNet阅读笔记
原文链接:https://openaccess.thecvf.com/content_CVPRW_2019/papers/CFS/Shen_FaceBagNet_Bag-Of-Local-Featur ...
- hough变换直线检测_CV学习笔记(十五):直线检测
在这一篇文章中我们将学习使用OpenCV中的 HoughLines 函数和 HoughLinesP 函数来检测图像中的直线. 在这个函数中,使用的是霍夫变换(Hough Transform) 这是计算 ...
- 上升沿检测电路学习笔记
上升沿检测电路的原理:输入信号d,经过一拍的延迟后,产生delay信号,将dout=d&(~delay)的结果当作是有上升沿的标志,结果为1则检测到上升沿.从波形图上理解就是下图这样. 三条红 ...
- 舰船目标检测的学习笔记
1 致谢 感谢网友lihe2019提供的资料--<Ubuntu 16.04 Nvidia驱动安装(run方式)> 感谢网友xunan003提供的资料--<ubuntu16.04系统r ...
- 舰船目标检测的学习笔记(legacy)
2 服务器配置 2.3 安装CUDA和cuDNN 请参考我的博文<CUDA--Ubuntu系统上CUDA和cuDNN的安装教程>: 如果出现问题: unable to execute ': ...
最新文章
- WinSock学习笔记3:Select模型
- 配置Vim的显示样式
- java写大文件_java实现超大文件的读写功能
- Java黑皮书课后题第6章:*6.39(几何:点的位置)编程练习题3.32显示如何测试一个点是否在一个有向直线的左侧、右侧或在直线上,编写一个程序,输入三个点p0p1p2,显示p2是否在直线p0p1
- Jquery日历编写小练习
- jQuery 简单案例
- xwpftablecell设置字体样式_HTML的文字样式
- pytorch——张量操作与线性回归
- IEC61850简要介绍
- 如何制作双层PDF文档?其实只需简单一步!
- mysql join 从库_Mysql实现跨库join查询
- 杭电多校(MINIEYE)第四场 补题
- C语言int类型转换为char类型
- 程序员转行后能做什么?
- python复利计算_python:复利计算
- Leetcode 1217. Minimum Cost to Move Chips to The Same Position [Python]
- idea如何关闭代码提示,设置快捷键提示代码
- 数字图像处理及应用 阅读笔记
- 软构习题课一内容总结
- python切片是什么意思_python中的切片是什么?(实例解析)