图解神秘的NC4HW4

nc4hw4排布配合neon加速im2col+gemm的卷积推理 nc4hw4排布配合neon加速im2col+gemm的卷积推理 一:前言 一个tensor常见的内存排布有nchw和nhwc,除此之外,MNN还有一种内存排布方式叫做nc4hw4,如何理解这个排布呢?这种排布对性能又有什么提升呢? 二:什么是nc4hw4 概念本身很简单,两幅图就很能说明.其实nc4hw4准确的说应该是n(c/4)h(w*4).一句话来说就是:沿着c方向取4个数按照w方向排列.如果c不是4的倍数,则全用0补上. 三:nc4hw4如何提升卷积推理性能 nc4hw4的出现就是为了配合矢量操 阅读详情

【GiantPandaCV导语】以卷积和im2col+gemm实现卷积操作举例,来图解深度学习中Tensor的NC4HW4(其实应该是N{C/4+C%4>0?1:0}HW4),写成NC4HW4方便阅读.

什么是NC4HW4?

  • 对于卷积操作, 根据计算机内存排布特点, 按行进行处理.处理完一个通道的数据, 转入下一个通道继续按行处理.

卷积操作示意图
  • 对于一个nchw格式的Tensor来说, 其在计算机中的内存排布是这样的:

NCHW的Tensor内存排布示意图
  • 使用cpp一次指令处理一个数据, 用来处理卷积操作,  即循环实现乘法相加即可.

卷积实现示意图
  • 现在有一条指令处理4组数据的能力, 比如x86结构的sse指令,arm的neon指令.以及GPGPU的OpenGL和OpenCL,单次处理RGBA四组数据. 如果继续使用nchw内存排布的话, 是这样的.

想使用指令集加速卷积,不能直接计算
  • 根据按行处理特点, 对于Feature和kernel的宽不是4倍数进行处理, 会出现错误. 图中的kernel很明显以已经到了第二行的值。那么有没有方法在按行处理的思想上, 一次处理4个数,而不受影响.答案是有的, 即NC4HW4.即把前4个通道合并在一个通道上, 依次类推, 在通道数不够4的情况下进行补0.

  • 经过NC4HW4重排后的Tensor在内存中的排布情况如下:

经过NC4HW4重排后的Tensor在内存中的排布示意图
  • 那么, 此时在进行单次指令处理4组数据的处理,就没有问题了.只不过处理结果也是NC4HW4结构的,需要在结果输出加上NC4HW4转nchw.

使用指令集加速卷积,可以直接计算

NC4HW4中使用im2col+gemm实现卷积:

  • im2col+gemm在深度学习中是最常用的对卷积进行加速计算的方案。最早在caffe框架中支持。思路如下:

卷积示意图
  • 使用im2col+gemm进行计算:

Im2Col图解
  • 对于NC4HW4内存排布的Tensor来说,同样可以采用im2col+gemm来处理.

  • 有如下卷积,可以使用NC4HW4内存排布方式,使用指令集优化对卷积进行加速.

卷积示意图
  • NCHW转NC4HW4.

NCHW转NC4HW4
  • NC4HW4对feature进行im2col

NC4HW4对feature进行im2col示意图
  • NC4HW4对kernel进行im2col

NC4HW4对kernel进行im2col
  • 使用SSE,Neon,OpenCL或OpenGL实现Gemm.

使用SSE,Neon,OpenCL或OpenGL实现Gemm

最后

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的程序媛姐姐

一定要备注【高清图】哦

????????????????????

➕我们的程序媛小姐姐微信要记得备注【高清图】哦

来都来了,喜欢的话就请分享、点赞、在看三连再走吧~~~

深度学习(4):NCHW和NHWC N代表数量, C代表channel,H代表高度,W代表宽度. NCHW其实代表的是[W H C N],第一个元素是000,第二个元素是沿着w方向的,即001,这样下去002 003,再接着呢就是沿着H方向,即004 005 006 007...这样到09后,沿C方向,轮到了020,之后021 022 ...一直到319,然后再沿N方向。 NHWC的话以此类推,代表的是[C W H N],第... 阅读详情

