首页 > 文章 > Vitis AI 加速 GMSL摄像头人脸检测 - 第二部分

Vitis AI 加速 GMSL摄像头人脸检测 - 第二部分

Brian Wiec 2020年07月09日

原型系统

赛灵思 ZCU102平台与Avnet FMC- multi - cam4 FMC 结合部署。默认系统只使用四个摄像头中的一个进行处理。利用OpenCV下的V4L2从摄像头信号捕获画面帧,然后将画面帧通过Densebox神经网络传递给DPU进行人脸检测,并使用OpenCV绘制边界框。最后将输出帧传递给Gstreamer流水线,该流水线将通过 PS 显示端口输出。


项目组织

此设计流程涉及诸多工具和存储库,它们通过传递特定设计文件进行交互。因此,整理好设计文件对于避免混淆至关重要。本教程对源文件、配置文件和构建脚本使用以下组织方法

boot
readme

通常,设计源文件分为 hardware 目录和 petalinux 目录,每个目录都包含与其构建部分相关的源代码、脚本和配置文件。此外,boot 目录包含用于创建 BOOT.BIN 的 .bif 文件。doc 目录包含此文档。

dpu 目录包含与 DPU 配置相关的文件,这些文件会在构建和执行期间的不同时间受到抓取。repos 目录包含构建期间使用的依赖存储库的本地副本。最后,scripts则 包含其他杂项脚本。

在构建过程中,还将创建以下目录

  • vitis_platform_workspace—创建平台的Vitis工作区
  • sd_card -放置所有二进制文件的最终输出目录

FPGA 设计

FPGA 设计实现了两个主要功能:一是具备预处理的图像采集流水线;二是 DPU 加速。

要构建 FPGA 设计,请遵循以下步骤:

1. 设置环境

source /2019.2/settings64.sh

2. 运行创建 Vivado 项目、导入源代码、构建 IP 集成器设计并生成比特流的脚本

make hardware

主生成文件调用硬件目录中的子生成文件。后一个目标如下所示

proj

主要任务是使用 hardware /tcl/build_hw.tcl 调用 Vivado,它执行以下操作:

1.  设置正确的电路板或部件号

2.  在 hardware 目录中创建一个项目

3.  导入 HDL 源

4.  导入 XDC 约束

5.  使用源 hardware /tcl/bd/bd_zcu102_avnet_gmsl_2019.2.tcl 构建块设计

6.  为块设计生成包装和输出产品

7.  运行综合

8.  使用附加的 Vitis 元数据属性标记设计

false

9.  附加 dynamic_postlink.tcl

tickle

Due to Vitis expectation of relative file, 由于 Vitis 对相关文件位置的预期,hardware /tcl/dynamic_postlink.tcl 会暂时复制到 hardware 根目录。稍后将描述 hardware /tcl/dynamic_postlink.tcl 的用途和功能。


Vivado 项目概述

Vivado 项目已存在于 hardware/pro j中,可以用 Vivado project .xpr打开

                vivado proj.xpr

Vivado 的顶层块设计如下所示

block-design

有用于图像捕获流水线 (vid_capture)、控制逻辑 (control) 和复位生成 (rst_gen) 的分层块。 Zynq Ultrascale+ MPSoC 模块具有以下关键配置

  • M_AXI_HMP_FPD 已启用并连接到包含 AXI 互连的控制块,用于访问设计中使用的所有控制接口
  • pl_clk0 是一个 100MHz 的通用时钟,驱动控制逻辑
  • pl_clk1 是一个 250MHz 时钟,驱动 AXI 流视频逻辑
  • pl_clk2 是一个用于 MIPI DPHY 的 200MHz 时钟
  • S_AXI_HP0_FPD 已启用并连接到视频捕获流水线的 DMA(帧缓冲区写入)
  • pl_ps_irq0 为 DPU 中断逻辑启用
  • pl_ps_irq1 由系统中的其他中断使用

下面再次展示的逻辑子集将添加到平台设计中使用。

platform-design

它由时钟、复位和中断设置组成,这些设置由 Vitis 识别并在流程后期自动连接到硬件加速器(即 DPU)。在这一阶段,我们只需要确保它们已包含在设计中,并使用适当的元数据进行标记,以便 Vitis 能够发现它们及其属性。后续我们会对其进行深层次的讨论。


使用预处理的图像捕获流水线

