NCHW与NHWC格式
NCHW与NHWC格式
下图很好的描述了各种不同的格式。
N代表数量, C代表channel,H代表高度,W代表宽度。
NCHW其实代表的是[W H C N],第一个元素是000,第二个元素是沿着w方向的,即001,这样下去002 003,再接着呢就是沿着H方向,即004 005 006 007...这样到019后,沿C方向,轮到了020,之后021 022 ...一直到319,然后再沿N方向。
NHWC的话以此类推,代表的是[C W H N],第一个元素是000,第二个沿C方向,即020,040, 060..一直到300,之后沿W方向,001 021 041 061...301..到了303后,沿H方向,即004 024 .。。304.。最后到了319,变成N方向,320,340....
图中所示a就是指四个维度。
在不同的硬件加速的情况下,选用的类型不同,在intel GPU加速的情况下,因为GPU对于图像的处理比较多,希望在访问同一个channel的像素是连续的,一般存储选用NCHW,这样在做CNN的时候,在访问内存的时候就是连续的了,比较方便。
TensorFlow有两种数据格式NHWC和NCHW
TensorFlow有两种数据格式NHWC和NCHW,默认的数据格式是NHWC,可以通过参数data_format指定数据格式。这个参数规定了 input Tensor 和 output Tensor 的排列方式。
1、data_format
设置为 “NHWC” 时,排列顺序为 [batch, height, width, channels]
设置为 “NCHW” 时,排列顺序为 [batch,
channels, height, width]
data_format 默认值为 "NHWC。其中 N 表示这批图像有几张,H 表示图像在竖直方向有多少像素,W 表示水平方向像素数,C 表示通道数(例如黑白图像的通道数 C = 1,而 RGB 彩色图像的通道数 C = 3)。为了便于演示,后面作图均使用 RGB 三通道图像。
NCHW 中,C 排列在外层,每个通道内像素紧挨在一起,即 'RRRRRRGGGGGGBBBBBB' 这种形式。
NHWC 格式,C 排列在最内层,多个通道对应空间位置的像素紧挨在一起,即 'RGBRGBRGBRGBRGBRGB' 这种形式。
如果需要对图像做彩色转灰度计算,NCHW 计算过程如下:
即 R 通道所有像素值乘以 0.299,G 通道所有像素值乘以 0.587,B 通道所有像素值乘以 0.114,最后将三个通道结果相加得到灰度值。
相应地,NHWC 数据格式的彩色转灰度计算过程如下:
最佳实践:设计网络时充分考虑两种格式,最好能灵活切换,在 GPU 上训练时使用 NCHW 格式,在 CPU 上做预测时使用 NHWC 格式。
在不同的硬件加速的情况下,选用的类型不同,在intel GPU加速的情况下,因为GPU对于图像的处理比较多,希望在访问同一个channel的像素是连续的,一般存储选用NCHW,这样在做CNN的时候,在访问内存的时候就是连续的了,比较方便。
# NCHW [batch,in_channels,in_height,in_weight]
# NHWC [batch,in_height,in_weight,in_channels]
# CHWN [in_channels,in_height,in_weight,batch]
# 转换 NCHW---NHWC
import tensorflow as tf
x = tf.reshape(tf.range(24),[1,2,3,4])
out = tf.transpose(x,[0,2,3,1])
print (x.shape)
print (out.shape)
#转换NHWC--NCHW
import tensorflow as tf
x = tf.reshape(tf.range(24), [1, 3, 4, 2])
out = tf.transpose(x, [0, 3, 1, 2])
print (x.shape)
print (out.shape)
参考链接:
https://www.cnblogs.com/sunny-li/p/9630305.html
https://blog.csdn.net/weixin_37801695/article/details/86614566
https://mp.weixin.qq.com/s/I4Q1Bv7yecqYXUra49o7tw
https://blog.csdn.net/weixin_41847115/article/details/83794551
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2021-02-09 pytorch生成对抗示例
2021-02-09 PyTorch 进行 Neural-Transfer
2021-02-09 pytorch空间变换网络
2021-02-09 Jittor 的Op, Var算子
2021-02-09 元算子卷积层实现
2021-02-09 Caffe实现概述
2021-02-09 Halide视觉神经网络优化