相关推荐

ONNX模型转MNN模型中permute使用说明

ONNX模型转MNN模型中permute使用说明 问题描述:在利用TensorRT或MNN或OpenVINO等推理引擎加载ONNX模型的过程中,为了少写一些代码,经常会将对图像均值归一化、通道变化等处理写到ONNX模型中。然而在利用MNN推理引擎来加载ONNX模型时,推理结果与原训练模型输出结果不一致,经过排查发现,MNN中的permute函数不支持NCHW或者NHWC格式。MNN中permute...

大山的专栏 2270

CNN加速器中的NC4HW4内存排布格式

传统的存储格式(NCHW和NHWC) 在卷积神经网络(CNN)中,特征图是一个4维的张量,分别为batch维度N,通道维度C,特征图高H和特征图宽W,在不同的深度学习框架中,特征图也有着不同的存储格式,例如NCHW和NHWC,两者的区别就是通道所在的维度不同,在不同的情况下,这两种存储格式都有各自的优点,下图即为两种存储格式的示意图。 在使用FPGA设计加速器时,由于FPGA的片上BRAM资源十分有限,无法一次性容纳所有的特征图数据,因此往往会采取分片的策略,即对于一个C×H×WC \times H \t

qq_40268672的博客 3675

保姆级教程:用GPU-Burn给你的NVIDIA Tesla服务器做个“压力体检”(附温度功耗监控脚本)

本文提供了一份详细的GPU服务器压力测试指南,重点介绍如何使用GPU-Burn工具对NVIDIA Tesla服务器进行全面的性能测试和温度功耗监控。从环境部署、多GPU测试策略到专业级监控指标解析,帮助运维人员构建标准化的GPU健康评估体系,确保AI训练和科学计算等关键业务的稳定性。

weixin_30619101的博客 395

Tensor中数据摆放顺序NC4HW4是什么意思,只知道NCHW格式,能解释以下NC4HW4格式吗?

深度学习框架TF的feature map的数据摆放格式是CHWC,onnx格式是HCHW,最近看到格式是HC4HW4不知道是什么意思? 作者:梁德澎 链接:https://www.zhihu.com/question/337513515/answer/768632471 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 简单来说NC4HW4的数据排布其实就是和RGBA这种交织的数据排布类似。下面简单描述下NCHW如何转换成NC4HW4,首先batch维度就是N不变,然.

taoqick的专栏 1674

Flowable第一篇、快速上手(Flowable安装、配置、集成)

Flowable是一个轻量级、高效可扩展的工作流和业务流程管理(BPM)引擎,支持在Java应用程序中实现复杂的工作流自动化。Flowable最初是作为Activiti项目的一个分支发展而来的,但它现在已经成为一个独立的开源项目,并在企业级应用中得到了广泛使用

Du_XiaoNan的博客 1万+

直流有刷电机控制 - 驱动电路(二)

1.如图所示为最常见的推挽驱动电路,我附加了具有正反转功能的电机驱动控制,正反转是由两个继电器组成。使用推挽电路来驱动NMOS管时充电电流和放电电流都很大,因此NMOS管导通快,关断也快,而且NMOS温度不会很高。下面来介绍一下该电路的原理。(1)PWM_MCU是由单片机给出的PWM波信号,该信号是由一些列高低电平的方波构成。当信号为高电平的时候Q3导通,经过R47再到Q5的g极,此时mos导通,如果是K1闭合是正转那么K2闭合就是反转。(2)当PWM低电平时使得Q3关断,Q6导通。

u011030644的博客 4720

【mnn】——输入tensor NC4HW4的可视化检查

mnn, NC4HW4 1. NC4HW4的排布 请参考:NC4HW4数据的排布 2. 打印检查 输入tensor 为1x3x180x640,格式为NC4HW4。可以看到第二个数据恰好隔了HxW

