监控视频帧间篡改检测系统设计与性能优化研究

摘要:监控视频作为司法取证的重要依据,其真实性难以得到保证。帧间篡改作为最常见的视频篡改方式,其检测算法研究已取得大量卓越成果,但在实际场景应用中却面临着许多困难。分析司法场景下对监控视频内容真实性鉴证的现实需求,设计实现了功能完备的帧间篡改检测系统。为了解决系统实现算法的大计算量问题,研究GPU的硬件结构、CUDA的线程模型和内存模型,提出了通过CUDA使用GPU进行性能优化的方法,有效提升了系统性能。

正文内容:

0 引 言

随着互联网技术的发展和进步,日渐强大和便捷的视频图像编辑技术使用户可以轻易对数字图像、视频进行篡改,使得数字图像和视频作为司法证据时难以有效发挥作用。数字图像视频取证旨在检测和分析图像和视频原始内容的真实性,以保证司法有效、公正。为了保证视频原始内容的真实性,学术界已提出了许多主动取证技术,如数字水印技术。通过在录制视频时嵌入认证信息进行真实性验证,但主动取证技术要求在视频录制时就嵌入认证信息,这在现实场景中很难实现。所以,基于视频本身特征的被动取证技术有更大的发展和应用空间。

视频帧间篡改检测技术是被动取证技术的主要分支。视频的帧间篡改方式主要有:帧删除,删除原始视频的一帧或部分帧;针插入,异源帧片段插入原视频;帧复制,同源帧片段插入原视频。现有的帧间篡改检测方法主要分为两类:基于篡改点内容不连续性的方法和基于二次编码周期性效应的方法。

基于二次编码周期性效应的方法最初用于研究JPEG图像的双重压缩检测,2006年开始越来越多的学者将其应用于视频篡改检测。针对两次编码前后视频GOP结构是否对齐、视频的不同编码标准(MPEG-X、H.264、HEVC)、两次编码量化参数是否相同等多种情况,也提出了大量检测算法[1]。基于篡改点内容不连续性的方法研究始于2012年,是帧间篡改检测领域的新方向。Chao等人[2]提出了一种基于LK光流[3]的方法,Wang等人[4]在此基础上进一步研究,提出了基于高斯分布的篡改检测方法。Wu等人[5]使用速度场揭示篡改带来的不连续性。Wang等人[6]提出了一种基于灰度相关性系数稳定性的检测方法。Yin等人[7]将非负张量分解算法应用于帧间篡改检测,提出将待检视频序列用四维张量表示,对其进行Tucker分解后提取时间维度因子矩阵表示视频每帧内容,然后根据相关性检测篡改行为。基于二次编码效应的方法依赖于受检视频的编码参数,而基于内容连续性的方法对编码参数不敏感,具有更好的普适性,在实际应用中更具优势。

本文围绕基于内容连续性的检测方法,设计了针对监控视频的帧间篡改检测系统,对系统的整体架构、功能模块进行了设计实现。在此基础上,该类方法的执行速度较慢。针对这一劣势,对算法进行GPU并行化计算的优化研究和设计实现,实现的系统具有良好的可用性和用户友好性。

1 系统设计

视频篡改检测系统的需求主要源于司法领域,对作为司法证据的监控视频的内容真实性进行验证。现有网络环境下,视频传输速率无法保障。考虑这一实际情况和应用场景的特殊性,系统采用单机应用模式,提供单独友好的GUI(Graphical User Interface,图形用户界面)。系统界面使用Qt库的Python接口PyQt实现。系统核心模块包括视频处理、篡改检测和数据库交互,使用Python、C/C++实现。

1.1 系统总体设计

系统设计是实现系统的首要步骤。只有在合理的架构下开发,才能保证系统最终的可用性。根据应用场景的具体需求,通过对系统的整体分析,设计了视频篡改检测系统的总体模块结构,包括系统状态管理、视频预处理、篡改检测、结果处理分析以及数据管理五大模块,如图1所示。

(1)系统状态

系统状态功能是向用户展示系统当前的运行状态,并对各个状态下用户可以进行执行的操作进行限制和管理。

(2)视频预处理

