请问怎样用CNN对不同位置,角度,大小的 圆,三角形与矩形进行检测与分类( 三 )



随着神经网络越来越深入,概念级别也会越来越高。比如,第三层或第四层可能会通过组合相关的输入通道,激活由花瓣包围的黄色圆形。这样,我们就能很容易地写一个简单的分类器,找出图像中的太阳。当然,在现实情况中,分类器不会像我前面说的这样如此清晰地表示出概念,因为它们是自行学习将问题拆解,而不是以人类能理解的方式运行,但基本的原理就是这样的。

不过,这并没有解释神经网络是如何处理位置差异的。为了理解这一点,你需要知道CNN用于图像分类的另一项常用设计特点:随着网络越来越深,通道的数量会逐渐增加,但图像的尺寸却会缩小。这里的缩小是通过池化层来完成的,传统上都是应用平均池化,但现在更常见的是应用最大池化。这两种方法的效果都差不多。
请问怎样用CNN对不同位置,角度,大小的 圆,三角形与矩形进行检测与分类

如上图所示,我们选择一张图像,将其压缩一半。对于每个输出像素,我们以 2 x 2 的输入块为单位,选择最大值,因此称为最大池化。而在平均池化中,我们取这四个值的平均值。

这种池化过程会一直重复,将值不断在网络中传递下去。这意味着,到了最后时图像大小可能已经从 300 x 300 缩小至 13 x 13。这种压缩也意味着位置变化的数量同样可能压缩了很多。在我们上面的例子中,每个太阳图案只可能在剩下的 13 个水平像素和 13 个垂直像素区域中出现。所有更细微的位置差异都被隐藏了,因为由于最大池化,它们的激活都被融合在了一起。这就让神经网络的最后一层能更容易地处理位置差异问题,因为它只需处理比原始图像简单得多的表示。

以上就是我对图像分类模型处理位置变动的解释,但是其它同类问题呢,比如音频中的偏差?最近出现的“扩张卷积”(dilated convolution)和“带孔卷积”(atrous convolution)方法深深吸引了我,提供了除池化外的其它方法。和最大池化一样,这两种方法也会生成一个更小的输出图像,但它们是在卷积自身的环境中完成的。它们没有采集相邻像素,而是用步幅来分割样本,步幅可能会很大。这样做能让它们非常快地将非局部信息整合为易于管理的形式。DeepMind 推出的音频生成模型的部分奥秘,就是让模型使用卷积神经网络而非循环神经网络来处理时序问题。

我对此感到很兴奋,因为 RNN 的速度是个痛点。如果你需要处理批次大小为 1 的数据(这在实时应用是个典型问题),那么大部分计算都是矩阵时间向量的相乘,复杂度相当于一个全连接层。由于每个权重只使用一次,所以这类计算往往受限于电脑的存储能力而非计算问题,但卷积却与此相反。故而我真诚希望这种方法能应用到更多领域。

以上就是我对 CNN 处理物体位置差异的理解,感谢能看到最后,希望我的解释能对你有用,也期待更多更好的想法,帮我们理解卷积神经网络。

可能你还感兴趣:
如何通俗易懂地解释卷积?参考资料:https://petewarden.com/2017/10/29/how-do-cnns-deal-with-position-differences/ 【请问怎样用CNN对不同位置,角度,大小的 圆,三角形与矩形进行检测与分类】 http://weixin.qq.com/r/80QiOi3EDnBxrWlZ9xHh (二维码自动识别)


■网友
卷积核的这种类似滑动窗口的工作方式使得图像中所有相似的特征(比如低级语义中的直线特征或者曲线特征)都能够被探测到,这样就解决了不同位置的问题,无论你的三角形在哪,卷积核肯定是可以通过这一片区域的,从而就能够输出响应信息。至于大小,个人觉得只要你的三角形或者其他图形的面积不要小于卷积核感受野的大小就可以了,如果图像中有很大的三角形或者其他的图形,可以通过增加网络的深度来增加高层卷积核的有效感受野。如果你只是单纯的检测像三角形矩形这种并不复杂的目标,网络的深度可以适当的小一点。至于你说的角度,不知道你是指的哪方面的角度。


推荐阅读