【2021集创赛】海云捷迅杯一等奖:基于稀疏卷积与层融合的流水线优化方案

本文主要是介绍【2021集创赛】海云捷迅杯一等奖:基于稀疏卷积与层融合的流水线优化方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

海云捷迅杯:基于FPGA C5Soc的MobileNetV1 SSD目标检测方案设计

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。

**杯赛题目:**海云捷迅杯——基于FPGA C5Soc的MobileNetV1 SSD目标检测方案设计
设计任务:

  1. 基于已训练好的SSD模型参数文件、基于已有的Intel FPGA工程网表文件、Linux-C5soc平台的Paddle-Paddle框架驱动为参考,优化或者重新设计加速器以及对应驱动,并部署SSD模型到FPGA进行推理。
  2. 对方案进行评估和实现。
  3. 提出设计方案,提升性能并实现。

团队介绍

**参赛单位:**南京大学
**队伍名称:**爱卡丝俱乐部
**指导老师:**王中风
**参赛队员:**薛睿鑫、程昕、苏天祺
**总决赛奖项:**一等奖和企业大奖

项目介绍

本项目采用Intel Cyclone V系列的SoC芯片进行开发,部署以MobileNet V1为backbone的SSD目标检测模型,对硬软件进行协同优化,以提高目标检测效率。整个系统包括PS (processing system) 端和PL (programmable logic) 端两部分,PS端包括ARM处理器、Memory,负责数据传输及计算流程的预处理和控制;PL端则包括卷积和偏置激活计算单元、SRAM等,负责对高负载的运算进行加速。PL端的数据通过Avalon总线与DRAM进行交互。

我们在量化排序传输计算流水线这五个方面对系统进行了优化,具体的优化手段如下图所示。通过上述优化,目标检测的速度提升超过3.5倍

在这里插入图片描述

我们的技术创新点体现在以下几个方面:

  1. 重新设计了稀疏卷积的数据流,采用Row-wise、Weight stationary的滑窗卷积方式,将计算并行度提高到96,并支持channel-wise的input数据稀疏,提高了FPGA上数据的复用性,大大减少数据的传输量,从而减少数据的传输时间、降低功耗。
  2. 采用层融合方式处理每层的偏置和激活操作,在FPGA上的卷积计算完成后,将结果直接传到偏置激活计算单元进行计算,再将偏置激活的计算结果经过SRAM传到片外。这样一方面能够加速偏置激活的计算,另一方面,经过偏置激活的计算后,数据能够支持量化为更低比特而不损失精度,从而进一步减少数据的传输。
  3. 增加input、weight、bias和output四个 Ping Pong Buffer,使数据传输与计算时间能够重叠,这样进一步优化了数据计算的流水线,在同一时间内进行数据传输和计算,从而实现对系统的加速。
  4. 在进行模型预测之前将量化并重排的权重和偏置保存,避免每次预测时对权重和偏置数据的重复量化和重排。

系统架构

为实现快速的目标检测效果,我们设计的系统整体架构图如下图所示。数据经UpSizer和BusMatrix单元进行仲裁,存储到相应的SRAM中。当计算开始时,卷积模块可以直接从SRAM中读取数据,卷积的结果直接传入BiasRelu单元进行计算,再写入Output Ping Pong Buffer,最终的output再经过BusMatrix和UpSizer单元传回DRAM。

在这里插入图片描述

优化效果

经过充分的仿真验证和上板调试,系统能够正确完成目标检测任务,最终的目标识别速度能够达到最快每张图836ms

在这里插入图片描述

我们统计了优化前后卷积层的加速比,结果如下图所示,相比原始优化前的系统,我们的加速系统能够实现最高39倍加速比平均4.5倍加速比

在这里插入图片描述

参赛体会

这次比赛,给了我们一个很好的机会,提升硬软件协同开发的能力。从硬件数据流的设计到代码的调试,我们一步一个脚印,提出了很多优化的方案,并评估它们的可行性,最终实现了上面所述的加速系统。团队的成员也能够优势互补,在讨论中碰撞出了很多火花。非常感谢实验室的学长学姐和赛事指导老师曾给予我们的帮助,在我们遇到难题时帮助我们指明解决问题的方向。

在这里插入图片描述

未来展望

  1. 针对深度卷积进行层融合优化。将深度卷积与前一层的卷积融合,减少中间数据的传输。
  2. 利用DMA进行片上与片下数据的传输,提高传输效率。
  3. 探索更加有效的量化方式,能够进一步减少数据的传输量的同时保持精度。

总结

我们在官方提供的系统基础上进行优化,成功在Intel Cyclon V SoC芯片上部署了以MobileNet v1为backbone网络的SSD目标检测模型,联合优化ARM端和FPGA端,实现了硬件加速效果。
我们有针对性地设计了稀疏卷积和偏置激活计算的数据流,提高FPGA上数据的复用性,减少数据传输;偏置激活的计算与卷积采用层融合的流水线进行优化,能够在加速偏置激活计算的同时,实现更低比特的数据量化,进一步减少数据的传输;Ping Pong Buffer优化的数据传输与计算流水线,使得数据的计算和传输能够在同一时间进行,减少了计算的空闲状态;此外,我们还优化了模型的量化操作,在进行模型预测之前将量化后的权重和偏置保存,避免每次量化时对权重和偏置数据的重复量化。以上工作共同作用,大大优化了系统的整体性能,提升计算速度。
最后的实验结果表明,我们的设计分别在模型中的普通卷积层和逐点卷积层上实现了最高39×和平均4.5×的加速比。在上板测试中,我们在保证结果正确的情况下,将单张图片的识别速度从3000ms提升到了836ms,取得了超过3.5倍的速度提升。

作品内容来源于爱卡丝俱乐部,转载请标明出处。欢迎大家参加极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动,10月1日截止~

这篇关于【2021集创赛】海云捷迅杯一等奖:基于稀疏卷积与层融合的流水线优化方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/325279

相关文章

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件