0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在这个项目中,将在线和离线TSM网络部署到FPGA,通过2D CNN执行视频理解任务。

OpenFPGA 来源:OpenFPGA 2023-07-07 10:44 次阅读

在这个项目中,将在线和离线 TSM 网络部署到 FPGA,通过 2D CNN 执行视频理解任务。

1776a3c8-1c5e-11ee-962d-dac502259ad0.png

介绍

在这个项目中,展示了 Temporal-Shift-Module ( https://hanlab.mit.edu/projects/tsm/)在 FPGA 上解决视频理解问题的实用性和性能。

TSM 是一种网络结构,可以通过 2D CNN 有效学习时间关系。在较高级别上,这是通过一次对单个帧(在线 TSM)或多个帧(离线 TSM)执行推理并在这些张量流经网络时在这些张量之间转移激活来完成的。这是通过将shift操作插入 2D 主干网的bottleneck层(在本例中为 mobilenetv2 和 resnet50)来完成的。然后,该shift操作会打乱时间相邻帧之间的部分输入通道。

详细的解析可以看下面的文章:

https://zhuanlan.zhihu.com/p/64525610

将这样的模型部署到 FPGA 可以带来许多好处。首先,由于 TSM 已经在功效方面带来了巨大优势,部署到 FPGA 可以进一步推动这一点。

TSM网络结构

我们将首先回顾这些 TSM 网络的底层结构以及到 DPU 兼容实现的转换。TSM 网络的核心结构是插入骨干模型bottleneck层中的时间shift模块,以实现时间建模。例如,插入shift操作后,TSM MobilenetV2 bottleneck层具有以下结构:

17a3a8b4-1c5e-11ee-962d-dac502259ad0.png

Online Shift

在演示的在线 TSM 网络中,如果我们处于时间步骤 T,我们也处于推理轮 T。shift模块将输入通道的前 1/8 移位到包含来自上一推理轮的相同通道的shift缓冲区( T – 1)。然后,第 (T – 1) 轮的内容被移入 T 轮的当前张量。

Offline Shift

对于离线 TSM,如 resnet50 演示(当前禁用)中所使用的,shift缓冲区被绕过。相反,我们将N 个相邻的时间步骤作为批次中的张量进行处理。通道可以在批次内直接移动,而不是将步骤 (T – 1) 中的通道存储在缓冲区中。此外,这使得能够访问批次内的未来回合(即推理步骤 T 可以与步骤 T + 1 存在于同一批次中)。通过这种访问,离线shift也会将通道从步骤 T + 1 移位到步骤 T 的张量中。

DPU模型优化

为了将TSM部署到 DPU,需要对原始 TSM 模型进行两项重大更改。第一个是将shift模块与网络分离,因为我们无法使用支持的张量流操作来实现shift操作。为了实现这一目标,我们在每次出现shift模块时对模型进行管道化。

17ca8920-1c5e-11ee-962d-dac502259ad0.png

通过将shift模块放置在其自己的管道阶段,我们可以灵活地从 DPU 内核卸载shift操作。下面我们可以看到 MobilenetV2 在线 TSM 的前 4 个管道阶段(从右到左)。如果比较两个bottleneck层实现,并删除shift操作,则这对应于以下转换,其中bottleneck层在移位模块之前包含 1 个输出,在shift模块之后包含 2 个输入。一个输入包含来自顶部分支的移位后张量,另一个输入包含底部分支中未移位的残差张量。

1801df7e-1c5e-11ee-962d-dac502259ad0.png

为简单起见,这里我们使用 mobilenetV2 主干网来可视化 TSM,但 resnet-50 主干网也使用相同的方法。

为了实现这种流水线结构, Tensorflow 模型中有一个标志,指示我们是否要生成不包括移位操作的拆分模型(用于 DPU 部署)或在 Tensorflow 中实现移位操作的普通统一模型。如果设置了分割标志,则在每次移位操作之前添加新的输出,并在移位后添加新的占位符,其中输入移位后的输入。

因为移位(shift)模块仅插入到类似于上面所示的 3 级 MobilenetV2 瓶颈的结构中,所以逻辑的实现得到了简化。然而,对于 resnet 模型,我们确保在快捷路径中的归约逻辑之后插入移位管道阶段。由于移位+卷积路径在瓶颈层完成之前独立于快捷路径,因此快捷路径上的操作可以放置在3个阶段中的任何一个中。

DPU量化策略

虽然如上所述对模型进行流水线化简化了转换实现,但由于我们的网络不再是单个内核,因此使 DPU 部署变得复杂。相反,我们为每个管道阶段都有一个内核,无需进行移位操作(MobilenetV2 为 11,resnet50 为 17)。

为了量化这样的网络,我们必须为每个内核提供未量化的输入。为了生成这些信息,我们的模型可以在没有管道阶段的情况下生成。然后,我们直接在 Tensorflow 中对来自真实校准数据集的帧进行推理,但是我们在每个管道边界转储中间网络状态。转储的状态包括需要馈送到 vai_q_tensorflow 的节点名称等元数据以及相应的张量数据。当在校准集中重复推理时,所有这些信息都会被“波及”。

转储此中间推理信息后,我们获得了输入 vai_q_tensorflow 的每个内核的输入张量。该逻辑全部由我们的tensorflow模型脚本和quantize_split.sh脚本中的DUMP_QUANTIZE标志处理(项目结构在“Deployment”部分中描述)。一旦对所有内核运行量化,我们就可以为每个内核生成一个 ELF 文件,就可以集成到我们的主代码中。

演示

下面我们介绍 2 个平台(ZCU104 和 Ultra96V2)和 2 个模型(MobilenetV2 Online TSM 和 Resnet50 Offline TSM)的性能细分。我们将 FPS 计算为 1/(预处理 + 推理延迟)。

MobilenetV2 在线 TSM 延迟:

ZCU104 (60.1 FPS) - B4096,300MHz,RAM 高,启用所有功能

185fa168-1c5e-11ee-962d-dac502259ad0.png

Ultra96V2 (38.4 FPS) - B2304,300MHz,RAM 低,启用所有功能

188ff282-1c5e-11ee-962d-dac502259ad0.png

现在,我们可以将推理延迟与之前在移动设备和 NVIDIA Jetson 平台上收集的 TSM 数据进行比较。

18ae88dc-1c5e-11ee-962d-dac502259ad0.png

部署

上面演示的所有代码都位于 TSM github 存储库的 fpga 分支中:

https://github.com/mit-han-lab/temporal-shift-module

环境设置

要为上面这些设置开发环境,按照此处所述进行初始 Vitis-AI 环境设置:

https: //github.com/Xilinx/Vitis-AI

使用的 ZCU104 DPU 映像如下所述:

https: //github.com/Xilinx/Vitis-AI/tree/master/mpsoc

ZCU104 VCU 映像是按照此处所述的 ivas 示例应用程序构建的:

https://github. com/Xilinx/Vitis-In-Depth-Tutorial/tree/master/Runtime_and_System_Optimization/Design_Tutorials/02-ivas-ml

Ultra96V2 映像是根据 2020.1 Avnet BSP 构建的,并在 petalinux 构建时启用 Vitis-AI

https://github.com/Avnet/vitis/tree/2020.1

参考文献

https://www.hackster.io/joshua-noel/tsm-networks-for-efficient-video-understanding-on-fpga-f881ba

https://hanlab.mit.edu/projects/tsm/

https: //github.com/Xilinx/Vitis-AI/tree/master/mpsoc

https://github.com/Avnet/vitis/tree/2020.1

代码

https://github.com/mit-han-lab/temporal-shift-module/tree/master/tsm_fpga

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21328

    浏览量

    593275
  • 模块
    +关注

    关注

    7

    文章

    2486

    浏览量

    46548
  • TSM
    TSM
    +关注

    关注

    0

    文章

    5

    浏览量

    6497
收藏 人收藏

    评论

    相关推荐

    [转帖]java项目实践视频

    ;nbsp; 1:从零开始完成图书进销存系统这个项目,包含:用户、图书、进货、销售和库存5个模块 2在这个项目中综合应用前面学的Java初
    发表于 05-17 14:47

    【emWin实战教程V2.0】第12章 2D图形库之绘制位图

    转最新版本教程本章节为大家讲解2D图形库的位图绘制方法,位图在实际项目中用到的比较多,位图的好处是使用简单,显示速度快,但是要显示的位图不能太大,因为位图的生成是通过emWin自带的小软件
    发表于 01-06 09:34

    TSM-D220D控制器

    数字控制回路,保证了大流量气体流量计的响应速度和精确度,可选本体带显示,更易于流量测量工程项目中的使用。产品参数:TSM-D200量程范围:0-7sccmTSM-D210量程范围
    发表于 12-26 11:56

    应用程序部署CompactRIO上的Windows Embedded Standard 7操作系统的步骤

    应用程序。 6.转到本文档的运行您的应用程序部分。 离线部署U盘 不建立网络连接从而在开发计算机和一个运行WES7的CompactRIO上执行部署的推荐方法是
    发表于 04-08 09:42

    怎么在xC8中传递和返回2D数组

    并运行良好,直到调用。这个函数在主函数中遇到。在我的项目中,有必要使用2D数组,在需要时通过&返回它们,并且我有几个函数,如上面执行不同
    发表于 09-06 17:07

    怎么在xC8中传递和返回2D数组?

    并运行良好,直到调用。这个函数在主函数中遇到。在我的项目中,有必要使用2D数组,在需要时通过&返回它们,并且我有几个函数,如上面执行不同
    发表于 10-09 14:17

    MKP TSM-D200气体流量计

    质量流量计,采用数字控制回路,保证了大流量气体流量计的响应速度和精确度,可选本体带显示,更易于流量测量工程项目中的使用。 产品参数:TSM-D200量程范围:0-7sccmTSM-D210量程范围
    发表于 12-31 16:36

    TSM-D210 质量流量控制器

    回路,保证了大流量气体流量计的响应速度和精确度,可选本体带显示,更易于流量测量工程项目中的使用。产品参数:TSM-D200量程范围:0-7sccmTSM-D210量程范围
    发表于 03-11 14:58

    理解任务切换和任务状态改变的关键是什么?

    理解任务调度与切换的关键是从代码层面理解各种列表的操作逻辑思路:状态列表(Running,Ready,Blocked,Suspended)和事件列表(比如队列,信号量等中的阻塞事件列表)。这些操作是在各个API 函数中的,综合起来感觉还是有些雾水。现在遇到一个问题麻烦大佬
    发表于 06-13 09:00

    如何移植一个CNN神经网络FPGA中?

    训练一个神经网络并移植Lattice FPGA上,通常需要开发人员既要懂软件又要懂数字电路设计,是个不容易的事。好在FPGA厂商为我们提供了许多工具和IP,我们可以
    发表于 11-26 07:46

    可分离卷积神经网络在 Cortex-M 处理器上实现关键词识别

    。● 卷积神经网络 (CNN)基于 DNN 的 KWS 的一大主要缺陷是无法为语音功能中的局域关联性、时域关联性、频域关联性建模。CNN 则可将输入时域和频域特征当作图像处理,并且在上面执行
    发表于 07-26 09:46

    基于 FPGA 的目标检测网络加速电路设计

    CNN 更容易满足实际应用场景中 的低功耗、实时性要求。而且目标检测算法发展迅速,针对 CNN 的硬件加速研究也大有可 为。所以本项目计划使用 PYNQ-Z2 开发板设计一个硬件电路
    发表于 06-20 19:45

    从C 到 matlab 到 FPGA,如何实现CNN项目

    经过了前面的开胃菜,项目正式开始。一步步讲解这个模型怎么玩起来的。从C 到 matlab 到 FPGA ,三个平台联合起来完成这个 由 RTL 实现
    的头像 发表于 03-15 17:13 2120次阅读

    如何在SpringBoot项目中实现动态定时任务

    之前写过文章记录怎么在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务
    的头像 发表于 09-30 11:16 1495次阅读

    Temporal-Shift-Module在 FPGA上解决视频理解问题的实用性和性能

    在这个项目中将在线离线 TSM 网络部署
    的头像 发表于 07-07 10:47 438次阅读
    Temporal-Shift-Module在 <b class='flag-5'>FPGA</b>上解决<b class='flag-5'>视频</b><b class='flag-5'>理解</b>问题的实用性和性能