Making Convolutional Networks Shift-Invariant Again

论文开头直接指出,现在的卷积神经网络,没有平移不变性,输入的微小偏移或平移都可能导致输出发生剧烈变化。作者指出,神经网络里面的下采样,例如max-pooling, strided-convolution 和 average-pooling 没有考虑采样定理,下采样后,导致高频信号混叠到低频信号中,最直观的影响就是,在输入的RGB图片中,及其微小的偏移,导致预测结果差别很大。

所以作者的提出,在max-pooling之前,先经过一个低通滤波器。直接分析作者的官方代码。

1、antialised-cnns 中的带blurePool 核的alexnet结构

2、BlurePool 核心步骤

  1. 一维卷积核
python 复制代码
filt_size = 4
if(self.filt_size==1):
   a = np.array([1.,])
elif(self.filt_size==2):
    a = np.array([1., 1.])
elif(self.filt_size==3):
    a = np.array([1., 2., 1.])
elif(self.filt_size==4):    
    a = np.array([1., 3., 3., 1.])
elif(self.filt_size==5):    
    a = np.array([1., 4., 6., 4., 1.])
elif(self.filt_size==6):    
    a = np.array([1., 5., 10., 10., 5., 1.])
elif(self.filt_size==7):    
    a = np.array([1., 6., 15., 20., 15., 6., 1.])

这个是帕斯卡三角形,一个规则就是每个数=上一行"左上+右上"两个数之和,同时也是二项式展开系数(a+b)n(a+b)^n(a+b)n,为什么么要用这个,是因为,1、这个具有对称性,不会产生相位偏移;2、中间大,两边小,天然平滑;3、趋近高斯,是低通滤波器

  1. 二维卷积核
python 复制代码
filt = torch.Tensor(a[:,None]*a[None,:])

a[None, :] 后 ,
[1
 3
 3
 1]
 变成:
 [[1]
 [3]
 [3]
 [1]]
 
a[None, :] 后,
[1 3 3 1]  变成 [[1 3 3 1]]

(4,1) * (1,4) 根据广播机制,filt(i,j)=a(i)⋅a(j) 得到二维卷积核:
1 3 3 1
3 9 9 3
3 9 9 3
1 3 3 1

这个模糊核中心大,四周小,完全对称
  1. 应用上面的二维卷积核
python 复制代码
self.padnn.ReflectionPad2d
F.conv2d(self.pad(inp), self.filt, stride=self.stride, groups=inp.shape[1])

stride = 2

上面是一个正常的卷积,stride=2,实现了下采样,当时在下采样的同时,使用二维的模糊核作为一个低通滤波器,进行滤波。

3、论文核心思路理解

之前不知道在哪里看过说,不管论文的理论多么复杂,最初的想法一定是直观的,要想理解论文,需要重复的理解作者当初面对的直观的问题,即
maxpool 不满足奈奎斯特定理,导致高频信号混叠到低频信号

那就,先去直面理解maxpool的问题。

之前从来没有怀疑过maxpool的有什么问题,还觉得很好用,这次先找一些直观的例子来证明,maxpool有问题。

1、maxpool后高频折叠到低频的例子

原始图片高密度的黑白黑白交替,因此是一个非常高频的图片,使用maxpool之后,所有的高频信号都折叠到了低频,导致maxpool只有的图片,骤然变成一个非常低频的图片,完全丧失了高频信息(细节)

下面我们来看一个,maxpool之后,满足奈奎斯特定理的。

2、maxpool满足奈奎斯特定理

maxpool时,是每次采样要跳过stride个像素,当stride=2时,我们希望,这次采样落到A黑条上,下次采样要落到B黑条上,这样高频保留了,所以黑条纹的宽度>= 2xstride,也可以这样理解,黑条越宽,表示越低频,黑条越窄,表示越高频,要想maxpoo满足奈奎斯特定理,就是不能有太多高频。

3、maxpool 破坏平移不变性

相关推荐
码农小旋风15 小时前
上下文工程
人工智能·chatgpt·claude
火山引擎开发者社区15 小时前
开启报名 | 首届火山「AI安全攻防」挑战赛邀你参赛
人工智能
DXM052115 小时前
第8期| 传统机器学习遥感解译:SVM & 随机森林分类全流程实操
人工智能·python·随机森林·机器学习·支持向量机·arcgis·自然语言处理
程序员差不多先生15 小时前
Copilot 取消年费改按量计费:AI Coding 工具进入了什么新阶段?
人工智能·copilot·github copilot
猿粪已尽15 小时前
cc switch+codex+米醋 实现AI办公
人工智能·codex·cc switch·米醋·micu
装不满的克莱因瓶15 小时前
深入PyTorch模型的训练与可视化 —— 掌握迁移学习等模型训练效果提升的办法
人工智能·pytorch·python·深度学习·神经网络·ai·迁移学习
段一凡-华北理工大学15 小时前
工业领域的Hadoop架构学习~系列文章20:故障诊断与根因分析 - 从表象到本质的智能推理
大数据·人工智能·hadoop·学习·架构·高炉炼铁·工业智能体
凌云拓界15 小时前
状态机与思考循环 ——CogitoAgent开发实战(一)
javascript·人工智能·架构·node.js·设计规范
无心水15 小时前
【OpenClaw:赚钱】案例19、内容产量5倍、广告收入翻4倍:播客转多平台内容矩阵全自动化实战(OpenAI Whisper + Claude)
java·人工智能·python·ai编程·openclaw·养龙虾·java.time
寻道模式15 小时前
【时间之外】AI不懂Mac吗?
人工智能·macos