该模块是将用户选择的视频进行预期处理,为后续的检测工作提供服务。视频分析功能利用FFprobe分析待检视频的编码参数、分辨率等信息。解码功能将待检视频解码成帧序列,其实现依赖于开源库FFmpeg,通过合理的配置使其能够处理尽可能多的视频格式。图像转化功能主要是对解码得到的图像进行通道转化,多为由RGB三通道转为灰度单通道。

(3)篡改检测

该模块是核心功能模块,利用实现的篡改检测算法对待检视频进行检测。系统用C语言移植了文献[2,7]的检测算法,并分析实际应用中存在的问题,设计了相应的功能模块。滑动窗口功能在检测长视频序列时将其划分为短序列,避免以单线操作整个长序列带来的时间消耗。特征计算功能通过解码得到的帧序列计算检测所需的特征。该功能是整个流程中最耗时的部分,也是集中优化的部分。异常检测则是通过检测计算得到的特征中的异常现象,判断待检视频是否遭到篡改并得出篡改点信息。

(4)结果处理

结果处理是为了将待检视频的检测结果以更丰富明晰的方式展现,可视化处理待检视频的篡改信息、视频信息、特征序列,给出多元的检测结果报告。格式化数据组建将展示的结果信息和系统信息等组织成定义好的数据格式,存入数据库作为存档。

(5)数据管理

该模块是系统的重要功能模块。该模块提供了检测完成后待检视频序列检测结果的存档,同时还对执行检测操作时的系统信息、视频自身信息等进行记录,并对这些重要信息提供简便的检索功能。这些功能均是源于应用场景的实际需求。

1.2 系统流程设计

完成系统的整体设计后,需要细化系统各模块。这一步的主要工作是设计各个功能模块的具体功能和不同模块间的协作关系。系统的流程设计为主要环节,现对这方面进行简要阐述。

系统采用经典的三层模型结构,自上而下为表示层、逻辑层和数据访问层。表示层负责播放用户选择的待检视频、展示视频篡改检测的结果、展示记录检索的结果等功能界面;逻辑层负责执行待检视频的检测,并针对检测结果的增删查改与数据访问层相关联;数据访问层规定了对后台数据库的操作方式。

根据用户操作流程实现功能模块,对于保证系统的可用性和用户友好性具有重要作用。在此以用户执行一次篡改检测流程为例给出流程图,以说明系统常规的操作流程,如图2所示。

用户在选择需要检测的视频后,系统判断解码器是否支持该视频的格式。若格式支持,前台表示层将播放该视频,同时逻辑层对视频执行篡改检测。检测结果决定了表示层向用户展示的内容,若判断待检视频未遭篡改,则将视频的格式、编码参数、分辨率等信息展示给用户;若判断待检视频遭到篡改,则将篡改点类型、位置和特征序列、篡改点前后几帧等内容展示给用户。用户在查阅完结果后,可以选择是否保存此次篡改检测结果的信息。若选择保存,则将相关信息和此次执行操作的记录写入数据库;否则,将此次操作记录写入数据库。

2 性能优化研究

2.1 问题分析

考虑到多种编码参数的待检视频的适应性要求,在实现篡改检测时,利用的算法为基于篡改点内容不连续性的方法。该类方法在实际应用中的主要问题是其需要将视频序列解码成帧序列,之后再对帧序列逐帧计算特征,会产生大量的时间消耗。在使用OpenCV实现的LK光流接口进行实验时,处理1 280×720分辨率的视频效率接近2秒/帧。虽然大部分情况下篡改检测操作没有高实时性要求,但巨大的时间消耗无法满足系统的可用性要求。为此,根据特征计算的特点,系统使用GPU执行特征计算,大幅降低了执行时间,大大改进了篡改检测功能模块。

2.2 GPU与CUDA

GPU(Graphics Processing Units,图形处理器)目前已成为执行大规模并行计算的主要工具。不同于CPU的多核结构,GPU采用的是众核架构,其绝大部分晶体管都用于执行单元而非复杂的控制单元和缓存。因此,GPU可以容纳上千个没有逻辑关系的数值计算线程,较CPU有更强大的计算能力。

