发现自己用python图像算法的时候是用过的,然后单独想起来的时候猛住了,突然想不起来。
做个记录吧,帮自己理一理。
N:数量
C:图像波段
H:图像高度(有几行)
W:图像宽度(有几列)
NCHW格式:就是几张图像,按照波段排列像素,高是H,宽是W的所有数据data值
***********************************即: RRRRRGGGGGBBBBB
NHWC格式:几张图像,按照宽高像素排列,每个元素的位置都会有波段值的颜色(这里红绿蓝是一个像素点的一组值)依次标明所有数据的data值
***********************************即:RGBRGBRGBRGBRGB
两种数据格式进行RGB->**灰度计算的复杂度(即:R通道所有像素值乘以0.299,G通道所有像素值乘以0.587,B通道所有像素值乘以0.114,最后将三个通道结果相加得到灰度值)**是相同的,区别于访存特性。通过两张图对比可以发现,NHWC的访存局部性更好(每三个像素值即可得到一个输出像素),NCHW则必须等所有通道输入准备号才能的到最终输出结果,需要占用较大的临时空间。
NCHW则是Nvidia cuDNN默认格式,使用GPU加速时用NCHW格式会更快(也有个别情况例外)。
考虑两种格式:在GPU上训练使用NCHW格式,在CPU上做预测时使用NHWC格式。
如果对你有用的话,点赞收藏吧
参考:参考博客