vid_capture 块包含图像捕获流水线和相关的预处理,将在图像上完成此类预处理以供 DPU 使用。

mipi

MIPI CSI2 RX 子系统连接 FPGA 引脚并实现 MIPI CSI2 接收器控制器。它将视频数据转换为 AXI 流输出。由于图像传感器输出 12 位数据,因此首先使用 AXIS 子集转换器来选择所需的 8 个 MSB。 传感器发送需要转换为 RGB 的 RAW Bayer 数据,这一转换在 v_demosaic_0 块中进行。接下来,插入一些小型 ISP 功能以提高图像质量。最后,使用 Framebuffer Write IP 将数据直接存储到内存中。


DPU 加速

设计的这一阶段尚且不包括 DPU IP,而是在设计流程的后期由 Vitis 自动插入。虽然看起来或许很奇怪,但这样做的原因在于 DPU 配置可以在Vitis环境中反复更改,无需接触 Vivado 设计。因此设计环境更为灵活,对缺乏传统 FPGA 设计经验的用户较为友好。

为便于该流程操作,设计的各部分都使用某些属性进行标记,这些属性在.xsa文件中以元数据的形式呈现。此类元数据将由 Vitis 解析,以便部署加速器。其中包括可用于加速器使用的接口、时钟、重置和中断。要查看 Vivado 中的这些元数据“标签”,请选择Window -> Platform Interfaces

ip-integration

这将显示以下选项卡

platform-1

每个选定的接口都有与之相关的属性。下面对修改后的接口属性进行了概述

  • clk_wiz_0
    • clk_out1
      • enabled – true
      • id - 0
      • is_default – true
      • proc_sys_reset - /proc_sys_reset_0
    • clk_out2
      • enabled – true
      • id - 1
      • is_default – false
      • proc_sys_reset - /proc_sys_reset_1
  • zynq_ultra_ps_e_0
    • M_AXI_HPM1_FPD
      • enabled – true
    • S_AXI_HP1_FPD
      • enabled – true
      • sptag – HP1
    • S_AXI_HP2_FPD
      • enabled – true
      • sptag – HP2
    • S_AXI_HP3_FPD
      • enabled – true
      • sptag – HP3
  • clk_wiz_0 模块生成将供 DPU 使用的时钟。DPU 有 2 个需要驱动的时钟输入:s_axi_aclk 用于 S_AXI 接口,dpu_2x_clk 用于内部处理逻辑。dpu_2x_clk 频率应是 s_axi_aclk 频率的 2 倍。此设计的时钟向导具有以下配置
clocking-wizard

N注意输出时钟的“Actual Output Freq (MHz)”设置,因为这些值稍后将在 Vitis 中用于确定 DPU 使用的时钟。

该平台还需要与每个时钟关联的重置,由 proc_sys_reset_1 和proc_sys_reset_0 实现。由于这些时钟/重置仅连接到 DPU(设计中尚不存在),所以它们处于浮动状态。

添加axi_intc_0 中断控制器供 DPU 使用。它连接Zynq Ultrascale+ MPSoC pl_ps_irq0 输入并针对电平敏感中断进行配置

axi-interrupt

axi_intc_0 的内置输入连接配置为 8 个输入的xlconcat_interrupt_0。值得注意的是,所有输入都由 xlconstant_gnd 接地。

如前所述,该设计还附加了一个名为 dynamic_postlink.tcl 的脚本。这是负责断开从 xlconstant_gnd 到 xlconcat_interrupt_0 连接的脚本。该文件现在不执行,而是在 Vitis 链接阶段执行。不过它已经附加到设计中,便于 Vitis 感知。xlconstant_gnd/xlconcat_interrupt_0 和脚本之间的命名约定匹配非常重要。

继续阅读 《Vitis AI 加速 GMSL摄像头人脸检测》第三部分

 


About Brian Wiec

About Brian Wiec

Brian Wiec 是底特律地区的一名现场应用工程师,为赛灵思汽车行业客户提供 ADAS、自动驾驶、信息娱乐和动力系统控制方面的应用支持。他加入赛灵思已有八年,具有视频、信号处理和嵌入式系统设计和实施的现场和工厂支持方面经验。Brian一向乐于与客户合作,帮助他们解决技术挑战,并积极参与客户创新举措。Brian业余时间喜欢和家人共度时光,爱好远足、听音乐、打曲棍球、观看大学橄榄球比赛(他是密歇根大学橄榄球队的球迷)。