贺 琨,李 智*,王国美,张 健
(1. 贵州省智能医学影像分析与精准诊断重点实验室,贵州 贵阳 550025;
2. 贵州大学计算机科学与技术学院,贵州 贵阳 550025)
随着视频社交App用户数量日益增加,越来越多的人在社交软件上热衷短视频的拍摄与分享,随着各类专业视频编辑软件,如Sony Vegas、会声会影、爱剪辑等的普及,使得视频编辑的门槛大幅降低,人们不再满足于单纯地拍摄分享短视频,而是使用视频编辑软件对视频短片进行精心的后期处理后再上传,正常使用视频编辑软件对原始视频进行后期处理本质上也是一种篡改,但是这种篡改对原始视频有着正面且无害的影响,比如常见的嵌入字幕、电影后期处理、视频艺术加工等。而恶意地篡改视频是指在视频帧序列中加入不存在的人或物,这类篡改视频[1-2]将产生不正确的舆论导向甚至造成严重的社会影响,为此,需要提出相应的篡改检测方案来应对恶意篡改视频的威胁。在各类篡改视频中,视频时域复制粘贴类篡改[3]的被动取证研究具有较高的应用价值与研究意义。时域复制粘贴类篡改是一种将原始视频中某个时间段出现的视频内容复制粘贴到同一个视频的其它时间段中的篡改,得到的篡改视频无法凭肉眼辨别出篡改痕迹。如果将视频作为法律证据,则必须证实其真实性。
视频取证技术分为主动取证和被动取证,其中被动取证无需往视频中额外添加版权信息,仅靠视频自身信息就可对视频的真实性和完整性进行判定,因此被动取证方法适用场景更为广泛,已成为当前信息安全领域的一个研究热点。视频被动取证大致分为帧内取证与帧间取证:帧内取证是对视频单帧内容进行特征提取,通过提取的特征是否包含篡改痕迹从而判断视频是否被篡改,而帧间取证是观察比较帧与帧之间的关联性是否异常,从而判断视频是否经过篡改。
针对帧内取证的研究,研究学者们提出各类传统方法对帧内篡改来进行检测,徐俊瑜[7]提出通过检测视频帧是否经过滤波的方式来判断视频是否经过帧内篡改,因为篡改者需用滤波使整个篡改视频帧看起来更自然,但此算法在检测没有经过滤波处理的篡改视频时则完全失效。张璐波[5]等提出一种基于LK光流的视频帧内运动目标复制粘贴篡改检测算法,通过提取运动目标区域的光流值然后根据光流的相关性筛选,寻找可能的篡改序列,最后利用特征匹配完成篡改检测,但此算法针对运动目标较小的复制粘贴篡改检测效果比较有限。李倩[6]用对称帧差法检测单帧运动对象删除区域,可以对篡改后的未压缩视频进行有效的识别,但目前视频均为压缩视频,该算法的应用领域有着较大的局限性。Bidokhti[4]等提出将视频帧分区,然后计算并观察各个分区的光流系数是否异常,以此来判断视频帧是否经过复制粘贴篡改,但该算法检测结果容易受到视频GOP长度影响,算法鲁棒性并不高。Li等[8]提出对运动矢量特征进行分析,用于判断静止背景的视频是否经过移除类篡改,但该算法对于运动较为复杂的视频检测效果有限。Pandey[9]等使用SIFT算法从视频帧内的物品提取特征,并用该特征检测出复制、移除型篡改,但由于SIFT算法计算复杂度较高,对视频进行SIFT计算负荷过于庞大。
随着深度学习在图像识别、目标检测等领域的广泛应用,研究者们开始使用深度学习对图像与视频帧内取证进行相关研究。Adobe公司提出将图像与其所对应的噪声作为双流[10]输入到Faster R-CNN[11]进行深度学习分类,可以很好地检测出图像的拼接、复制以及移除篡改区域。YeYao[12]等提出将输入帧经过特定的高通滤波器得到残差信号,再经过特定结构的CNN进行篡改判别的深度学习方案,与直接使用各类隐写分析算法得到的篡改判别结果相比,其提出的算法取得更好的实验结果,但YeYao提出的网络结构中使用超大型池化层,这会造成特征图的信息严重丢失,对分类的正确性造成较大的负面影响。陈临强等[13]提出使用C3D神经网络结合SRM的空域滤波器进行视频帧篡改检测,与不带SRM层的C3D网络相比,带SRM层的C3D取得更好的实验结果。
为了进一步提升视频取证算法的准确率,本文提出使用双流CNN与通道注意力机制相结合对输入视频帧进行帧内取证的方案,一个CNN提取篡改特征,另一个CNN用于对输入视频帧的内容进行特征提取。两个CNN分别获得所提取到的特征后,将两部分特征进行融合处理,并使用通道注意力机制调整两部分特征的通道权重,这样网络可以兼顾篡改特征和内容特征。相比于传统取证算法,本文算法具有以下优势:1)算法对预测结果的判断不需要人工干预,减少了因人为失误所带来的误差;
2)将两个取证思路不同的CNN各自输出的结果结合起来作为总特征用于篡改检测,进一步地提高了取证算法的通用性与准确性。
2.1 隐写分析思想与帧内取证
隐写术是通过向多媒体中隐秘地嵌入极少量的信息以满足信息传递的保密性,如果非法使用隐写术传输危险的隐秘信息,会给社会带来各种危害,且不容易被察觉。为此,针对隐写术的非正常使用提出使用隐写分析对隐写术进行检测和防御。由于隐写术是篡改隐秘程度的最高标准,本文借鉴隐写分析的研究思路,用于检测篡改幅度较大的帧内取证算法,从而提高帧内取证算法的分类性能。隐写分析算法通常对输入图像使用多个的高通滤波,这些高通滤波被称为空域富模型[14](Spatial Rich Model,SRM),用于提取图像不同类型的噪声残差。在隐写分析中,由于隐写通常只会对像素进行较小的改动,因此隐写对图像造成的改动并不会使得图像内容产生改变,为此隐写分析时通常使用SRM来提取输入图像的噪声残差,使得隐写分析算法能够专注于像素的小改动,而不去关注图像内容产生的变化[14];
本文使用SRM对视频帧进行噪声残差提取也是出于同样的目的,视频篡改时不一定会对视频帧内容产生较大的影响但会在视频帧中留下较小的篡改痕迹,这类痕迹在高频区域[15]往往会更加明显[13],取证算法通过视频帧的高频噪声残差能够从像素层面关注到视频帧像素因篡改而产生的细微变化,而非只是一昧地关注篡改对视频帧内容产生的影响,从而能更好地对篡改特征进行提取。因此,本文提出的帧内取证算法在网络的起始位置加入SRM卷积层,使网络通过噪声残差信息更好地获得输入视频帧的篡改特征,并利用激活函数实现本算法的截断操作以降低取证算法的运算负担。
2.2 用于帧内取证的Inception-V4 SRM CNN
1)SRM卷积层
空域富模型[14](SRM)算法是设计一系列的高通滤波器,如图1所示,其主要作用是提取输入视频帧的噪声残差,不同的滤波器得到基于帧内容的不同的噪声残差特征,因此联合使用多个SRM高通滤波器可以检测多种篡改情况的篡改特征,以在最后二分类实验中获得更高的正确率。另外训练时将SRM卷积层的参数设置为不可训练,使得SRM高通滤波器提取噪声残差的功能不会受到影响。
图1 部分SRM高通滤波卷积核
同时在SRM卷积层中使用TLU(截断线性函数)作为激活函数,将得到的噪声残差信息截断在指定范围内,如式(1)所示,这样可以在保留关键残差噪声信息的同时,舍弃掉冗余的信息,从而降低深度学习网络的运算负担。
图2 CNN结构
(1)
2)双流CNN结构
本文提出基于双流卷积神经网络的视频帧内取证算法,其中一个CNN将SRM模块放在整个网络的最前端用于提取视频帧的残差特征,另一个CNN对视频帧的内容进行学习,提取出基于视频帧的内容特征,之后将两个CNN学习得到的特征进行融合作为分类依据,这样整体网络既能提取到篡改特征,又包含视频帧的内容信息。本文以Google团队所提出的Inception-V4[16]神经网络为主要框架用于本文所提出的双流CNN结构,第一个CNN网络框架在Inception-V4的起始位置处加入SRM卷积层,从输入视频帧的噪声残差中获取篡改痕迹特征,另一个CNN网络框架是使用Inception-V4 直接从输入视频帧中获取每一帧的内容特征,最后将两个CNN学习到的特征进行融合作为输入视频帧的总特征。双流CNN总体结构如图2所示。
3)网络主要模块
Inception-V4中主要包含Stem、Inception与Reduction三大模块。其中Stem模块使用并行且不对称的网络结构,使用尺寸1x1的卷积核来对输入特征图进行降维,在保证信息损失足够小的前提下,降低网络的计算量。Inception模块则使用四路并行结构,获取不同的感受野,结构中部署各类尺寸的卷积核,但由于Inception模块中层次更深,结构更复杂,所以需要在其后面添加Reduction模块,以降低运算负担。Reduction模块是并行且不对称的卷积结构,跟Stem模块一样使用了1x1的卷积核以降低计算量,并且其卷积层步长均为2,能进一步地降低特征图的尺寸,从而有效地降低计算复杂度。
4)双流CNN特征融合
当两个CNN都学习输出特征后,为得到更为全面的二分类判断依据,需要融合两个CNN的输出结果得到合并特征图。由于合并后的特征未体现各通道的重要性,因此两个通道中既有重要特征也有冗余特征,需引导网络将计算资源偏向合并特征中最为重要的部分,并抑制冗余特征,为此本文需要借助通道注意力机制来调整合并后两个特征的通道权重。
本文通过SE(Squeeze and Excitation) Block来实现对合并特征图中的各通道权重进行调整,首先将全局空域信息压缩(Squeeze)为通道描述子,实际操作为使用全局平均池化生成合并特征图中各通道统计量z,如式(2)所示,其中U代表合并后的特征图像,H代表图像高度,W代表图像宽度,C代表图像通道数。SE Block整体结构如图3所示。
(2)
图3 调节各通道权重的SE Block结构
s=sigmoid(FC2(ReLU(FC1(z))))
(3)
最后将激励权重与合并特征图做乘积运算,得到调节通道权重后的合并特征图X,如式(4)所示,从而实现调节合并特征图中各通道权重的目的。
X=FScale(s,U(i,j))=s·U(i,j)
(4)
5)输出结果
在得到合并特征后,将其导入平均池化层以降低特征尺寸,并进行Dropout以防止产生过拟合现象。最后做全连接处理得到二分类结果值,通过Softmax层使得分类结果收敛于0到1的闭区间中,最终得到的概率值便为输入视频帧的正常/篡改判定概率值。
6)损失函数
由于对输入的视频帧进行取证本质上是一个二分类问题,为此网络损失的计算则为直接使用交叉熵函数,如式(5)所示
(5)
2.3 帧内取证数据集
2.3.1 实验用数据集
本次帧内取证实验,选取网上公开的由P.Bestagini等人[18]制作的REWIND帧内篡改数据集[19]来进行实验,REWIND基于由英国萨里大学的视频取证团队[20]制作的SULFA数据集[21]所制作。SULFA中包含了大量由不同摄像机所拍摄的原始真实视频,而REWIND在其中挑选部分视频做复制粘贴型帧内篡改,将篡改视频与对应的原始视频组成取证数据集。
REWIND数据集中包含了40个原始视频与40个篡改视频(含不同压缩程度的视频),其中每一个原始视频均与一个篡改视频所相对应,原始视频均未经过任何形式的篡改操作,而篡改视频则为通过将原始视频中某个时间段出现的视频内容复制粘贴到同一个视频中的其它时间段中所形成。所有视频均为使用H.264进行压缩编码,帧分辨率为320x240,数据集中的视频帧率有25fps、29.97fps、30fps三种。
本文按照10:1的原则从整个数据集中划分得到训练集与测试集,同时本文以分块的形式对视频帧进行数据增强,以此来进一步地扩充整个数据集的数量,并平衡原始视频帧与篡改视频帧的数量,防止训练的网络产生欠拟合现象。
2.3.2 复制粘贴帧内篡改数据集
本文使用的视频数据集包含原始的无篡改视频数据集和与原始无篡改视频所对应的篡改视频数据集,将它们解码后便能得到一系列的视频帧。无篡改视频解码得到的全部帧均为无篡改视频帧,而篡改视频解码得到的视频帧一部分是正常视频帧,另一部分是篡改视频帧。同一时间点下的正常视频帧与其所对应的篡改视频帧的对比如图4所示。
图4中右图为篡改视频帧,手拿大象艺术品为视频帧的篡改部分,这其实是一种“复制粘贴”型篡改,它复制于同一视频,其它时间段中某一视频帧中手拿大象艺术品的内容。邻近篡改帧中也做了同样的复制粘贴操作,这样重新编码得到的篡改视频就在本不应该有手拿大象艺术品的时间段内出现手拿大象艺术品,光凭肉眼很难看出来该视频经过篡改。
图4 正常视频帧与篡改视频帧的对比(左图为正常视频帧)
本文使用这类复制粘贴型篡改数据集输入双流CNN网络框架来进行训练,使得提出的算法能够成功地分类识别出复制粘贴型帧内篡改。但是这类帧内篡改数据集通常存在着两个问题:一是整体数据量偏小,很难满足深度学习需要大量学习样本的要求;
二是视频数据集中篡改帧数据集数量往往远远小于正常帧数据集的数量,这是因为正常视频解码得到的视频帧均为正常视频帧,而篡改视频解码得到的视频帧中只有部分为篡改视频帧,剩余的帧皆为正常视频帧,由于正常帧和篡改帧数量严重不平衡,将会影响到深度学习框架的训练效果。为解决上述两个问题,本文对视频数据集进行扩充,以解决数据量偏小以及正常和篡改数据集两者数量不平衡问题。
2.3.3 数据增强
本文通过对原始视频帧进行分割得到新的视频帧的方式对数据集进行数据增强[17]。针对正常数据集,由于其自身数据量较多,所以只采用将单张正常视频帧分割出三张视频帧的方案来进行数据增强。具体做法如下:
定义一个正方形分割框,框的高度和原始视频帧的高度一致,框宽度则与高度一致。将分割框放在正常视频帧上滑动,由于正常视频帧只需分割出三张增强数据集,本文便将分割框分别滑动到视频帧的左、中、右三个位置进行分割,因此得到对应位置的分割视频帧作为增强数据,分割流程如图5所示。
针对篡改数据集,由于其自身数据量较少,所以本着尽可能多地增加篡改数据集的原则,本文使用同一个正方形分割框来分割出尽量多的分割视频帧作为增强篡改数据集,为此设定每次拖动分割窗的步长为10个像素,每拖动一次就得到一个篡改视频帧。但是与分割正常数据集情况有所不同的是,针对于篡改数据帧要额外地关注帧的篡改内容,在尽可能多地分割篡改帧的同时也要保证分割框要包含全部或部分的篡改内容,这样才能保证分割得到的为篡改视频帧,分割流程如图6所示。
图5 在正常帧数据集上滑动分割框得到3张分割的正常视频帧
通过使用数据增强策略,使得原本数据量不够丰富的视频帧数据集得到了一定的扩充。尤其是数量远少于正常视频帧的篡改视频帧,其原始篡改帧被尽可能多地分割出新的篡改帧,达到对数量稀少的篡改帧进行增强的目的,这样便能够平衡正常视频帧与篡改视频帧彼此之间的数量差距。
图6 在篡改帧数据集上滑动分割框得到N张分割的正常视频帧
3.1 算法思想
本文对导入的视频进行解码操作,得到一系列的视频帧序列S,设fi代表视频帧的第i帧,其中N是视频帧长度,得到式(6)。
(6)
将视频帧fi逐一输入到本文提出的双流CNN,最后计算得到每一帧的篡改概率pi。
(7)
设定当某一帧fi的篡改概率pi大于0.5时,则将此帧判定为篡改帧。由于式(7)每一帧的篡改概率pi与视频帧序列fi一一对应,因此篡改概率大于0.5就能判断与之对应的视频帧fi存在篡改,如式(8)所示,同时利用这一点还能达到对导入视频含有的篡改帧进行定位的目的。
(8)
当导入视频中有一定数量的帧被算法判定为篡改帧时,则判定导入的视频为篡改视频,相反没有帧被判定为篡改帧时,则将导入的视频判定为正常视频。但是要特别说明的是,当导入视频仅有零星数帧被判定为篡改帧时,依旧将导入视频判定为正常视频,这是因为篡改视频如果要达到篡改效果,篡改者通常需要对视频内的很多帧均进行篡改,如果只对少量帧进行篡改,那么重编码得到的篡改视频的播放视觉效果跟原始视频几乎没区别,这样的做法没有达到篡改目的,并且考虑到算法分类器通常存在一定误差导致误判,为此当导入视频只有零散的一两帧被判为篡改帧时,基于误差的考虑,将输入视频判定为正常视频。
3.2 实验步骤
本文使用Facebook公司推出的深度学习框架Pytorch对Inception-V4网络进行搭建,训练时使用的GPU为NVIDIA Tesla V100,损失计算使用交叉熵函数,优化器使用Adam,并设置学习率为5e-5,batchsize设置为16。
流程如下图7所示,在实验中对数据集进行数据增强并进行分类标记后,将所有训练集中每一帧输入Inception-V4进行训练,对整体模型进行参数调整,直至损失率降到最低且参数完善后停止,训练好的参数与权重将直接用于之后的测试工作。测试时,将测试集中视频的每一帧输入Inception-V4得到篡改概率值,根据篡改概率值的大小判断输入帧是否被篡改,之后与测试集的实际情况进行对比以判断分类的正误,对所有帧进行了测试后,将根据测试结果来判断网络的分类性能。
图7 CNN帧内取证算法流程图
3.3 评估指标
为了验证该模型帧内取证的性能,本文采用了以下的评估指标:
1)视频帧识别准确率FACC(Frame Accuracy),如式(9)所示。
(9)
TP(True Positive):真正例,预测为篡改帧,实际为篡改帧的样例数量。
TN(True Negative):真反例,预测为正常帧,实际为正常帧的样例数量。
FP(False Positive):假正例,预测为篡改帧,实际为正常帧的样例数量。
FN(False Negative):假反例,预测为正常帧,实际为篡改帧的样例数量。
2)正常视频帧识别准确率PFACC(Pristine Frame Accuracy),如式(10)所示。
(10)
3)篡改视频帧识别准确率FFACC(Forged Frame Accuracy)与召回率Recall,如式(11)所示。
(11)
4)视频识别准确率VACC(Video Accuracy),如式(12)所示。
(12)
5)篡改视频识别精确率Precision,如式(13)所示。
(13)
6)综合评价指标F1-Score,如式(14)所示。
(14)
3.4 实验结果
1) 时域定位实验
在得到双流Inception-V4的实验结果后,本文与其它取证算法作对比实验。对比的算法中SRM[14]、SPAM[22]、CC-JRM[23]算法为传统隐写分析算法,YeNet[24]算法则为基于深度学习的隐写分析算法,Yao[12]算法与SRM+C3D[13]算法则和本文一样是基于深度学习的帧内取证算法。本文使用3.3节提出的各个评估指标来评判算法的分类性能,将所有算法的实验结果进行比对,得到的结果如下表1所示。
表1 各个算法的帧内取证实验结果
从表1可以看出,本文提出的双流CNN算法Inception-V4 Bi-Channel在大部分指标中取得了最好的成绩,体现算法的准确性与有效性,尤其是与同为基于深度学习的帧内取证算法Yao[12]和SRM+C3D[13]相比,本文的算法在FACC,PFACC,F1-Score等指标上均有较大幅度的提高。
2) 消融实验
在1)中本文提出的双流CNN帧内取证算法已被证实具有较高的准确率与有效性,但为了验证合并双流CNN的思路对帧内取证是否有正面效果,还需要进行消融实验,为此使用双流CNN中的两个支流CNN:Inception-V4、Inception-V4 SRM分别进行取证实验,得到的实验结果如下表2所示。
表2 消融实验结果
从实验结果可知,本文提出的Inception-V4 Bi-Channel双流CNN算法取证得到的实验结果大部分均优于单个支流CNN的取证实验结果,证明本文提出的合并双流CNN进行帧内取证的思路是正确的。
3) 迭代实验
从实验过程中发现,即使训练过程中损失早已趋近于0,但随着训练迭代次数的不断增加,算法得到的FACC还在随之不断地变化,为此本文进一步地提高训练的迭代次数,以此来观察随着迭代次数的增加对取证准确率的实验结果产生怎样的影响,实验结果如图8所示。由图8可知,随着迭代次数的逐渐增加,整体上FACC也是向上增加的趋势,当迭代次数达到1000次的时候,FACC值达到99%以上。说明对训练集进行多次重复迭代的训练将有助于FACC的提高,但是伴随迭代次数的继续增长,如迭代次数增长到1100次—1200次时,FACC增长的趋势最终也会趋于平缓,FACC的值没有伴随着迭代次数的增加而无限增长。
4) 重编码攻击实验
本文将原本编码格式为H264的视频数据集分别重编码为MPEG2、MPEG4与H265这三种新的编码格式视频,然后对新得到的视频数据集直接做取证实验,得到的实验结果如下表2所示。从表中数据可知,本文提出的算法对经过其它编码器重编码的视频数据集进行取证后也取得较好的取证结果,说明本文提出的算法能够抵抗重编码攻击,从而证明了本文提出的算法对内容相同但是编码格式不同的视频也能顺利地进行帧内取证。
图8 随着迭代次数增加FACC的变化趋势图
表3 重编码攻击的帧内取证实验结果
基于Inception-V4神经网络模型,本文构建了一个双流CNN帧内取证网络,利用两个CNN对输入视频帧进行特征提取。一个CNN借助隐写分析思想在网络中加入空域富模型(SRM)卷积层进行噪声残差提取,网络在得到的残差中能够专注于对篡改特征进行提取,另一个CNN用于对输入视频帧的内容进行特征提取,根据监测视频帧内容的变化幅度预测得到视频帧经过篡改的概率;
之后将两CNN提取到的特征进行合并处理,并使用通道注意力机制调整两部分特征的通道权重,使得本文所提出的网络能同时对篡改特征和内容特征进行学习。通过多组实验对比,结果证明本文算法对不同场景下的时域复制粘贴类帧内篡改有着相当高的篡改检测准确率,在其它评估指标中如FACC,F1-Score等也大部分优于其它取证算法。并且本文提出的算法能够有效地抵挡重编码攻击,对重编码为其它格式但内容相同的视频依然能顺利地进行帧内取证,证明本算法具有一定的鲁棒性。但是算法也存在网络模型计算量过于庞大、模型训练耗时较大的缺点。今后工作中将继续研究如何在保证取证精度的同时减少计算量并加快模型训练速度。