RGB与通道
在灰度图一节的最后,我们给出了一个由彩色图片转成灰度图的示例,并且通过 ’ color_image.mode '获取了图片的格式:彩色图片获取到的格式为RGBA,灰度图为L。
这一节我们介绍一下RGB图片以及通道的概念,我认为通道在整个深度学习中很重要,并且极为重要。
举个例子:在很多时候,对神经网络中的一些算法做工程化实现,或者做性能优化,除了关注算法本身,还会关注数据存储格式。一般在pytorch中,数据存储格式为NCHW,C代表的就是通道(channel),这样对于需要在通道维度中归一化的算法是极其不友好的。
因为数据在通道维度中不是连续的,导致取到完整的通道维度信息要跨越很大的地址范围,CPU或者XPU对于这类的数据寻址性能都是很差的,至少要比连续寻址差。
上面是举了一个在实际中经常会遇到的一类问题,通道维度数据在存储器中摆放不连续。
RGB
彩色通常由红色、绿色、蓝色,三个基本颜色组成,这种颜色表示方式被称为彩色RGB模型。
在这个模型中,每个像素的颜色由这三种基本颜色组合而成,因此,一个平面上看似是一个像素,实际是由三个不同颜色(不同通道)的像素组成。这里的R/G/B三种颜色,就认为是彩色图片的三个通道。
RGB分量
彩色图片有RGB三个通道。三张分别为红色通道、绿色通道、蓝色通道的图片融合,可以构成一幅色彩斑斓的图片。
下图左侧是一张用AI生成的彩色原图,后面是分别提取的每个通道的分量绘制而成的图片。
RGB图像在计算机中的数据大小
平时我们说,分辨率为1920x1080的图片,代表在图片的长宽两个方向上,有1920x1080个像素,但是,在学习了RGB模型之后,我们知道除了长宽方向之外,彩色图片还存在一个方向,那就是通道方向。
也就是说,彩色图像应该用三维数据来表示,而不是二维。
举个例子,一张3个通道的RGB图像,长和宽分别为1920x1080个像素,我们可以表示该图像的形状为1920x1080x3。
一张 1920 x 1080 x 3 x 1 Bytes = 7MB,大约7M的数据量,实际存储时受图片压缩算法的影响,在计算机磁盘中看到的图片大小可能会小于这个数值,但是可以通过这种方法来估算图片在计算机中的内存占用。
通道的意义
在后续中,我们会经常提到通道这个概念。
神经网络在推理过程中,很多时候无论时卷积算法还是其他算法,计算的都是特征图中的通道关系,特征图是一种神经网络中间层输出的图像,其通道数有多有少,多则几千,少则几十。在特征图中,一个通道代表一个特征。
假设某一层特征图只有两个通道,那么将这两个通道的特征可视化之后,可能呈现出来的分别是“ 轮廓 ”特征非常明显,或者“ 嘴巴细节 ” 的特征非常明显。回到RGB的图像,因为RGB图像有3个通道,如果把彩色图片当作特征图的话,那我们可以说RGB图片有3个特征通道,每个通道都或多或少的保留着原始图像的某些细节和轮廓特征,就像上面的三张分量图片一样,当然最主要的特征便是颜色:比如R通道,有着B通道没有的红色特征。