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

行缓存(line buffer)在图像卷积中的工作方式

行缓存(line buffer)在图像卷积中的工作方式
上面这张图配合文字,展示了行缓存(line buffer)在图像卷积中的工作方式

  • 上半部分是一个按行扫描输入的图像块(示例为 9×9,编号 1–81)。
    蓝色表示已被写入行缓存并按队列等待的数据,绿色是当前这一步卷积所需的 3×3 邻域像素。此刻选中的 3×3 为像素 {2,3,4 / 11,12,13 / 20,21,22}。

  • 下半部分画的是行缓存结构:三条“行 FIFO”(对应 3×3 卷积核的三行)。AXI4-Stream 按顺序把新像素从右侧送入(虚线箭头,正在进入的是 23、24、25),缓存里的数据整体向左“移位”。
    当某个像素被移到最左上角位置时,它已经“过窗”,会从缓存中丢弃(删除)。

  • 对应当前位置,行缓存能同时读出 9 个像素(绿色块),与 3×3 卷积核的 9 个系数并行相乘,再经过加法树求和,得到新的输出像素(图中标成 N2)。只要行缓存支持9路并发读(通过多端口/分区/多BRAM实现),9 次乘法就能完全并行。

  • 当需要并行进行多路卷积(例如多个卷积核/输出通道)时,行缓存的容量与分区必须相应调整或复制,以提供足够的并发访问端口,避免端口冲突。

一句话:图示的是一个随输入像素流滚动的三行缓存,它不断滑动3×3窗口,支持九值并行乘加,从而高效地产生连续的卷积输出。

像素 {2,3,4 / 11,12,13 / 20,21,22}被选中的原因:
行缓存在做的是“滑动 3×3 窗口”。

  • 像素按行顺序 1、2、3、… 进入缓存,3×3 卷积需要同时读出 三行 × 三列 的 9 个像素。
  • 这时缓存中三行的数据分别是(从左往右):
    第1行:2…10;第2行:11…19;第3行:20…25(新像素从右侧持续进入,整行一起向左移)。三行在列方向上是对齐的。
  • 硬件把每行最左边的三个位置作为当前卷积窗口的三列,于是得到:
    上:2、3、4;中:11、12、13;下:20、21、22 —— 这就是图中标绿的 3×3。
  • 这个 3×3 的中心是 12,对应输出像素 N2(第一行的第 2 个输出)。
    之后每到一个新像素(例如 26),窗口整体右移一列,读到的 3×3 会变成 {3,4,5 / 12,13,14 / 21,22,23},输出 N3,以此类推。

所以,从 2–25 中选出的就是在当前时刻位于三行“头部”的 3×3 对齐像素

Reference:
F. Kästner, B. Janßen, F. Kautz, M. Hübner and G. Corradi, “Hardware/Software Codesign for Convolutional Neural Networks Exploiting Dynamic Partial Reconfiguration on PYNQ,” 2018 IEEE International Parallel and Distributed Processing Symposium Workshops (IPDPSW), Vancouver, BC, Canada, 2018, pp. 154-161, doi: 10.1109/IPDPSW.2018.00031.

http://www.dtcms.com/a/344115.html

相关文章:

  • 【iOS】YYModel第三方库源码
  • 飞机起落架减震筒的深孔检测方法探究 - 激光频率梳 3D 轮廓检测
  • 用户登录Token缓存Redis实践:提升SpringBoot应用性能
  • Flutter学习笔记(七)---主题
  • 嵌入式学习day34-网络-tcp/udp
  • 如何判断是否应该为了一个小功能而引入一个大体积的库
  • 配电网重构优化:以减小网损为目标的智能算法实现
  • GitLab CI :深入剖析 gl-sbom-report.cdx.json 解码“数字身份证”
  • 云蝠智能 VoiceAgent:重构售后服务场景
  • 岭回归算法拉索回归
  • LeeCode 40.组合总和II
  • 数据结构之深入探索归并排序
  • 西门子S7-1200系列基本组态常见问题
  • 【C++】多态(详解)
  • Debezium监听MySQL binlog并实现有状态重启
  • 工业环境电缆火灾预防的分布式光纤在线监测
  • 质谱数据解读
  • 【微服务的数据一致性分发问题】究极解决方案
  • Unity设置UI显示区域
  • 主题配色下的背景透明度
  • uniapp plus.io API 封装文件读写方法
  • 【IDEA2017】使用设置+创建项目的不同方式
  • GaussDB SQL引擎(1)-SQL执行流程与解析器和优化器
  • 【Qt调试】断点时,Expressions不能查看变量
  • 新手向:用FastAPI快速构建高性能Web服务
  • 单北斗变形监测系统应用指南
  • c++:MFC中sqlite3的使用(附实际案例)
  • VScode远程连接Ubuntu报错问题分析
  • 表格识别技术:通过图像处理与深度学习,将非结构化表格转化为可编辑结构化数据,推动智能化发展
  • Mac电脑英特尔版本最新系统15.6.1安装php环境