OrangePi AIpro 香橙派 昇腾 Ascend C算子开发 - NCHW和NHWC格式在内存中的存储方式及遍历方法

news2024/9/21 8:04:13

OrangePi AIpro 香橙派 昇腾 Ascend C算子开发 - NCHW和NHWC格式在内存中的存储方式及遍历方法

flyfish

从计算机硬件的角度来看,内存本质上是线性的一维数组 。尽管在编程时可以使用多维数组或更复杂的数据结构,但这些多维数据最终都被线性化存储在内存中。

内存的本质是线性的一维地址空间

计算机的物理内存可以理解为一个连续的、线性的字节数组,每个字节都有唯一的地址。这个地址是从 0 开始一直递增到内存的最大可用地址。这些地址的集合形成了一个一维的地址空间 ,即每个存储单元都有一个唯一的地址,它们是线性排列的。虽然编号从0(在32位系统中是从0x00000000开始)开始,但有些特殊的地址可能会被系统保留,用于硬件操作或其他目的。
因此,无论数据结构有多复杂,例如二维数组、三维张量或者更复杂的树或图结构,它们最终都会通过特定的地址映射规则存储在这个线性的一维内存空间中。

多维数据结构的内存线性化

多维数据结构,比如二维、三维数组,在内存中存储时会被"线性化"。也就是说,这些多维结构的数据会按照一定的规则映射到一维的内存地址空间中。

举个例子,假设有一个二维数组:

int array[3][4]; // 3行4列的二维数组

尽管它是一个二维数组,但在内存中,它实际上是按行存储的线性数组:

Row 0: array[0][0], array[0][1], array[0][2], array[0][3]
Row 1: array[1][0], array[1][1], array[1][2], array[1][3]
Row 2: array[2][0], array[2][1], array[2][2], array[2][3]

内存中存储顺序是:array[0][0], array[0][1], …, array[2][3]。它们以线性顺序依次排列在一维的内存空间中。

当处理 RGB 图像数据时,通常有三种通道:红色(R)、绿色(G)和蓝色(B)。图像数据的存储方式可以是 NHWCNCHW 格式。

1. NCHW 格式存储方式

NCHW 格式表示数据存储的顺序是:批次(N),通道(C),高度(H),宽度(W)。同样以 RGB 图像为例,通道数 C=3。在 NCHW 格式中,所有像素的红色通道数据首先存储,然后是绿色通道数据,最后是蓝色通道数据。
对于同样的 2x2 RGB 图像,数据排列为 NCHW,则内存中的线性存储顺序为:

R0, R1, R2, R3, G0, G1, G2, G3, B0, B1, B2, B3

这里 R0, R1, R2, R3 是四个像素的红色通道值,接下来是绿色通道,最后是蓝色通道。

遍历顺序

最内层 :先遍历宽度 W
其次 :然后遍历高度 H
再次 :再遍历通道 C
最外层 :最后遍历批次 N

2. NHWC 格式存储方式

NHWC 格式表示数据存储的顺序是:批次(N),高度(H),宽度(W),通道(C)。以 RGB 图像为例,通道数 C 等于 3,对应 R、G、B 三个通道。假设有一个形状为 [N, H, W, C] 的张量,其中 C=3,对应 RGB 通道。

例如,假设一个 2x2 的 RGB 图像,数据排列为 NHWC,则内存中的线性存储顺序为:

R0, G0, B0, R1, G1, B1, R2, G2, B2, R3, G3, B3

这里 R0, G0, B0 是第一个像素的红、绿、蓝通道值,R1, G1, B1 是第二个像素,依此类推。

遍历顺序

最内层 :先遍历通道 C
其次 :然后遍历宽度 W
再次 :再遍历高度 H
最外层 :最后遍历批次 N

两者比较

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FactoryBean 实战练习 - 注入自定义 Date

java.util.Date在Spring中被当做简单类型,简单类型在注入的时候可以直接使用value属性或value标签来完成。但是对于Date类型来说,采用value属性或value标签赋值的时候,对日期字符串的格式要求非常严格,必须是这种格式的&#xff1…

2) gaussian-splatting模型查看

本文在上面环境配置好的基础上,下载模型并查看,主要分享SIBR_viewers的编译流程,并简单分析SIBR_gaussianViewer_app的源码结构 目录 1 SIBR_viewers的编译2 SIBR_gaussianViewer_app源码解析 内容 1 SIBR_viewers的编译流程 用CMake配置项…

幂等的 4 种通用方案,一次性吃透

兄弟们,79 节了,59元100个案例(实战源码文档技术支持) 涵盖:高并发、接口性能优化、幂等、超卖、MQ专题、分布式事务、分库分表、常见问题排查、接口签名、接口加解密等各种实战案例;需要的朋友加我微信&am…

亦菲喊你来学机器学习(18) --TF-IDF方法

文章目录 TF-IDF词频TF逆文档频率IDF计算TF-IDF值 应用实验使用TF-IDF1. 收集数据2. 数据预处理3. 构建TF-IDF模型对象4. 转化稀疏矩阵5. 排序取值完整代码展示 jieba分词总结 TF-IDF TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文档频率…

浅析Java线程池实现原理 1

