Open rentainhe opened 3 years ago
参考文章:
假设我们的神经网络只由一层步长为2的mean pooling组成(为了简单) Shift-and-Stitch的第一步进行的是shift操作,原文中叫shift-and-pad 对于输入的图像,进行四组移位操作,灰色表示padding的部分,可以得到四个一样大小的新的输入图像,然后我们再对这四个图像进行mean pooling操作 对四个图像进行mean pooling操作后,我们得到了四个输出,最后将这四个输出给stitch(缝合)起来 就得到了一个非常dense的结果
为什么会得到这样的结果? 首先,图3中每个像素点的感受野如图4所示: 可以看出和图三的一个对应关系就是,左上是红色,右上是黄色,左下是绿色,右下是绿色 这个结果和步长为1的mean pooling一样
import torch import torch.nn as nn x = torch.range(1, 25).reshape(5, 5).unsqueeze(0) pooling = nn.AvgPool2d(2, 1, padding=1) print(pooling(x)) >>> tensor([[[ 0.2500, 0.7500, 1.2500, 1.7500, 2.2500, 1.2500], [ 1.7500, 4.0000, 5.0000, 6.0000, 7.0000, 3.7500], [ 4.2500, 9.0000, 10.0000, 11.0000, 12.0000, 6.2500], [ 6.7500, 14.0000, 15.0000, 16.0000, 17.0000, 8.7500], [ 9.2500, 19.0000, 20.0000, 21.0000, 22.0000, 11.2500], [ 5.2500, 10.7500, 11.2500, 11.7500, 12.2500, 6.2500]]])
确实一样,这证明了shift-and-stitch具有保证平移不变性的能力
如何操作才能保证结果的一致性? Shift-and-Stitch其实相当于空洞卷积 如何证明shift-and-stitch操作等价于空洞卷积,现在假设操作为一个pooling层和一个卷积层
一句总结:
参考文章:
1. Background
Shift and Stitch
假设我们的神经网络只由一层步长为2的mean pooling组成(为了简单) Shift-and-Stitch的第一步进行的是shift操作,原文中叫shift-and-pad 对于输入的图像,进行四组移位操作,灰色表示padding的部分,可以得到四个一样大小的新的输入图像,然后我们再对这四个图像进行mean pooling操作 对四个图像进行mean pooling操作后,我们得到了四个输出,最后将这四个输出给stitch(缝合)起来 就得到了一个非常dense的结果
为什么会得到这样的结果? 首先,图3中每个像素点的感受野如图4所示: 可以看出和图三的一个对应关系就是,左上是红色,右上是黄色,左下是绿色,右下是绿色 这个结果和步长为1的mean pooling一样
确实一样,这证明了shift-and-stitch具有保证平移不变性的能力
如何操作才能保证结果的一致性? Shift-and-Stitch其实相当于空洞卷积 如何证明shift-and-stitch操作等价于空洞卷积,现在假设操作为一个pooling层和一个卷积层