Exposing Deep Fakes Using Inconsistent Head Poses论文详记

Exposing Deep Fakes Using Inconsistent Head Poses论文详记ExposingDeepFakesUsingInconsistentHeadPoses论文详记一、论文简述二、论文内容A、三维头部姿势估计B、DeepFake中头部姿势的不一致性C、基于头部姿势的分类三、论文实验及结果一、论文简述利用3D头部姿势误差检测DeepFake视频,属于基于帧内图像伪影的检测方法,使用低级语义层次特征+SVM分类器,属于浅层分类器方法。二、论文内容作者观察到,在DeepFake产生的过程中,会把生成的虚假人脸拼接到源视频图像中的人脸区域,在这个过程中,将不可避免

大家好,又见面了,我是你们的朋友全栈君。


原文链接
https://ieeexplore.ieee.org/abstract/document/8683164.

一、论文简述

利用3D头部姿势误差检测DeepFake视频,属于基于帧内图像伪影的检测方法,使用低级语义层次特征+SVM分类器,属于浅层分类器方法

二、论文内容

作者观察到,在DeepFake产生的过程中,会把生成的虚假人脸拼接到源视频图像中的人脸区域,在这个过程中,将不可避免地引入一种三维头部姿势误差,这种误差是基于深度神经网络人脸合成模型的内在局限性。具体来说,基于神经网络的额算法生成新的虚假人脸,同时在生成人脸中保持源人脸的面部表情,然而,这个过程中无法保证生成人脸和源人脸的面部LandMark(LandMark是人类面部一些重要结构的位置,比如眼镜、嘴角等)相一致。LandMark位置的误差可能不能直接通过肉眼察觉,但可以通过面部中真实部分和伪造部分(中心区域)的二维LandMark估计的头部姿势(即头部方向和位置)的差距来揭示。3D头部姿势误差
如上图所示,图左边是DeepFake的生成流,其中(a)是原始图像,(b)是图像中的人脸区域,(c)是检测出来的2D人脸LandMark,(d)对(a)中的人脸区域做仿射变换(旋转、缩放等),转化成标准化的脸部区域,(e)是深度神经网络合成的脸部区域,并保有(d)中的面部表情,(f)利用(d)中的逆仿射变换,将合成的面部区域匹配回源视频中的面部形状,(g)将合成的脸部融合进源图片中,得到(h)为虚假图片。图右边为本文方法的overview,其中上面一行对应于真实图片,下面一行对应于虚假图片。作者比较了使用整个脸部的LandMark(j和m)以及仅使用脸部中心区域的LandMark(i和l)估计的头部姿势,发现真实图片中两者差距不大,而虚假图片中两者在图像平面的投影方向不一致,由此,作者利用整个脸部的LandMark与中心区域的LandMark估计头部姿态的差异作为特征向量,训练了一个简单的基于SVM的分类器来区分真实视频和DeepFake视频

A、三维头部姿势估计

三维头部姿势对应于真实坐标到相应相机坐标的旋转和平移。具体地,将[U,V,W]T表示为一个面部LandMark的真实坐标,[X,Y,Z]T表示为其相机坐标,(x,y)T表示为其图像坐标。真实坐标系和相机坐标系之间的转换可以表示为:
[ X Y Z ] = R [ U V W ] + t → (1) {\left[ \begin{array}{ccc} X \\ Y \\ Z \end{array} \right ]} = R { \left[ \begin{array}{ccc} U \\ V \\ W \end{array} \right ]} + \mathop{t}\limits ^{\rightarrow} \tag{1} XYZ=RUVW+t(1)
其中R是3×3的旋转矩阵, t → \mathop{t}\limits ^{\rightarrow} t是3×1的偏移矩阵,则摄像机和图像坐标系之间的转化定义为:
s [ x y 1 ] = R [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] (2) {s\left[ \begin{array}{ccc} x \\ y \\ 1 \end{array} \right ]} = R { \left[ \begin{array}{ccc} f_x & 0 & c_x\\ 0 & f_y & c_y\\ 0 & 0 & 1 \end{array} \right ]} { \left[ \begin{array}{ccc} X\\ Y \\ Z \end{array} \right ]} \tag{2} sxy1=Rfx000fy0cxcy1XYZ(2)
其中 f x f_x fx f y f_y fy是X、Y方向上的焦距, ( c x , c y ) (c_x,c_y) (cx,cy)是光学中心, s s s是一个未知的缩放因子。

