Paper link: https://arxiv.org/abs/2005.03922

Code link: https://github.com/VIS-VAR/LGSC-for-FAS

简介:

最近读到了一篇百度在人脸活体领域的新作LGSC,感觉思路相当清奇,从异常检测的角度来解决活体问题,假设活体样本具有某种共同属性,属于一个closed-set,而攻击样本作为这个活体closed-set意外的异常,属于一个open-set(如图1所示)。定义了一个spoof cue map的概念,即攻击和活体之间的difference,并明确这种spoof cue只在攻击中存在,在活体没有(spoof cue map是all-zero map)。为了学习这种spoof cue map,作者通过显式的regression-loss、隐式的metric-learning和辅助分类器来做监督,有意思的是这篇文章里只对活体做了显式监督,只对活体做显式监督,通过隐式监督在特征空间里推开攻击,更神奇的是,这篇文章直接使用spoof cue map的magnitude做预测,而不是用分类器,也就是作者用分类器的作用是为了让整个网络学习到更合适的spoof cue map,而不是用分类器做决策,个人感觉这从一定程度上减轻了通过二分类解决活体模型的泛化性问题。文章在siw、oulu这些比较权威的活体数据集都SOTA了。更神奇的是,竟然在faceforensic++人脸伪造检测榜单上直接刷新了新纪录,并且直接开源了代码。感觉是挺靠谱的工作。

Residual-learning Framework

网络采用U-Net的结构作为spoof cue generator(图2),输入为人脸RGB图像(归一化-1到1),输出为原图大小的spoof cue map,编码器采用ResNet18(pre-trained on ImageNet),解码器D含四个ResNet Block其中每个结构如下图,上采样,2x2卷积,concatenation对称部分编码器的输出,第四个解码Block输出Tanh使器归一化-1到1。Decoder的五个block输出进行三元组度量学习,输出spoof cue map进行L1回归,最后spoof cue map加回到原始图像进行二分类(辅助分类器采用ResNet18)。文章中说这种overlay的方式是为了更好的学习spoof cue map,即采用分类器的目的不是为了做决策,而是为了让spoof cue map有更好的可区分性和泛化性。

Regression loss:

方法前提假设,只有攻击样本才具有欺骗线索,所以活体样本线索图应为全零图,而欺骗线索图应是非零图,回归网络只对活体样本进行全零图回归,而不对攻击样本做任何的显示监督,回归loss采用pixel-wise L1 loss:

Metric Learning:

使得网络特征在活体样本类间更紧凑,活体与攻击样本间更疏远,对于每个特征层输出,先进行全局平均池化(GAP)得到特征向量,每个训练,同个Batch在线收集合法三元组,其中anchor只属于活体样本:

Auxiliary Classifier:

将线索图加回到原图,构成重叠的图,作为分类模块输入进行分类,目的用于提取更好的 spoof cue map。

Test Phase

这篇文章和以往的大多数活体方法有一个明显的不同点,不再使用分类器结果做决策,而是直接简单粗暴的使用generator输出的spoof cue map来做预测,神奇的是,这种方式预测得到的结果竟然比分类器的效果更好。个人觉得这个原因在于使用分类器多少存在过拟合的问题。这篇文章的作者应该是想学习一个好的feature,而不是一个好的分类器,并且也确实通过联合监督学习到了一个足够robust的feature(spoof cue map),基于feature的magnitude就能得到一个足够好的决策边界。

Results:

论文实验SOTA结果这里就不贴出来了,详情见论文。下面介绍一下开源代码在人脸伪造检测(FaceForensics Benchmark)复现效果,先贴个结果图,轻轻松松达到0.818,因为用了人家的方法,也就没有再显示出来,不过能达到这个指标真心美滋滋。

下面介绍一下复现过程:

1.数据下载

登陆FaceForensics++官网,写个申请,就可以得到一个数据下载的脚本,配置好需要的数据,根据开源说明,下载了C23和C40两种压缩比的视频数据数据,视频数据不是很大,总共加起来4.67 GB,还要下载测试数据0.6GB,也就是榜单测试集数据。

2.数据预处理

原始数据为视频数据,所以需要进行拆帧和裁剪人脸,拆帧直接采用opencv,拆帧率大概每5帧保留一帧,人脸检测直接采用了MTCNN,差不多裁成下图那样。最后得到得到160G的拆帧数据,大概100万训练数据(建议边拆帧边裁剪保存,不然需要很大空间)。标签文件保存为txt文档,每行为图像路径+label(注意:0为活体样本,1为攻击样本,lgsc是基于spoof cue map的magnitue来做预测的,即数字越大越可能为攻击,越接近0越可能为活体,开源代码最后预测表示逻辑是反过来的),用空格间隔

数据路径:

3.训练

下载开源代码:https://github.com/VIS-VAR/LGSC-for-FAS, 单卡16Gv 100大概训练了15个epoch,训练大概5天。

  • 环境配置:

开源代码为paddle动态图代码,安装paddle 1.7.1, 这里需要注意cuda版本

pip install paddlepaddle-gpu==1.7.1.post97

由于需要用到resnet18 pytorch 版本的imagenet预训练模型,所以还需要pytorch

pip install torch

  • 转换与训练模型:

