在卷积层中,有时您需要在应用卷积核(过滤器)之前在原始图像的边缘填充一些(通常为 1 或 2 个像素)0。
但是,0 有不同的含义。
在 0 - 255 灰度图像的情况下,0 表示黑色。
在标准化图像的情况下(减去平均值然后除以标准),0 是平均值。
我应该总是填充 0,还是应该有时填充平均值?
如果在某些情况下我应该填充平均值,这些情况是什么?
编辑:
什么时候应该使用反射填充?
此外,反射填充总是比零填充更好吗?
在卷积层中,有时您需要在应用卷积核(过滤器)之前在原始图像的边缘填充一些(通常为 1 或 2 个像素)0。
但是,0 有不同的含义。
在 0 - 255 灰度图像的情况下,0 表示黑色。
在标准化图像的情况下(减去平均值然后除以标准),0 是平均值。
我应该总是填充 0,还是应该有时填充平均值?
如果在某些情况下我应该填充平均值,这些情况是什么?
编辑:
什么时候应该使用反射填充?
此外,反射填充总是比零填充更好吗?
均值、零、重复(即常量外推)、反射和对称填充都是有效且广泛使用的卷积层填充方法。据我所知,没有系统研究表明在所有情况下一个都比另一个好。换句话说,一个人并不总是比其他人更好。(理想情况下,我认为可以将填充类型更改为超参数。)我直观地认为反射和对称填充对局部图像结构和全局统计的影响最小。(显然,边界上零填充的零并不是图像的真正一部分,网络必须学习这一点)。然而,这些与“现实主义”有不同的问题:例如,如果填充足够大,反射填充将在边界上“复制”椅子腿,
总的来说,我认为这并不重要,但这取决于任务和设置。例如,在生成建模和图像到图像的转换中,反射填充避免了边界上的一些伪影,如CycleGAN 论文中所述。
最近一篇有趣的论文是 Liu 等人的基于 Partial Convolution based Padding的论文,他们通过本质上让卷积完全忽略边界来回避这个问题。这是一个部分卷积,它忽略了过滤器到达图像外部的部分。正如人们所期望的那样,总体改进似乎相对微不足道,但它似乎确实对边界有很大帮助。另请参阅在分割上下文中做类似事情的早期工作和将部分卷积应用于修复的工作。这种避免填充的方法看似原则性良好。
TL;DR:测试不同的填充,看看哪个最适合你的架构/任务(也可以查看文献)。如果工作量太大,我默认反映填充。如果您想花哨或担心边界效应,请使用部分卷积。