怡宝2号 972

MCGS 昆仑通态触摸屏 modbus TCP 数据转发

MCGS触摸屏数据转发modbus TCP数据转发

m0_63451859的博客 2万+

MNN NC4HW4

524288=512*512*2]156, [..89]158, [..90]158, [..91]158, [..92]159, [..93]160, [..94]157, [..95]156, [..96]159, 这是第三channel,82, 141, 156, 0, 0, 0, 0, 0, 84, 143, 158, 五个零, 84,143,158, 五个零, 84,143,158, 五个零... ...float *outDat = (即input Tensor host内容)

wuqi1003的专栏 302

Sigrity IBIS建模实战:如何用T2B工具快速转换SPICE模型(附避坑指南)

本文详细介绍了如何使用Sigrity T2B工具将SPICE模型高效转换为IBIS模型,涵盖从环境配置、模型预处理到转换流程和验证策略的全过程。通过实战案例和避坑指南,帮助硬件工程师掌握高速电路设计中的IBIS建模技术,提升信号完整性分析效率。

weixin_29243279的博客 395

MySQL数据库面试题(2022版)

序列号 内容 链接 1 Java基础知识面试题(2022版) https://blog.youkuaiyun.com/qq_43061290/article/details/124023797 2 Java集合容器面试题(2022版) https://blog.youkuaiyun.com/qq_43061290/article/details/124043363 3 Java异常面试题(2022版) https://blog.youkuaiyun.com/qq_43061290/article/details/124....

拉格朗日的学习笔记 1万+

NCHW与NC4HW4数据排布在卷积优化上的优劣分析

数据布局对性能影响巨大。 先来看一看在 NCHW 的布局下,怎么利用 SIMD 加速 3x3 的 depth-wise 卷积。 首先,读取数据时,需要一次性读取四个 float 作为第一行的数据,后两行的读取也是相似的;此时,读取出的三行数据已经足够计算两列输出,即,可以复用部分数据;而后,为了提高数据复用,会再读取出第四行数据,一次计算两行两列,即,可以引入循环展开;然而,残留的 5~25 和 21~25 亮度眼边界无法利用 SIMD 计算,只能逐一循环读写完成计算;按照这样的方式,就可以相应完...

独行侠 2843

学Simulink--基于多物理场耦合与系统集成的储能系统场景实例:压缩空气储能(CAES)系统的热力学建模与效率分析

本文提供了一个基于Simulink的压缩空气储能(CAES)系统热力学建模教程。通过多物理场耦合方法,详细演示了从系统架构设计到仿真测试的全过程,包括多级压缩机/膨胀机系统搭建、显热蓄热系统设计以及效率分析。文章重点强调了热管理对提升CAES效率的关键作用,并给出了68%电-电效率的优化案例。最后提出了变工况建模、不同蓄热介质对比等高级优化方向,为开发零碳大容量储能系统提供了实用工具和方法。

amy_mhd的博客 131

AISystem项目解析:推理引擎内存布局优化技术详解

在AI推理系统的性能优化中,内存布局优化是决定推理效率的关键技术之一。随着神经网络模型规模的不断增大和硬件资源的相对有限性,如何高效利用内存资源、减少内存访问延迟、提升缓存命中率,成为推理引擎设计的核心挑战。 本文将深入解析AISystem项目中推理引擎内存布局优化技术,从基础原理到高级优化策略,为您全面揭示内存布局优化在AI推理系统中的技术实现和价值。 ## 内存架构基础:CPU与GPU的内...

gitblog_00323的博客 507

基于DeepFashion2数据集的服装检测系统:YOLOv11实现与UI界面开发