CUDA(Compute Unified Device Architecture,统一计算设备架构)是NVIDIA于2007年推出的通用并行计算平台,提供了抽象的线程模型和内存模型。它为使用GPU执行并行计算提供了良好的编程模型,极大降低了使用GPU进行数据计算的开发难度。CUDA提供了CPU+GPU的异构计算架构。具体地,使用CPU执行复杂逻辑控制,使用GPU执行高度并行化的数据计算。主机端代码通过CPU执行,GPU设备上的代码则在主机端通过核函数(kernel)执行[8]。

2.3 特征计算优化

在进行计算任务时,首先需要保证实现代码的正确性,之后进行进一步的性能优化。性能优化的主要途径有:访存优化、计算资源优化以及数据本地化[9]。访存优化与数据本地化利用CUDA的内存模型,使数据在GPU片上内存的存储与加载能够充分利用带宽。计算资源优化利用CUDA的线程模型,以最大化发挥GPU计算单元的能力。

2.3.1 帧序列存储与加载优化

CUDA的内存模型提供了多种可编程内存类型,包括寄存器、共享内存、本地内存、常量内存、纹理内存和全局内存。核函数的线程有私有的寄存器和本地内存;线程块有对其所有线程可见的共享内存,而常量内存、纹理内存和全局内存对所有内存可见。

数据在主机与GPU设备之间的传输通常是GPU计算的瓶颈。使用GPU进行图像计算时,大部分研究/开发人员选择了在GPU上进行RGB三通道向灰度单通道转换的计算。但实际中发现,在片上进行通道转换意味着要将原始三通道图像数据传输到设备上,不仅会增加多主机与设备间需要传输的数据量,而且会减少单次传输的图像数量,反而降低了总体计算性能。更合理的方案是在主机端CPU上进行通道转换,然后在GPU上处理单通道灰度图。

在对视频进行特征计算时,不同于对单一图像进行计算。首先,由于GPU片上内存空间的限制,大部分情况下无法将整个视频的帧序列一次性拷贝到GPU的片上内存中。而采取处理单张图像的方式逐帧传输与计算,则会大大增加主机与GPU设备之间的数据传输次数,严重影响整体的计算优化效果。考虑到每帧在计算特征的同时需要使用历史数据,本文采用类似滑动窗口的机制。首先根据GPU的存储大小、视频分辨率决定窗口大小,在GPU的全局存储空间内维护一个图像序列。当序列中一定数量的图像计算完成后,则拷贝进新的图像覆盖旧数据。为了避免进行新数据覆盖时过多的数据移动操作,另用一个数组维护图像序列的索引。这个过程用伪代码表示为:

Input:Video frames

Output:EigenValues seq

winSize←generate(device,frameWidth,frameHeight)

images[winSize],index[winSize]

while(frames NOT null):

if(len(index)>1):

calculateEigenValue(images[i],seq)

removeFromIndex(i,index)

else:

loadNewFrames(images,frames)

refreshIndex(index)

return seq

在单帧图像上执行计算时,也可以采取一定的措施提高数据的传输速率。将数据从全局内存中载入读写速度更快的共享内存,然后通过共享内存进行数据读取,减少从较慢的全局内存读取数据,提高了数据读取速度。用CUDA提供的share¬¬标识符声明二维数组,使其作为共享变量来通过共享内存存取数据,从全局内存中读入线程块所需的数据后,所有线程通过此数组读取数据而不再通过全局内存。

2.3.2 计算优化

计算过程的优化围绕GPU的线程指令执行方式展开,GPU的架构围绕流式多处理器(Streaming Multiprocessor,SM)的阵列搭建。CUDA的线程模型是一种两层结构,第一层是最多由二维线程块组成的线程网格,第二层是最多由三维线程组成的线程块。线程块是SM的调度单位。SM在线程块上执行指令时,将32个线程划分成一个基本执行单元——线程束。为了最大化利用线程束,在启动核函数时,应将线程块大小设置为32的整数倍,避免线程束出现空缺。

在线程束中,所有线程执行相同的指令。如果使用条件判断使不同线程执行不同指令路径,会造成线程束分化,导致所有线程无法同时执行,严重削弱性能。所以,应尽量避免条件分支。若无法避免条件分支,应尽量使分支粒度跨线程束,如设置判断条件为if((tid/32)%2==0)。

