**菜鸟学深度学习日记****第1天:初识深度学习**今天是我开始学习深度学习的第一天,感觉既兴奋又有些迷茫。在了解了深度学习的基本概念后,我意识到它其实是一种模拟人脑神经网络进行数据处理的算法。虽然听起来很复杂,但我相信只要一步步来,一定能掌握。**第2

摘要:本文以作者阅读《Dive into Deep Learning》为线索,融合串联了自身理解感悟、原始论文、优秀文章等。如有无意侵权,请联系本人删除。 填充 & 步幅 & 下采样 由上一节,可以
本文以作者阅读《Dive into Deep Learning》为线索,融合串联了自身理解感悟、原始论文、优秀文章等。如有无意侵权,请联系本人删除。 填充 & 步幅 & 下采样 由上一节,可以得知卷积的输出大小和输入形状、卷积核形状有关: 输出形状为:\((n_h-k_h+1) \times (n_w-k_w+1)\) 很显然,如果这样连续进行多层卷积处理,最终的输出大小会小于输入大小。 对这种情景,通常有两种反应: 这会丢失了原始图像边界的不少信息 用 填充 解决 正好我们想要降低图像分辨率 用 步幅 解决 填充 在卷积操作中,边缘像素参与计算的次数少于中心像素,导致边界信息在深层网络中逐渐被稀释。 一种简单解决方法为:在输入图像的边界新开多行/列并填充元素(常为0)。 如果希望输入输入和输出具有相同的高度宽度,可以在顶部填充 \(\lceil \frac{k_h-1}{2}\rceil\),在底部填充 \(\lfloor \frac{k_h-1}{2}\rfloor\)。对首尾列的填充同理。这就是 Same Conv. (如果不填充就是 Valid Conv. ,这在降低特征图的空间维度上很有用),通常用于卷积层中步幅为\(1\)的操作中。 一般认为,卷积核的高度、宽度均为奇数: 偶数核的对称填充可能导致输入与输出大小无法对齐 奇数维度的卷积会有一个中心点,而在CV中有一个中心像素点会更方便,因为可以指出卷积位置 奇数方阵卷积核可以计算半径,更加方便表达与计算 拓展一下,我们常用的标准零填充有无缺点? 有的。根据一篇Facebook AI发表的论文(arxiv.org/pdf/2010.02178),当输入尺寸不满足 特定条件 (详见下文) 时,填充只在特征图的单侧被有效应用,另一侧失活浪费,因此卷积核在不同空间位置收到的零值信息不平衡,从而模型在训练中,卷积核的某些位置(如左侧、上侧)会更频繁地与填充的零值相乘,导致其学习到的权重出现系统性偏斜。 而这种不对称的权重会在前向传播中,在特征图上产生不依赖于图像内容的、固定的线条或网格状激活模式,也就是一些在平均图中的可见的线条。这些线条与任何场景特征都不相似,并且始终存在于各个特征图中。 因此,这会在特征图的特定空间位置,模型对某些类别的目标(尤其是小目标)的响应被地抑制,导致漏检(此文以交通灯检测器为例);同时会削弱平移不变性。 这里的 特定条件 是什么呢? 因为步长是跳跃式的,为了保证每边的填充都能被均匀应用,应该满足:(以高度为例) \[h_{前一层}=stride_{当前层} \cdot (h_{当前层}-1)+k_{当前层}^h - 2\cdot p_{当前层}^h \] \(p\) 是填充量。 如果这个条件不满足,我们可以认为:卷积核可以覆盖整个填充后的特征图,但覆盖的方式是偏心的。 为了能够覆盖所有有效值,靠右和靠下(如果从左上开始)的卷积核,很可能卷积核只有局部区域与有效特征值相乘,而右侧、下侧部分超出了有效输入区域,只能与零填充相乘;或者是一侧的填充被卷积核消耗,而另一侧的填充则没有。这种不均匀的交互会在训练中诱导卷积核权重变得空间不对称,进而产生特征图伪影并可能形成检测盲区。 有一种缓解这一现象的方法是不用简单的 \(0\) 来进行填充,而是使用对称填充/镜像填充(Mirror Padding ),就是在输入图像的外部,通过复制对称边界像素来填充新的像素值,这能确保填充元素与原始图像的边缘像素在视觉上保持一致。 也可以使用反射填充(Reflect Padding ),就是将输入图像的边缘像素作为对称轴,然后将这些像素向外反射,形成新的填充像素。因此会有4个对称轴,可能比对称填充更加光滑。这与镜像填充的区别:填充的部分其实是从边缘的内部一行开始。 步幅 就是卷积核在输入上每次移动的像素数。 有时候我们希望主动降低特征图的分辨率,以减少模型复杂度,并且想要拓展后续层的感受野,一种直接的方法是增大步幅(Stride )。当步幅大于 \(1\) 时,卷积核跳过一些像素,从而减少输出的空间尺寸。
阅读全文