在三维头部姿势估计中,我们需要解决的是反向的问题,即使用从标准模型获取的同一组面部LandMark的二维图像坐标 ( x i , y i ) (x_i,y_i) (xi,yi)和三维真实坐标 ( U i , V i , W i ) (U_i,V_i,W_i) (Ui,Vi,Wi)来估计 s s s R R R t → \mathop{t}\limits ^{\rightarrow} t。例如:假设相机参数已知(即 f x f_x fx f y f_y fy ( c x , c y ) (c_x,c_y) (cx,cy)已知),针对一个3D人脸模型,对于1组共n个面部LandMark,可以表述为以下一个优化问题:
m i n s , R , t → ∑ i = 1 n ∣ ∣ s [ x i y i 1 ] − [ f x 0 c x 0 f y c y 0 0 1 ] ( R [ U i V i W i ] + t → ) ∣ ∣ 2 \underset{s,R,\mathop{t}\limits ^{\rightarrow}}{min} \sum_{i=1}^n|| {s\left[ \begin{array}{ccc} x_i \\ y_i \\ 1 \end{array} \right ]} – { \left[ \begin{array}{ccc} f_x & 0 & c_x\\ 0 & f_y & c_y\\ 0 & 0 & 1 \end{array} \right ]} ( {R\left[ \begin{array}{ccc} U_i \\ V_i \\ W_i \end{array} \right ]} + \mathop{t}\limits ^{\rightarrow} )||^2 s,R,tmini=1nsxiyi1fx000fy0cxcy1(RUiViWi+t)2
上面这个优化公式可以利用Levenberg-Marquardt算法有效地解决,得到估计的R是摄像机姿态,它是摄像机相对于真实世界坐标的旋转,则头部姿态是通过将其反转为RT(因为R是一个正交矩阵)来获得的。

B、DeepFake中头部姿势的不一致性

如上图(c)所示,DeepFake处理会将面部中心区域P0中的LandMark仿射变换为P0_in=MP0,通过生成模型后,其对应的LandMark在合成面部上是Q0_out。由于DeepFake中的生成神经网络不能保证LandMark的匹配,而且不同人有不同的面部结构,这便导致了Q0_out与P0_in具有不同的位置。通过比较795张64×64图像的51个中心区域LandMark,得出生成性神经网络中LandMark从输入到输出的平均偏移量为1.540像素,偏移标准差为0.921像素。经过逆变换后得到Q0=M-1Q0_out,显然虚假人脸中的标志点位置Q0也会不同于原始人脸中的标志点位置P0

然而由于DeepFake处理中一般只替换面部的中心区域,面部外轮廓上的标志点位置不会改变,这种合成面部中心点和外轮廓点之间的不匹配被进一步揭示为由中心位置LandMark和整个面部LandMark估计的三维头部姿势的不一致。在真实图像中,中心区域和整个人脸区域的头部姿态差异较小,而在虚假图像中,中心区域和整个人脸区域的头部姿态差异较大。

作者进行实验来证实假设,为简单起见,只考虑头部方向向量。设 R a T R_a^T RaT是由整个脸部LandMark(下图中的红点加蓝点)估计的旋转矩阵,设 R c T R_c^T RcT是仅由面部中心区域LandMark(下图中的红点)估计的旋转矩阵
在这里插入图片描述
我们可以得到两种方法对应的头部方向的三维单位向量( w → = [ 0 , 0 , 1 ] T \mathop{w}\limits ^{\rightarrow}=[0,0,1]^T w=[0,0,1]T,是真实坐标轴的W轴方向):
v a → = R a T w → , v c → = R c T w → \mathop{v_a}\limits ^{\rightarrow}=R_a^T\mathop{w}\limits ^{\rightarrow}, \mathop{v_c}\limits ^{\rightarrow}=R_c^T\mathop{w}\limits ^{\rightarrow} va=RaTwvc=RcTw
之后我们比较 v a → \mathop{v_a}\limits ^{\rightarrow} va v c → \mathop{v_c}\limits ^{\rightarrow} vc之间的余弦距离,即: 1 − v a → ⋅ v c → / ( ∣ ∣ v a → ∣ ∣ ∣ ∣ v c ∣ ∣ ) 1-\mathop{v_a}\limits ^{\rightarrow}·\mathop{v_c}\limits ^{\rightarrow}/(||\mathop{v_a}\limits ^{\rightarrow}||||\mathop{v_c}\limits||) 1vavc/(vavc),易知式子取值[0,2],当为0时, c o s θ = 1 cos{\theta}=1 cosθ=1,即 θ = 0 {\theta}=0 θ=0,此时 v a → \mathop{v_a}\limits ^{\rightarrow} va v c → \mathop{v_c}\limits ^{\rightarrow} vc方向一致。下图所示是一组原始图片和DeepFake图片中 v a → \mathop{v_a}\limits ^{\rightarrow} va v c → \mathop{v_c}\limits ^{\rightarrow} vc之间的余弦距离的统计直方图比较。
va和va之间的余弦距离的统计直方图
显而易见,真实图像估计的两个头部姿态向量的余弦距离集中在一个显著较小的范围内,最大值可达0.02,而对于DeepFakes,大多数值在0.02到0.08之间。 两个头部姿势向量的余弦距离分布的差异表明,它们可以根据这个线索进行区分。