下载imagenet预训练模型resnet18, 放到新建pretrained文件夹下,

python convert.py

得到如下:

python train.py

训练数据比较大,在平衡正负样本比例之后,一个epoch实际接近150万数据。

4.测试提交

指定测试模型的参数路径,

指定测试数据集路径,

最后直接运行测试脚本

python test.py

1000个测试样本(注意:有部分测试数据集图像包含两个人脸,可能一个是真样本,一个是假样本,按理解只要图像里面有攻击样本,图像就应该为攻击样本),下载测试提交样式,然后提交测试结果(注意提交的是json文件的压缩包,且压缩包不能包含文件夹)。

Learning Generalized Spoof Cues for Face Anti-spoofing论文解读及复现笔记相关推荐

  1. Learning Generalized Spoof Cues for Face Anti-spoofing

    Learning Generalized Spoof Cues for Face Anti-spoofing paper PDF 文章目录 Intorduction Innovation Method ...

  2. 2020百度-Learning Generalized Spoof Cues for Face Anti-spoofing 学习笔记

    现有人脸反欺骗方法:针对一些预定义的欺骗类型对决策边界进行建模. 存在问题:包含未知样本的欺骗攻击的多样性阻碍了有效的决策边界建模,导致泛化能力较弱. 本文创新思路:从异常检测的角度对人脸欺骗检测进行 ...

  3. 基于深度强化学习的车道线检测和定位(Deep reinforcement learning based lane detection and localization) 论文解读+代码复现

    之前读过这篇论文,导师说要复现,这里记录一下.废话不多说,再重读一下论文. 注:非一字一句翻译.个人理解,一定偏颇. 基于深度强化学习的车道检测和定位 官方源码下载:https://github.co ...

  4. RGCF:Learning to Denoise Unreliable Interactions forGraph Collaborative Filtering论文解读

    这篇和之前的一篇工作简称是一样的,但是内容完全不同,本文是Robust Graph Collaborative Filtering (RGCF),注意甄别 一.前言 最近,图神经网络(GNN)作为一种 ...

  5. Vocabulary Learning via Optimal Transport for Neural Machine Translation论文解读

    abstract token vocabulary的选择对机器翻译结果的影响比较大 本文研究什么样才是好的词表,并且能不能不通过训练直接找到最优的词表 首先提供一种从信息理论的角度来分析词表的作用 通 ...

  6. When Does Machine Learning FAIL? Generalized Transferability for Evasion and Poisoning Attacks论文笔记

    When Does Machine Learning FAIL? Generalized Transferability for Evasion and Poisoning Attacks论文笔记 该 ...

  7. 自监督学习(Self-Supervised Learning)多篇论文解读(下)

    自监督学习(Self-Supervised Learning)多篇论文解读(下) 之前的研究思路主要是设计各种各样的pretext任务,比如patch相对位置预测.旋转预测.灰度图片上色.视频帧排序等 ...

  8. 自监督学习(Self-Supervised Learning)多篇论文解读(上)

    自监督学习(Self-Supervised Learning)多篇论文解读(上) 前言 Supervised deep learning由于需要大量标注信息,同时之前大量的研究已经解决了许多问题.所以 ...

  9. AI:Algorithmia《2020 state of enterprise machine learning—2020年企业机器学习状况》翻译与解读

    AI:Algorithmia<2020 state of enterprise machine learning-2020年企业机器学习状况>翻译与解读 目录 <2020 state ...

最新文章

  1. 《分布式服务架构:原理、设计与实战》第二章彻底解决分布式系统一致性的问题...
  2. gin自定义HTTP配置
  3. 从0系统学 Android--1.1认识 Android
  4. 图片存储解决方案的分析
  5. 世界最厉害的14位程序员,你认识几个?
  6. windows远程连接linux-安装xfce界面,ubuntn添加新用户
  7. Redis(八):Zset有序集合数据类型详解
  8. H264--4--H264编码[7]
  9. 项目实用-不登录就无法访问主页
  10. MySQL 之 库操作
  11. matlab小波包分析,小波分析及小波包分析
  12. php获取图片格式(图片后缀)
  13. 机器学习中几种常见的乘积(product)
  14. 第一章 富爸爸,穷爸爸
  15. 关于mingw32-make的错误
  16. 计算机基础课程的金课,我校8门课程获批省级线上“金课”
  17. 运放-1-理想运放与虚断虚短的来源
  18. 两个礼拜速成软考中级软件设计师经验
  19. 软考高级证书在积分落户政策上可以积分50分
  20. Python简易画图软件开发

热门文章

  1. Unity2019新技术探索
  2. TP升级到3.2.3的注意事项
  3. 比大龄单身更可怕的是大龄测试,35的测试是失业or转行?
  4. 写一个python程序,要求能够输入关键词,而后输入一段句子可以检查出句子中的与关键词类似的错别字,并标记出来...
  5. ARM-ASM汇编指令
  6. hmailserver 及其webmail的配置(仅限局域网内测试)---续
  7. visio第三次作业
  8. 怎样取消连续包月自动续费_手机爱奇艺会员怎么取消自动续费 VIP关闭解除自动续费方法...
  9. 微信小程序设置简单的监听器(转载)
  10. 微信开发者工具 黑屏_解决微信开发者工具黑屏