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 破坏平移不变性

相关推荐
土豆12503 分钟前
LangGraph TypeScript 版入门与实践
人工智能·llm
土豆125012 分钟前
OpenSpec:让 AI 编码助手从"乱猜"到"照单执行"
人工智能·llm
Thomas.Sir12 分钟前
第二章:LlamaIndex 的基本概念
人工智能·python·ai·llama·llamaindex
m0_6948455735 分钟前
Dify部署教程:从AI原型到生产系统的一站式方案
服务器·人工智能·python·数据分析·开源
LS_learner36 分钟前
VS Code 终端默认配置从 PowerShell 改为 CMD
人工智能
小毅&Nora2 小时前
【人工智能】【大模型】大模型“全家桶”到“精兵简政”:企业AI落地的理性进化之路
人工智能·大模型·平安科技
KaneLogger2 小时前
如何把AI方面的先发优势转化为结构优势
人工智能·程序员·架构
冬奇Lab2 小时前
一天一个开源项目(第67篇):OpenClaw-Admin - AI Agent 网关的可视化管理驾驶舱
人工智能·开源·资讯
飞哥数智坊2 小时前
【大纲】TRAE AI 编程入门第四讲——打破编程界限的智能体
人工智能·ai编程·trae
冬奇Lab2 小时前
5种来自谷歌的Agent Skill设计模式:减少Token浪费,精准触发正确行为
人工智能·agent