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

相关推荐
Awu122721 分钟前
⚡精通 Claude 第 10 课:CLI 完全参考
人工智能·aigc·claude
youmiyoumiyoumi22 分钟前
# 微信机器人客服系统搭建:从人工到智能的客服升级
人工智能
Mr数据杨23 分钟前
【CanMV K210】通信扩展 WiFi Socket TCP Client 通信
人工智能·硬件开发·canmv k210
dingzd9524 分钟前
Reddit验证资料测试之后跨境品牌如何提升社区运营可信度
大数据·人工智能·矩阵·新媒体运营·内容营销·跨境
JavaAgent架构师34 分钟前
前端AI工程化(五):AI对话状态管理
前端·人工智能
aneasystone本尊38 分钟前
给小龙虾上把锁:Sandbox 沙箱机制
人工智能
Σίσυφος19001 小时前
数据标准化(拟合的时候使用非常重要)
人工智能·算法
程序员码歌1 小时前
别再让 AI 自由发挥了:OpenSpec 才是团队协作不跑偏的关键
android·前端·人工智能
时光Autistic1 小时前
【安装教程】AI标注工具X-AnyLabeling安装配置
人工智能·python
knight_9___1 小时前
大模型project面试7
人工智能·python·算法·面试·大模型·agent