目录 一、线程池 1.1 线程池是什么 1.2 线程池解决的问题是什么 二、线程池核心设计与实现 2.1 总体设计 ThreadPoolExecutor是如何运行,如何同时维护线程和执行任务的呢? 2.2 生命周期管理 2.3 任务执行机制 任务调度 任务缓冲 任务申请 任…

日常工作中的AI助手

近几年,人工智能进入了一个高速发展的阶段。AI也与各种业态深度融合,各类工具的出现也为行业赋能。今天,我们一起来探索几款能够在日常工作中提升效率的AI助手。 排名不分先后,内容仅供参考,大家可以根据实际需求自行…

计算机网络1.1

计算机网络:多台电脑 通过交换机 相互连接 互连网:多个计算机网络 通过路由器 连接 互联网:最大的互连网 电路交换: 报文交换:传送的数据在中间节点进行储存,再进行转发(根据转发表确定转…

ctfshow(web入门-命令执行)-1

1.web29 只有当c参数的值不包含“flag”(区分大小写),才会执行这段代码 $c $_GET[c];if(!preg_match("/flag/i", $c)){eval($c);}只要payload中没有flag即可 先尝试cat (右键源代码) tail,tac皆可 system("tail fla*"…

利用深度学习实现验证码识别-1

验证码(CAPTCHA)是网络安全中常用的一种机制,用于区分人类用户和自动化程序。然而,随着人工智能技术的发展,计算机视觉和深度学习算法在识别验证码方面取得了显著进展。本文将介绍如何使用PyTorch框架实现一个深度学习模型来识别简单的数字验证码。 数据生成与预处理 首先,我…

数据图像处理26

六、图像分割 6.3 分水岭图像分割 6.3.1分水岭算法的基本概念 分水岭算法之所以得名,是因为其的分割原理与地理学中的分水岭现象非常相似。在地理学中,分水岭是分隔相邻水系的山岭或高地,雨水会分别流向两侧的水系。 分水岭算法常用于图像…

代码随想录训练营day34|62.不同路径,63. 不同路径 II,343.整数拆分,96.不同的二叉搜索树

不同路径1 题目 题目并不难想&#xff0c;每一个点只有两种走到的方法&#xff0c;要么从左侧来&#xff0c;要么从上侧来&#xff0c;所以 dp[i][j]dp[i-1][j]dp[i][j-1]; vector<vector<int>> dp(m,vector<int>(n,0)); for(int i0;i<m;i){for(int j0;j…

MLM之Qwen:Qwen2-VL的简介、安装和使用方法、案例应用之详细攻略

MLM之Qwen&#xff1a;Qwen2-VL的简介、安装和使用方法、案例应用之详细攻略 目录 Qwen2-VL的简介 1、主要增强功能&#xff1a; 2、模型架构更新&#xff1a; 3、性能 图像基准测试 视频基准测试 代理基准测试 多语言基准测试 4、新闻 5、限制 Qwen2-VL的安装和使用…

【hot100篇-python刷题记录】【翻转二叉树】

R7-二叉树篇 一眼递归 递归具有相同子问题的特点。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def in…

metallb-speaker缓存

手动修改metallb-config arping返回2个mac地址 删除pod mac正常返回 pkill 进程 返回2个mac

pycharm 2024.1下载、安装

下载 下载官网&#xff1a; Other Versions - PyCharm 选择需要的版本下载&#xff0c;这里以 2024.1 的版本为例 安装 双击下载好的安装程序&#xff0c;点击下一步 选择安装路径&#xff0c;最好是英文路径&#xff1b;然后下一步 点击完成 激活 网址&#xff1a; Some…

突发!某GPU芯片独角兽!400+人 原地解散!

今天偶然打开脉脉APP&#xff0c;看看最近IT圈子又有什么劲爆消息&#xff0c;发现某芯片独角兽全员原地解散的消息登上热搜 No1了。 之前没有怎么关注过芯片行业&#xff0c;因此完全不知道这家公司&#xff0c;没想到成了热搜No1&#xff1b;由此可见该公司在行业内应该还是比…

安装vmtools管理虚拟机教程

目录 1.什么是vmtools 2.安装教程 2.1删除和安装 2.2文件的复制和粘贴 2.3指令操作 3.检验效果 4.小结 1.什么是vmtools vmtools就是安装之后可以让我们更好的管理我们的虚拟机&#xff1b; 我们可以设置windows和centos共享的文件夹&#xff0c;让该文件夹实现共享&am…

C++初始化列表,staic成员变量

初始化列表的引入 class Stack { public:Stack(int capacity){_arr (int*)malloc(sizeof(int) * capacity);if (_arr NULL){perror("malloc->_newarr");return;}_capacity capacity;} private:int _capacity;int _size;int* _arr; //默…

滚动视图ScrollView

activity_scroll_view.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_pare…

嵌入式全栈开发学习笔记---Linux常用库(json)

目录 入门级问题 为什么使用json? 什么是json? json-c库 json源码 安装方法 json-c API Json类型 C-API 将一个字符串转换成符合json格式的字符串(json对象) 定义一个字符串数组 定义一个json_object结构体指针 把一个字符串转换成一个json对象 将转换成json对…