80万张高质量服装图片13个服装类别:短袖上衣、长袖上衣、短袖外套、长袖外套、背心、短裤、长裤、短裙、长裙、袜子、帽子、鞋、包包每张图片包含边界框、分割掩码、landmarks等标注多样化的场景:商业图片、街拍图片、消费者图片更高效的Backbone网络改进的特征金字塔网络(FPN)自适应训练样本分配策略更精确的损失函数以下是YOLOv11的模型定义:python复制下载# 模型参数self.nc = nc # 类别数。

YOLO 455

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

使用MNN踩过的坑

个人觉得从19年8月份开始尝试使用MNN,整体感觉还是挺不错的,阿里的东西还是挺高级的,但是感觉这个东西现在还是太新了,遇到的坑很多,整体对pytorch还不太友好,这个链接下是https://github.com/alibaba/MNN/issues/74,MNN针对不同框架不支持的操作,个人看来pytorch是整体偏多的,tensorflow到2.0版本之后,个人更倾向于使用pytorch,因...

蜗牛博客 5446

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MNN使用详细指南(原创,包含树莓派构建MNN)

MNN使用指南(包含树莓派构建MNN) C++版分三步: 1、 MNN动态链接库构建: 首先请下载MNN包: https://github.com/alibaba/MNN 解压后文件夹重命名为MNN! 然后是编译:类似于opencv编译动态链接库,我们要想使用MNN同样需要进行libMNN.so构建,详情请查看https://www.yuque.com/mnn/cn/build_linux 这里我...

我们的征途是星辰大海的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MNN - 端侧推理引擎面临的挑战与应对

MNN(Mobile Neural Network)已于今年5月7日在 Github 上正式开源。淘宝无线开发专家——陈以鎏(离青)在 GMTC 全球大前端技术大会为大家...

淘系技术 1485

MNN学习笔记

MNN安装 MNN源码:https://github.com/alibaba/MNN/tree/master/tools/converter 先安装3.0以上版本的protobuf,再安装,基本无坑。 简单测试: ./backendTest.out ../benchmark/models/mobilenet-v1-1.0.mnn 10 0 ./MNNConvert -h

qq_38109843的博客 2712

多维(NCHW)Tensor中的数据摆放顺序变换

遇到一个问题,将n*c*h*w的tensor转换为n*(h*w)*1*c. tensor储存在一维数组a中,易得坐标(nn,cc,hh,ww)的元素在a中的下标为:nn*c*h*w + cc*h*w + hh*w +wwn*(h*w)1*c可以看成n(h*w)*c,四维张量简化为三维,因为h*w原本为两维,压缩成了(h*w)一维.因此原问题简化为,将n*(h*w)c转换为n(h*w)*c,即交换低

caisense的专栏 1万+

【嵌入式AI烧录终极指南】:掌握这7个核心功能,开发快人一步

掌握高效开发秘诀,详解VSCode嵌入式AI的烧录工具7大核心功能,覆盖固件烧录、模型部署与调试优化,适用于STM32、ESP等主流MCU。提升嵌入式AI开发效率,一键完成AI模型写入与验证,操作便捷稳定可靠,值得收藏。

ByteShoal的博客 772

将二维数组反转

题目: 实现如下转换 $arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; 转换后 $arr1 = [ [7, 4, 1], [8, 5, 2], [9, 6, 3] ]; 转换代码如下: function transfer($arr) { $res = []; foreach ($...

weixin_39534467的博客 1157

TNN API说明文档

TNN API说明文档 TNN:https://github.com/Tencent/TNN 说明文档:https://github.com/Tencent/TNN/blob/master/doc/cn/user/api.md 目录 TNN API说明文档 一、API兼容性 二、API调用 简介 步骤1. 模型解析 步骤2. 网络构建 步骤3. 输入设定 步骤4. 输出获取 二、API详解 API目录结构 1. core/macro.h 2. core/common.h 3.

AI吃大瓜的博客 3168
上一篇: 靠这2本算法书,我进入了梦寐以求的大厂!
下一篇: 5 个pandas神级操作,最后一个长见识了!
Wang_AI
博客等级 码龄12年 991粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值