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

关于地平线开发板使用nhwc格式的前向传播输出格式的理解

1. 从数据维度角度理解NHWC输出

• 在深度学习中,模型的输出可以看作是一个多维的数据结构。对于图像相关的模型,当输出是NHWC格式时,“N”代表批次大小(batch size),即一次处理的图像数量;“H”是高度(height),“W”是宽度(width),这两个维度确定了图像的空间尺寸;“C”是通道数(channels),比如对于彩色图像,通道数可能是3(RGB)。

• 例如,一个模型输出的形状为[10, 28, 28, 3](假设是一个简单的图像分类模型),这意味着一次输出10张图像,每张图像的高度是28像素、宽度是28像素,且有3个通道(可能是RGB通道)。

2. 从计算过程角度理解

• 在模型计算过程中,某些层的计算方式会自然地导致输出为NHWC格式。以卷积层为例,如果输入是NHWC格式,在经过卷积运算后,输出的数据格式通常也会保持NHWC。这是因为卷积操作是在图像的高度和宽度方向上滑动卷积核进行计算的,输出的数据在空间维度(高度和宽度)上的排列顺序与输入类似,通道数可能会根据卷积核的数量等因素而改变,但整体格式依然是NHWC。

3. 从应用场景角度理解

当数据按照NHWC格式排列时,它能够有效地提高CPU缓存的效率,并且对于基于空间信息的操作非常友好。由于大多数图像处理任务都是按行优先的方式访问数据——即先遍历宽度再遍历高度——NHWC格式确保了连续访问的数据在内存中的位置也是连续的。这意味着当CPU读取一个像素时,它周围的像素也会一同加载到缓存中,从而减少了后续访问这些相邻像素时需要再次从主存读取的可能性,进而提高了缓存命中率。这种高效的内存访问模式不仅加快了卷积运算等前向传播的速度,也对依赖于图像空间坐标的后处理步骤有着直接的帮助。
3.1 对分类ID的Cache命中提高

• 当进行分类任务时,分类ID通常与图像的特征相关联。在读取图像特征以确定分类ID的过程中,如果数据是HWC布局,在访问特征数据时,由于其在内存中的连续性,更符合cache的读取模式。

• 例如,假设cache一次能读取连续的一段数据块。在HWC布局下,对于一个图像区域的特征数据(包括与分类ID相关的特征),它们在内存中更有可能被连续存储,从而更容易被一起读入cache。当需要再次访问这些与分类ID相关的数据进行比较或者其他操作时,就更有可能直接从cache中获取,提高了分类ID相关数据的cache命中率。

3.2 对特征解码的Cache命中提高

• 在特征解码过程中,需要读取图像的特征数据。以卷积神经网络为例,在对卷积层输出的特征图进行解码操作时,HWC布局能够使相邻像素的特征数据以及同一通道的特征数据在内存中连续存储。

• 当解码器按照一定的顺序(例如逐行扫描图像特征)读取数据时,这些连续的数据更有可能被预先加载到cache中。因为cache的工作原理是将最近访问过的数据及其附近的数据存储起来,以备后续访问。HWC布局下的数据存储方式正好符合这种特性,使得在特征解码过程中频繁访问的数据能够在cache中被找到的概率增加,从而提高了特征解码的cache命中率。


http://www.kler.cn/a/488498.html

相关文章:

  • 提升 PHP 编码效率的 10 个实用函数
  • 【C++经典例题】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句
  • linux 设置mysql 外网访问
  • 【 Verdi实用技巧-Part-3】
  • MATLAB算法实战应用案例精讲-【数模应用】图像边缘检测(附MATLAB和python代码实现)(二)
  • 基于SpringBoot的洗浴管理系统
  • 【FlutterDart】tolyui_feedback组件例子效果(23 /100)
  • vue3 初体验
  • 学习通过几何约束从单个图像预测 3D 车道形状和相机姿态 | 论文解读
  • 前端哪些内容最好添加专属前缀?
  • 嵌入式系统 tensorflow
  • HarmonyOS开发:ArkTS初识
  • Windows使用AutoHotKey解决鼠标键连击现象(解决鼠标连击、单击变双击的故障)
  • package包机制详解
  • HTML实战课堂之倒计时页面
  • 如何使用Scala和Selenium爬取知乎视频并保存到本地
  • 分布式ID—雪花算法
  • 【python翻译软件V1.0】
  • 计算机毕业设计hadoop+spark+hive新能源汽车推荐系统 汽车数据分析可视化大屏 新能源汽车推荐系统 汽车爬虫 汽车大数据 机器学习
  • istio-proxy oom问题排查步骤
  • JVM 触发类加载的条件有哪些?
  • 修改sshd默认配置,提升安全
  • Elasticsearch—索引库操作(增删查改)
  • word论文排版常见问题汇总
  • 【JAVA】时间戳和日期时间互转
  • 使用 Spring Boot 实现钉钉消息发送消息