计算中还应注意的是指令执行延迟。当每个时钟周期中所有线程调度器都有线程束执行时,可以使计算资源充分利用。当一个线程束阻塞时,应当保证有其他满足条件的线程束供调度器调度。根据利特尔法则(Little’s Law),保证充足的线程束数量可以达到延迟隐藏的目的。

利用线程模型进行计算资源的优化,主要方法为:合理设置线程块大小,保证其是线程束大小的整数倍,保证线程块中有足够多的线程束,规避线程束分化问题。

2.3.3 总体流程与结果

使用GPU计算视频帧序列的通用优化流程如图4所示。依照该流程,系统实现了优化的特征计算替换原先算法实现中的相应部分。

依据优化流程取代原先实现的特征计算部分,在Nvidia Geforce GTX850M(计算能力5.0),编译环境Visual Studio Community 2015、CUDA8.0下,LK光流和NTF初步表现结果如表1、表2所示。

LK光流引入OpenCV实现的GPU模块,对滑窗载入帧序列的效果进行简要比对。OpenCV提供的LK光流的GPU API执行的是逐帧计算。可以看出,对内存存取和计算流程都采取合理的方法进行优化后,可以大幅缩短特征计算时间,对大部分非高清视频实现了篡改检测总体流程完成时间低于视频的播放时间。此外,尽管每帧数据量下降了3倍,但计算时间并没有呈现3倍下滑。究其原因,一是角点检测选取的特征点数量并没有呈现倍数下降,二是数据传输在异构计算中依旧占据着大部分时间。所以,在进行GPU优化时更应关注片上内存读写的优化。

3 结 语

通过对实际需求的分析,结合传统的系统架构设计,完成了针对监控视频的帧间篡改检测系统的设计和实现。在有效实现检测算法并使用CUDA对特征计算过程进行合理优化后,系统的核心功能表现良好,提供的数据管理和结果展示等功能也保证了数据交互和用户体验。但是,在解码阶段,系统依靠FFmpeg开源库,在应对一些稀少的视频格式时系统无法有效处理。因此,后期会考虑优化解码器部分,以提高系统应对多种格式视频的能力。

参考文献:

[1] 谢丰,蒋兴浩,孙锬锋.视频双压缩检测技术综述[J].通信技术,2017,50(03):393-399.

[2] Chao J,Jiang X,Sun T.A Novel Video Inter-frame Forgery Model Detection Scheme based on Optical Flow Consistency[C].International Conference on Digital Forensics and Watermaking,2012:267-281.

[3] Lucas B D,Kanade T.An Iterative Image Registration Technique with an Application to Stereo Vision[C].International Joint Conference on Artificial Intelligence,1981:674-679.

[4] Wang W,Jiang X,Wang S,et al.Identifying Video Forgery Process Using Optical Flow[C].Digital-Forensics and Watermarking,2013:244-257.

[5] Wu Y,Jiang X,Sun T,et al.Exposing Video Inter-frame Forgery based on Velocity Field Consistency[C].IEEE International Conference on Acoustics,Speech and Signal Processing,2014:2674-2678.

[6] Wang Q,Li Z,Zhang Z,et al.Video Inter-Frame Forgery Identification Based on Consistency of Correlation Coefficients of Gray Values[J].Journal of Computer & Communications,2014,2(04):51-57.

[7] Yin L,Bai Z,Yang R.Video Forgery Detection based on Nonnegative Tensor Factorization[C].IEEE International Conference on Information Science and Technology,2014:148-151.

[8] 程润伟,马克斯•格罗斯曼,泰•麦克切尔.CUDA C编程权威指南[M].北京:机械工业出版社,2017.

[9] 梁军,贾海鹏.视频图像处理与性能优化[M].北京:机械工业出版社,2017.

作者:韩宇轩,孙锬锋,蒋兴浩

单位:上海交通大学 电子信息与电气工程学院,上海 200240

作者简介:韩宇轩,男,硕士,主要研究方向为视频篡改取证、高性能计算;

孙锬锋,男,博士,副研究员,主要研究方向为视频篡改检测、视频内容分析;

蒋兴浩,男,博士,教授,主要研究方向为多媒体信息安全、视频内容分析。

本文刊登在《通信技术》2018年第1期(转载请注明出处,否则禁止转载)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180112B0KDNR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券