专栏算法工具链NHWC与NCHW介绍

NHWC与NCHW介绍

ArmStrong.David@horizon2020-12-23
317
0

一、概念:

首先这是两种批量图片的数据存储方式,定义了一批图片在计算机存储空间内的数据存储layout。N表示这批图片的数量,C表示每张图片所包含的通道数,H表示这批图片的像素高度,W表示这批图片的像素宽度。其中C表示的通道数可能有多种情况,例如,RGB图片格式的通道为3通道,R(红色)、G(绿色)、B(蓝色)各占一个通道,表示图片中每个像素点都有三个通道值,每个通道值范围是[0~255],三个通道的叠加呈现出一个像素的颜色。RGB图像还有四通道的表示,除了RGB三通道之外,还有一个alpha通道,表示透明度。如果是灰度图,则只有一个通道。YUV图片也包含了三个通道,与RGB不同的是YUV的数据表现方式有多样组合,详情可以参考“图像常见格式介绍”。https://developer.horizon.ai/forumDetail/136488103547258553

二、数据layout理解

以RGB数据格式的图像为例,一张RGB图片可以由H、W、C三个参数来描述,图像的高度和宽度分别对应H和W这两个维度,而图像中每一个像素点都有3个值来表示,便是表示红色的R、绿色的G和蓝色的B,每个值的取值范围是[0~255],如下图所示:

图中 Rij 表示图像的第i行第j列的像素中的R通道值,同理可推 Gij Bij

NHWC:同一个像素点的多通道值连续存储

如像素点11的三个通道值存储连续,存储顺序为:R11,G11,B11,紧接着沿着W方向进行存储,最后H方向存储。如下图:

NCHW:同一个通道内的各像素点的值连续存储

如对于通道R,数据的存储顺序为:先W后H,R11,R12,R13...,R21,R22,R23,...,所以这种存储方式是同一通道内的像素值的连续存储。如下图:
最后是多张图片的存储N,表示一共有N张图片。NHWC和NCHW表示两种图片数据存储方式,应用于不同的硬件加速场景之下。在intel GPU加速的情况下,希望在访问同一个channel的像素是连续的,一般存储选用NCHW,这样在做CNN的时候,在访问内存的时候就是连续的了,比较方便。

三、NHWC与NCHW之间转化

两种存储方式展示了图片数据在储存器中的存储方式,这两种存储方式之间可以相互转换,以NHWC转NCHW为例,可以做如下转换:

算法工具链
杂谈
评论0
0/1000