主要讨论计算机视觉/神经网络中的 卷积运算(Convolutuion) 。
……在那之前,先来看看 相关运算(Correlation)
给定 Image 和 Filter,其中 Filter 如下:
[egin{bmatrix}A&B&C\D&E&F\G&H&Iend{bmatrix}
]
现在对 Image 中一个 3×3 大小的小方块
[egin{bmatrix}a&b&c\d&e&f\g&h&iend{bmatrix}
]
也就是对 (e(i,j)) 进行 Cross-correlation
结果:
[G[i,j]=Aa+Bb+Cc+Dd+cdots+Hh+Ii
]
那么卷积运算是什么呢?
同样是上面的情况,进行 Convolution
结果:
[C[i,j]=Ai+Bh+Cg+Fd+Ee+Ia+Hb+Gc+Df
]
假如 Filter 是
[egin{bmatrix}A&B\C&Dend{bmatrix}
]
结果:
[C[i,j]=egin{bmatrix}Da+Cb+Bd+Ae&cdots\Dd+Ce+Bg+Ah&cdotsend{bmatrix}
]
放到 CNN 中,这里“步长”为1
如果 Image 是 4×4 的,那么步长若仍为 1 则会得到一个 3×3 的结果
如果步长改为 2 则会得到一个 2×2 的结果
CNN 就是在提取图像的每个局部(感受野)范围和卷积核的互相关函数。
很明显,卷积能提取图像的特征。
这需要我们合理地设置卷积核(也就是 Filter),这其实是在改变做卷积运算时的加权
合理地设置加权,可以实现平滑滤波和边缘提取以及各种各样其他的操作
比如说平滑
[frac{1}{9}egin{bmatrix}1&1&1\1&1&1\1&1&1end{bmatrix}
]
边缘提取
[egin{bmatrix}0&-1&0\-1&-4&-1\0&-1&0end{bmatrix}
]
作用都很明显能够看出来,其中边缘提取的例子是拉普拉斯算子
当然也容易自己yy几个
[egin{bmatrix}-1&-1&-1\0&0&0\1&1&1end{bmatrix}
]
[egin{bmatrix}-1&-2&-1\0&0&0\1&2&1end{bmatrix}
]
上面两个都是计算水平梯度,检测水平边缘的
转置一下就能得到搞垂直的了。
其中第二个(Sobel算子)比第一个(Prewitt算子)更加平滑(抑制噪声
另外,常见的高斯核在 3×3 的时候是这样的
[frac{1}{16}egin{bmatrix}1&2&1\2&4&2\1&2&1end{bmatrix}
]
嗯,很 Gauss
更复杂的特征就要用多层卷积来提取。
这个过程中的 Filter 显然不能简单地人工构造,而需要借助 supervised learning 完成构造
……可以发现,既然 Filter 不需要人工构造,实际使用时就不必区分卷积和相关。
所以一般来说实现的时候写个相关就好了,毕竟好写。