在书中,冈萨雷斯通过二维卷积的可交换性说明了可分离卷积核的使用方法,
可是,有几个关键的概念在书中含糊不清。在此补充,也作为自己查了那么久资料的记录。
首先,上图的卷积是什么类型的卷积?在书的前几页中,冈萨雷斯介绍了两种卷积,一种是普通卷积,书中的名字直接就是convolution,计算方法是使得卷积核的中心接触到图像中的每一个点,图像的补零个数为:(m-1)/2和(n-1)/2。另外一种卷积方法是让卷积核中的每一个系数都接触到图像,图像的补零个数为(m-1)和(n-1)。随后冈萨雷斯直接给出了卷积的性质,如下图。
可是,在书中冈萨雷斯并没有说明满足上图性质的卷积是什么类型的卷积。对此非常令人困惑。在此,本文将给出答案。
第一、上述的两种卷积的学名分别叫做same卷积和full卷积,前者补零个数为后者的一半。
第二、Separable Filter Kernels指的是原始的Kernel可以被写成多个Kernel的full卷积运算结果,而不是same卷积。
第三、满足交换律结合律分配律的是same卷积,full卷积并不满足交换律但是满足结合律(不知道满不满足分配律),但是一维水平方向和一维垂直方向的向量的full卷积满足交换律。
第四、
在上图的(3-52)公式,卷积核分离的时候采用的是full卷积,而和图像作运算时可以采用full卷积或者same卷积,二者皆可。即w=w1w2(full卷积),wf=(w1*f)*w2(两种卷积皆可)。
下面给出一个例子。
设有如下图的图像和卷积核。
首先计算他们二者之间的full卷积,
得到
由于卷积核等于某两个一维向量的full卷积,即
注意,这里的一维full卷积是可交换的(虽然它并不满足交换律)
①对于计算Kernel和I的full卷积(注意顺序不能颠倒,毕竟full卷积不满足交换律,但是满足结合律,下图的星号都是full卷积):
代码为:
结果依旧为:
以上就是针对full卷积的可分离卷积核的计算方法。
其实same卷积以及pytorch、tensorflow中常用的valid卷积的结果都是full卷积的子集,因此其实会使用full卷积后,其他的卷积也相当于都会用了。
②same卷积:
先计算原始的结果:
得到:
然后分步计算
注意:上图中的两个kernel如果进行full卷积是可以得到原始的卷积核的,但是两个子卷积核和原始图像进行卷积的时候采用的都是same卷积的方式。结果为
可见,结果一样。
其实博主对冈萨雷斯的感到疑惑,因为卷积的交换律我觉得是不满足才对的。比方说,对于same卷积,交换后补零的对象都不同,这样的结果不可能相同,但是我相信他这种大牛是不可能犯这种低级错误的,这里就先不深究了。