第一部分 设计概述(Design Introduction)
1.1 设计目的
近年来随着机器学习等技术的发展,人工智能在图像识别、语音处理等方面的能力不断增强、应用范围不断扩大,这极大的方便了人们的生活。然而随之带来的安全问题也变得越来越不可忽视。
鉴于此,我们决定采用 Xilinx 的 PYNQ-Z2 开发板,将 FPGA 高度并行化的特点与人工智能安全相结合,设计了一种具有实时人脸伪造能力的视频采集设备。目的在于对视频 数据进行有针对性的伪造,协助安全系统的评估与改进。相较于传统的基于软件实现的人 脸伪造系统,采用FPGA,功耗与成本较低,实时性较高,伪造结果真实,并且隐蔽性更高。对安全系统的性能具有更大的挑战,更有助于安全系统的测试。
1.2 应用领域
本作品的应用前景十分广泛,例如在人脸支付领域,可以对现有的人脸识别系统进行 测试,辅助找出人脸识别系统的漏洞,进而提高人脸识别系统的稳定性与可靠性。如果利用在会议视频中,可以协助会议平台完善对参会者的身份验证的系统,防止出现利用参会者的照片、视频信息冒名顶替的行为。
1.3 主要技术特点
(1)总体采用 Deepfake 框架,本质是由一套人脸识别、合成、融合构成的技术框架,属 于图像模型在软硬件结合的深度学习中的应用。
(2)软件端的算法设计包括锚框、人脸特征检测、点云匹配、DeepFake Module、泊松融合、前后景融合、边缘膨胀等技术。
(3)硬件端的相关层采用 Xilinx 开发的神经网络加速 IP 核 DPU,同时结合 Vitis AI 对神经网络模型进行压缩优化编译,转换成可供 FPGA 使用的神经网络模型。
1.4 关键性能指标
(1)延迟:使用 DeepFake 后的延迟约为 270ms。
(2) 帧率:在 640×360 的分辨率下,经过 DeepFake 后的 FPGA 输出的帧率约为 4fps。
1.5 主要创新点
(1)采用软硬件结合的方式来实现 Deepfake 框架,相较于传统采用 GPU 加速的方式具有功耗低、体积小、成本低的特点。
(2)对 Deepfake 算法进行了优化,一方面图像信息存储采用 int8 数据类型,激活函数采用计算更快的 ReLU。另一方面对输入输出矩阵的维度进行调整。这些优化对算法速度有很大提升。
(3)完成可配置性的设计,一方面从硬件角度采用多种视频流的接入方式(硬件摄像头/ 网络摄像头),另一方面在算法的图像融合部分设计了两种不同的算法。这些设计可以适应不同处理质量、实时性和应用场景的要求。
第二部分 系统组成及功能说明 (System Construction & Function Description)
2.1 系统介绍
本系统由 Xilinx Zynq-7000 系列的 PYNQ-Z2 开发板作为主控中心,主要包含摄像头 (视频)采集模块、图像处理模块、数据处理终端。总体结构如图 1 所示,图像处理结构如图 2 所示。
系统流程图说明:
由摄像头获取人物时时的图片信息,传送给 PYNQ-Z2 开发板,并在 PYNQ-Z2 中采用 神经网络模型对图像进行处理。最后将处理结果返回到上位机终端,实现真假人脸的转换。
图像处理算法部分说明:
首先进行帧截取,将动态视频流转换成静态帧。通过锚框将全身人像的人脸部分截取出来,再通过人脸特征检测提取出人脸的特征。再提取出特征之后,采用点云匹配算法完成整个人脸的对齐,而后直接使用 Deepfake Module 换掉对齐后的人脸,再通过点云匹配将换后的人脸对齐。然后采用泊松融合或者前后景 边缘膨胀的方式将人脸还原到静态图片帧(具体采用哪种取决于算力与实时性的要求),最终将静态图片帧还原到视频流中。
2.2 硬件模块介绍
2.2.1 FPGA 开发板
本系统主要采用 Xilinx Zynq-7000 的 PYNQ-Z2 开发板作为主控中心。从硬件方面上, 该开发板采用 FPGA ARM 的双处理架构,拥有采用 Cortex-A9 双核处理器的 ARM 芯片, 主频可以达到 650MHz,同时还有快速的 Block RAM 芯片,速度可以达到 630KB。从软件方面上,Xilinx 提供大量的 Python API,同时提供深度学习相关的 IP 核 DPU 以及相应的配套软件 Vitis AI,可以快速部署相应的深度学习模型。
2.2.2 视频采集模块
该模块采用罗技的 C270 高清摄像头。摄像头采用 USB 2.0 接口,内置麦克风,同时免驱动。捕获画面最大可达到 1280×720。使用较为简便,并且可以达到本项目的要求,因此十分适合在该项目中使用。
2.2.3 FPGA 硬件 IP 核 DPU
DPU 的详细硬件架构如图 5 所示。启动时,DPU 获取片内存储器中的指令来控制计算引擎的运行。这些指令是由 Vitis AI 编译器生成的,并且在编译时进行了很多优化。片上存储器用于缓冲输入,中间和输出数据,以实现高吞吐量和处理效率。DPU 中的数据均尽可能重复使用来减少内存带宽并且使用基于深度流水线设计的计算引擎。处理元件(PE) 充分利用了 Xilinx 器件中的细粒度构造块,例如多路复用器,加法器和累加器等。
同样的这里给出 DPU 的端口图如图 6 所示,端口的详细类型、数据位宽、I/O 类型以及简单的描述在图 7 中。
2.3 图像处理算法介绍
2.3.1 视频流接入的设计
考虑到可能的不同情境,我们为此设计了两种视频流的接入方式。一种是采用 USB 在安装好摄像头驱动的 PYNQ 开发板上直接插入摄像头(PYNQ 直接处理),另一种方式是采用网络摄像头的网络传输接入方式(PYNQ 作为加速器)。网络摄像头采用 Python 中的 socket 库进行开发,可以完成视频流的接收与转发。USB 方式和网络摄像头方式可以分别适应远程与近程两种控制模式。
2.3.2 锚框 人脸特征检测
锚框部分:
锚框部分是我们对整体Deepfake框架的第一次优化,因此这里首先对算法的选择进行说明。最开始时考虑使用OpenCV中内置的机器学习函数库HaarCascade。OpenCV中有Haar 级联分类器,通过分析对比相邻图像区域来判断给定图像或者图像区域与已知对象是否匹 配。可以将多个Haar级联分类器组合起来,每个分类器负责匹配一个特征区域(比如眼 睛),然后进行总体识别。也可以一个分类器进行整体区域识别(比如人脸),其他分类器可识别小的部分(比如眼睛)等。但是Opencv提供的Haar级联分类器和跟踪器并不具有旋转不变性,也就是说无法较好的识别侧脸。而且只有将输入图片的尺寸设计在64×64时才 能将时间控制在40ms以下。此时的识别效果很差,故舍弃该方法。接下来采用opencv中的dnn函数对基于mobilenet-ssd 网络设计的人脸检测模型进行推理。虽然此时的识别率较高并且清晰度也较好,但是耗时大约为300ms,时间极长,也放弃了该方法。因此,最后考虑使用Densebox方法来锚框。
DenseBox 目标检测算法是一个集成的 FCN 框架,并且不需要生成 proposal,在训练过程中也可以达到最优。与现存的基于滑动窗的 FCN 的检测框架相类似,DenseBox 更偏重于小目标及较为模糊目标的检测,比较适合对人脸的检测。整体流程如图 10 所示。
单一的卷积网络同时输出不同的预测框及类别分数。DenseBox 中的所有目标检测模块 都为全卷积网络结构,除了 NMS 处理部分,因此没有必要生成 proposal。人脸锚框时,输 入图片大小为