当前位置: 首页 > news >正文

(8)FPGA-CNN池化层

池化层

池化层(Pooling Layer)是卷积神经网络(CNN)中常用的下采样模块,其作用是在保留主要特征信息的同时降低特征图的空间分辨率,从而减少计算量和参数数量,提高模型的鲁棒性。常见的池化方式包括最大池化(Max Pooling)和平均池化(Average Pooling),其中最大池化通过选取局部区域内的最大值来突出显著特征。通过池化操作,特征图尺寸逐渐减小,既能降低后续网络的计算复杂度,又能增强模型对目标位置微小变化和噪声干扰的适应能力。

最大池化

常用的是2×2最大池化(Max Pooling)通常采用Stride=2,即窗口每次移动2个像素。对于输入特征图中的每个2×2区域,池化层只保留其中的最大值作为输出,其余数据被舍弃。以上例中,4×4输入特征图经过2×2最大池化后输出为2×2特征图,空间尺寸缩小为原来的1/2,而数据量减少到原来的1/4。

FPGA实现

该池化层 Verilog 模块通过移位寄存器搭建滑动窗口缓存,控制窗口按指定步长遍历输入特征图,最大池化经多级比较器提取窗口极值,输出降采样后的特征数据,采用全流水线结构降低计算延迟。代码如下:

xpm_fifo_sync #( .FIFO_MEMORY_TYPE ("block" ), // "auto" / "block" / "distributed" / "ultra" .FIFO_WRITE_DEPTH (FIFO_DEPTH ), .WRITE_DATA_WIDTH (24 ), .READ_DATA_WIDTH (24 ), .READ_MODE ("fwft" ) ) u_lane_buffer( .wr_clk (clk ), .rst ((~aresetn)|fifo_rst), .din (wr_data ), .wr_en (wr_en ), .full ( ), .dout (rd_data ), .rd_en (rd_en ), .empty ( ) ); wire [23:0] w01,w11; reg [23:0] w00,w10; assign w01 = rd_data; assign w11 = wr_data; assign wd_valid = wr_en & (row_cnt >= 1) & (col_cnt >= 1) & row_cnt[0] & col_cnt[0]; always @(posedge clk or negedge aresetn) begin if(~aresetn)begin w00 <= 0; w10 <= 0; end else begin w00 <= w01; w10 <= w11; end end //=============Compare============ reg signed [23:0] temp_a,temp_b; reg signed [23:0] pool_rlt; reg pool_vld; reg valid_d1; always @(posedge clk or negedge aresetn) begin if(~aresetn)begin valid_d1 <= 0; pool_vld <= 0; end else begin valid_d1 <= wd_valid; pool_vld <= valid_d1; end end always @(posedge clk or negedge aresetn) begin if(~aresetn)begin temp_a <= 0; temp_b <= 0; end else if(wd_valid)begin if(w00 > w01)begin temp_a <= w00; end else begin temp_a <= w01; end if(w10 > w11)begin temp_b <= w10; end else begin temp_b <= w11; end end else begin temp_a <= 0; temp_b <= 0; end end always @(posedge clk or negedge aresetn) begin if(~aresetn)begin pool_rlt <= 0; end else if(valid_d1)begin if(temp_a > temp_b)begin pool_rlt <= temp_a; end else begin pool_rlt <= temp_b; end end else begin pool_rlt <= 0; end end

仿真验证

仿真的激励为224x224的男版lena图片,经过一个5x5x3的卷积计算后,得到220x220的结果,再经过池化层最终的尺寸为110x110。下面是rtl的计算结果和python里计算结果的对比:

本章节完成了池化层的 Verilog 设计与仿真验证工作。针对池化运算的窗口滑动、数据比较/累加及输出时序等关键逻辑进行了实现,并搭建仿真测试环境生成测试激励。将 Verilog 仿真结果与 Python 参考模型输出进行逐项对比,结果一致,验证了所设计池化层在功能和计算结果上的正确性,为后续卷积神经网络硬件模块的集成与优化奠定了基础。

http://www.cnnetsun.cn/news/3322434.html

相关文章:

  • ARIA状态与属性实战教程:动态内容无障碍访问的完整解决方案
  • OpenWhispr未来路线图:即将推出的功能与改进预览
  • 5大核心功能重塑你的B站体验
  • Seekr插件系统:如何扩展和定制你的OSINT工具集
  • Python3操作MySQL由脚本小子迈向工程化开发
  • Python远程操作文件?这招不学,等于白学
  • 生产环境部署:immutable在微服务架构中的最佳实践
  • 0 基础入门React Native鸿蒙跨平台开发:速度单位换算器实战
  • pz 高级用法:如何利用自动导入功能简化复杂的数据处理任务
  • minimal-json并发处理最佳实践:线程安全与性能平衡指南
  • 5分钟解决字体焦虑:M+ FONTS让你的设计从此告别选择困难
  • Havenlon|历史中的执行控制(五):珍珠港——静默、误判与执行窗口的不可逆性
  • 99.3.智能门禁-人脸+播报-基于STM32单片机物联网设计【硬件+APP+云平台】
  • 订单自动化革命已爆发,你的团队还在人工核单?AI Agent订单处理效率提升470%,限时开放3套行业适配模板
  • 公开全项目关键词,豆包 AI + 人工双重验证护航:上市公司数字化无形资产占比 2007-2024
  • 从业务对象到可恢复编辑现场,完整理解 SAP Fiori 事务应用的 Draft 开发
  • CCManager与Devcontainer无缝集成:打造安全隔离的AI开发环境
  • 【RK3506】3、通过sysfs控制GPIO与PWM子系统
  • 土木工程论文降AI工具免费推荐:2026年土木工程毕业论文AIGC超标4.8元知网达标完整方案
  • 如何用嘎嘎降AI处理会计学论文:会计学毕业论文降AI4.8元知网达标完整教程
  • 如何用嘎嘎降AI处理土木工程论文:土木工程毕业论文降AI4.8元知网维普达标完整教程
  • 从HIS到PACS:积水潭贵州医院全业务国产化适配SpringBoot实战
  • Android Gradle 多模块重构:移动目录后 2 种 settings.gradle 配置修复方案对比
  • STM32F407寄存器点灯
  • 华为OD机试真题 新系统 2026-07-05 PythonJS 实现【二叉树两节点间的最小跳数】
  • 高性能单线程异步架构设计:ET框架核心技术深度解析与性能优化实战
  • maldev 终极指南:恶意软件开发技术深度解析与实践教程
  • 软件测试入门——第三十六课(性能测试之从用例设计到执行落地的完整方法论)
  • Claude 与 ChatGPT:哪个更适合科研和学术写作,深入对比分析
  • 【HarmonyOS】List组件多层对象嵌套ForEach渲染更新完全指南(@Observed、@ObjectLink、@State、Array刷新原理