C、基于头部姿势的分类

作者进一步利用上述分析训练了一个SVM分类。首先使用DLib工具包在每帧的图像中检测人脸并提取68个脸部LandMark,然后借助OpenFace2工具包,分别利用全脸特征点(蓝加红)和中心区域特征点(红)估计出头部姿势(作者将相机焦距近似为图像的宽度和高度,将光学中心近似为图像中心,即忽略了镜头畸变带来的影响),最后将获得的旋转矩阵之间的差距 ( R a − R c ) (R_a-R_c) (RaRc)和平移矩阵之间的差距 ( t a → − t c → ) (\mathop{t_a}\limits ^{\rightarrow}-\mathop{t_c}\limits ^{\rightarrow}) (tatc)展平成向量,并减去均值,除以标准差达到归一化的效果,最终用于分类。

三、论文实验及结果

实验数据集:①UADFV;② DARPA MediFor GAN Image/Video Challenge
实验效果:以AUROC作为性能度量,分类特征为 ( R a − R c ) & ( t a → − t c → ) (R_a-R_c)\&(\mathop{t_a}\limits ^{\rightarrow}-\mathop{t_c}\limits ^{\rightarrow}) (RaRc)&(tatc),效果如下图所示:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141502.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Microsoft store应用商店无法加载页面代码: 0x80131500

    Microsoft store应用商店无法加载页面代码: 0x80131500Microsoftstore应用商店无法加载页面代码:0x80131500出错后我在微软官网查找问题原因,以下设置都可能解决问题:原文建议先尝试更换网络连接,比如连接个人手机热点,再使用MicrosoftStore进行尝试。如果您连接了VPN或下载了第三方防火墙应用,建议断开VPN,卸载第三方防火墙应用。①调整网络连接…

    2022年6月9日
    52
  • 【机房重构】“ConnectionString属性尚未初始化”「建议收藏」

    【机房重构】“ConnectionString属性尚未初始化”「建议收藏」机房重构ing。在每个学习中一直陪伴我们左右的,还是那些大大小小的问题,正因为它们的存在,才让我们的学习有了收获,有了纠结,也有了乐趣。这几天一直在研究sqlhelper和泛型集合的使用,很那什么的说,纠结了几天,今天算是有点结果了,但是结果永远不会轻松而至,看,问题又来了。

    2022年7月15日
    14
  • Git下载安装手把手教程[通俗易懂]

    Git下载安装手把手教程[通俗易懂]Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。下面我们来详细介绍下,在windows10系统下载和安装git的教程,文章结尾有福利哦!Git安装手把手安装教程:第一步:下载Git打开Git官网下载地址https://git-scm.com/downloads因为我使用Windows系统上的浏览器访问的,Git官网自动之别到了我使用的操作系统.

    2022年5月30日
    36
  • 小米5 Android 8.0解bl,小米解BL锁超详细的图文教程「建议收藏」

    小米5 Android 8.0解bl,小米解BL锁超详细的图文教程「建议收藏」BL锁全称bootloader锁,其中bootloader中文名称为“启动加载”,其主要作用是为了保护用户的隐私数据安全,在日常使用的时候感受不到BL锁的存在,但是如果你要对手机进行刷机的话,第一步就是必须先解除手机里的BL锁,部分机子不需要解BL锁,手机是否需要解锁请到手机官方网站进行查看或者咨询。解BL锁会清除手机所有的数据,相当于手机恢复出厂设置,记得提前备份好手机里的所有资料以下是小米解锁…

    2022年5月20日
    63
  • 为低端浏览器定义原型方法matchAll[通俗易懂]

    为低端浏览器定义原型方法matchAll[通俗易懂]String.prototype.matchAll=function(reg){letmatchArr=[];letmatch;while((match=reg.exec(this))!==null){matchArr.push(match);}returnmatchArr;};

    2022年7月23日
    4
  • Spring AOP 最热门面试题及答案「建议收藏」

    Spring AOP 最热门面试题及答案「建议收藏」译者的话前几天去京东面试,被问到AOP相关的问题,之前一直没有系统地学习相关的知识,答得不是很好。趁着假期,找了一下相关的资料,CSDN上有很多不错的文章,看了之后对AOP有比较好的理解了。然后Google了一下AOP相关面试题(AOPinterview),搜出来的第一条结果是一个叫HowToDoInJava的网站上的一篇文章TopSpringAOPIntervie…

    2022年8月11日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号