RISC-V技术论坛
直播中

李晓鹏

8年用户 1365经验值
私信 关注
[经验]

数据全复用高性能池化层设计思路分享

大家好,本团队此次分享的内容为可实现数据全复用高性能池化层设计思路,核心部分主要由以下3个部分组成;
1.SRAM读取模块;——池化使用的存储为SRAM
基于SRAM读与写时序,约束池化模块读与写时序。读数据时,输入读取地址后,于下一时钟SRAM输出该地址读数据;写数据时,地址与数据同步输入SRAM

2.SHIFT_RAM模块;
下图为SHIFT_RAM原理图,借鉴行缓存器的原理,填满后输出行首,使用时根据输入实际图像大小与核大小使用对应容量,eg.map_max=64,fliter_max=8,则需64*8的大小。


3.数据处理模块
基于以上SHIFT_RAM输出的数据,数据处理模块主要实现两个功能,一是通过cntcnt_colcnt_stride_colcnt_stride_row分别记录输入的总像素、当前窗口所在列、当前窗口所在步长间隔,用于数据有效性判断。二是使用三级流水线处理数据,其中max pool使用比较、缓存、比较,分别比较tap数据、缓存中间数据、比较中间数据。三级流水线的输出分别存放在maxvaldata_middlemax_value三个中间结果中;average pool使用累加、缓存、累加并相除,分别累加tap数据、缓存中间数据、累加中间数据并做除法得平均。三级流水线的输出方别放在sum_datadata_middlesum_data_middleave_value四个中间结果中。其中比较与除法均使用组合逻辑实现。



下图为实现比较结构图,当核尺寸最大为8时,SHIFT_RAM每次输出8个行首数据,将这8个数据通过比较模块按下图方式比较出data_r,再基于data_r与核大小进一步比较大小。例如核尺寸为2时,data_r即为比较结果,核尺寸为4时,则对data_1data_3进行一次比较即为比较结果,以此类推。
                              

实现以上部分,可实现池化数据的全复用,无需多次读取数据,且池化时间短,性能高。
                                                            

更多回帖

×
20
完善资料,
赚取积分