卷积网络中的通道(Channel)理解
卷积网络中有一个很重要的概念,
通道(Channel)
,也有叫特征图(feature map)的。卷积网络中主要有两个操作,一个是
卷积(Convolution)
,一个是
池化(Pooling)
。其中池化层并不会对通道之间的交互有影响,只是在各个通道中进行操作。
而卷积层则可以在
通道与通道之间进行交互
,之后在下一层生成新的通道,其中最显著的就是Incept-Net里大量用到的1×1卷积操作。基本上完全就是在通道与通道之间进行交互,而不关心同一通道中的交互。
一般我们说图像的通道,有两种含义的解释
一是图像的色彩通道(如RGB),二是特征图(卷积过滤器的输出结果)的输出通道(out_channel)
实际上,两者本质上是相同的,都是表示之前输入上某个特征分布的数据。
那么先来看看为什么可以说它们是相同的。
一、图像的色彩通道
通道这个概念最初指的是电子图片中
RGB
通道,或者
CMYK
通道这样的配色方案,比如说一张RGB的64×64的图片,可以用一个64x64x3的张量来表示。这里的3指的就是通道,分别为红色(Red)、绿色(Green)、蓝色(Blue)三个通道。
因为这三种颜色是三原色,所以基本上可以合成任何人眼可分辨的颜色。而三个通道的图片也基本上可以表示所有图片了。
在计算机视觉处理中,一般图片数据除了是单通道的灰度图片外,就是RGB通道的彩色图片了。
对RGB图片进行卷积操作后,根据过滤器的数量就可以产生更多的通道。事实上,多数情况还是叫后面的卷积层中的通道为,特征图。但实际上在张量表示下,特征图和前面提到的通道差不多,有时候后面的也都叫通道了。
当把通道和特征图当成是一个东西,然后来看RGB图片中的通道是怎么获得的就会非常有意思了。
首先通道需要卷积操作来完成,也就是说我们
需要三个过滤器来生成RGB通道
。那么这个过滤器是什么呢,又是以什么为输入呢。
拿以上数码相机成像过程来类比卷积的话,就会发现,这里的红绿蓝三色的滤光片,正好可以类比成卷积中的过滤器,外界射进来的光就是输入,
通过这三个特征过滤器,获得了一个三通道的输出
。
那么卷积核大小是多大呢,这里可以说是感光元件上一个像素大小,而原始的射入的光的精度则是光子级别的,对这个光的一个像素大小的范围进行卷积,获得这个范围当前过滤器捕捉特征的强度。也就是绿光、红光、蓝光的强度。
二、通道与特征
这样看来,图片中的通道就是某种意义上的特征图。一个通道是对某个特征的检测,
通道中某一处数值的强弱就是对当前特征强弱的反应
。
如一个蓝色通道中,如果是256级的话,那么一个像素如果是255的话那么就表示蓝色度很大。从这个角度来看灰度图片的话,就会发现其实灰度图片就是一个白色过滤器生成的特征图。
于是卷积网络中的特征图,也能够很直接地理解为通道了。
之后通过对一定范围的特征图进行卷积,可以将多个特征组合出来的模式抽取成一个特征,获得下一个特征图。之后再继续,对特征图进行卷积,特征之间继续组合,获得更复杂的特征图。
又因为池化层的存在,会不断提取一定范围内最强烈的特征,并且缩小张量的大小,使得大范围内的特征组合也能够捕捉到。
对单个特征图进行视觉化的话,会发现它是在对什么特征进行捕捉。最近一个很有意思的
Blog文章
就展示了这方面的结果,很有意思。
通过特征角度来看卷积网络的话,那么1×1卷积也就很好理解了。即使1×1卷积前后的张量大小完全不变,比如说16x16x64 -> 16x16x64这样的卷积,看上去好像是没有变化。但实际上,可能通过特征之间的互动,已经由之前的64个特征图组成了新的64个特征图。
有时候我理解一个这样的1×1卷积操作,就会把它当成是一次
对之前特征的整理
。
三、通道的终点
这样子不停卷积下去,直到最后一层,剩下一个一维向量时,每个标量代表着一个通道,捕捉到的特征又是什么呢。
如果是物体分类任务的话,就正是我们需要输出判别的一个个物体类别。
比如说第一个数是代表猫特征,第二个数代表狗特征,第三个代表人… 这个时候去从里面选数值最大那个当做分类的种类就好了。
到这里可能仔细的人会注意,最后几层不是没卷积操作吗,而是全连接网络。
一个概念上需要澄清的是,虽然说1×1卷积,而且也从融合特征角度,给了它特殊的理解。但如果再仔细看看的话,就会发现实际上
1×1卷积就是全连接网络
。所以我们可以把最后的1×1网络当成某种程度上的1×1卷积。
上面的网络最后几层,将张量展平然后输入全连接网络。因为剩下的特征图中都保留了很重要的信息,为了利用所有的信息,并且让它们获得足够的交互,所以直接输入全连接网络,获得最后的特征向量。
这个特征向量能够用来干什么呢。一个很有趣的应用案例是Siamese网络。输入一张脸,输出一个128的特征向量,于是这个向量就类似于ID号码。
之后再输入一张脸,得到一个特征向量,这时候只需要比较一下获得的两个特征向量就能够知道这两张脸是不是同一个人。
如果将最后的特征向量视觉化,或许我们还能发现,向量中每个标量所代表的特征,比如说眼睛之间的间距,肤色…
用本文的通道来说的话,最后获得了一个128个通道向量表示。
四、通道的参数
首先
,对于卷积核(或称为卷积过滤器)的大小,一个卷积核的通道数与它进行卷积的输入必须是相同。
例如:
32*32*3
的图像的卷积核通道数必须是
3
,如
5*5*3
。
在这个卷积核中卷积层数的参数3与输入的通道数3是相同的(对于三个通道的输入而言)。
其次
,对于卷积运算,一个卷积核经过计算得到的一定是一个映射,一个数字。
接着
,对于卷积核的深度,就是有几个卷积核。下图中就是有五个卷积核,即卷积核的深度是5。
例子:
假设现有一个为
6×6×3
的图片样本,使用
3×3×3
的卷积核(filter)进行卷积操作。此时输入图片的
channels
为 3
而
卷积核中
的
in_channels
与 需要进行卷积操作的数据的
channels
一致(这里就是图片样本,为3)。
然后进行卷积,卷积核中的27个数字与分别与样本对应相乘后,再进行求和,得到第一个结果。依次进行。由于只有一个卷积核(卷积核数为1),所以最终得到的结果为
4×4×1
,
out_channels
为 1
在实际应用中,都会使用多个卷积核。这里如果再加一个卷积核(卷积核数为2),就会得到
4×4×2
的结果