深度学习笔记(22) Padding
1. 卷积的缺陷
为了构建深度神经网络,需要学会使用的一个基本的卷积操作就是padding
如果用一个3×3的过滤器卷积一个6×6的图像
最后会得到一个4×4的输出,也就是一个4×4矩阵
那是因为3×3过滤器在6×6矩阵中,只可能有4×4种可能的位置
这背后的数学解释是,如果有一个
n × n n×n
n×n 的图像,用
f × f f×f
f×f 的过滤器做卷积
那么输出的维度就是:
( n − f + 1 ) × ( n − f + 1 ) (n-f+1)×(n-f+1)
(n−f+1)×(n−f+1)
在这个例子里是 6-3+1=4,因此得到了一个4×4的输出
上述的Padding有两个缺点:
- 每次做卷积操作,图像就会缩小
从6×6缩小到4×4,可能做了几次之后,就会变得很小了,可能1×1的大小 - 图像边缘的大部分信息都丢失
那些在角落或者边缘区域的像素点在输出中采用较少
2. Padding
为了解决这些问题,可以在卷积操作之前填充这幅图像
在这个案例中,可以沿着图像边缘再填充一层像素
那么6×6的图像就被填充成了一个8×8的图像
如果用3×3的图像对这个8×8的图像卷积,得到的输出是6×6的图像
就得到了一个尺寸和原始图像相同的图像
习惯上,可以用0去填充,如果p是填充的数量,在这个案例中,p=1
因为在周围都填充了一个像素点
填充的输出变成:
( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) (n+2p-f+1)×(n+2p-f+1)
(n+2p−f+1)×(n+2p−f+1)
所以就变成了(6+2×1-3+1)×(6+2×1-3+1)=6×6,和输入的图像一样大
这样一来,丢失信息或者更准确来说角落或图像边缘的信息发挥的作用较小的这一缺点也被削弱了
3. Valid卷积
Valid卷积意味着不填充
一个n×n的图像,用一个
f × f f×f
f×f 的过滤器卷积
它将会给出一个
( n − f + 1 ) × ( n − f + 1 ) (n-f+1)×(n-f+1)
(n−f+1)×(n−f+1) 维的输出
这类似于在前面展示的例子,有一个6×6的图像
通过一个3×3的过滤器
得到一个4×4的输出
4. Same卷积
Same卷积意味填充后,输出大小和输入大小是一样的
根据这个公式
n − f + 1 n-f+1
n−f+1,当填充
p p
p 个像素点,
n n
n 就变成了
n + 2 p n+2p
n+2p
最后变为
n + 2 p − f + 1 n+2p-f+1
n+2p−f+1
一个
n × n n×n
n×n 的图像,用
p p
p 个像素填充边缘
输出的大小就是:
( n + 2 p − f + 1 ) × ( n + 2 p −
f + 1 ) (n+2p-f+1)×(n+2p-f+1)
(n+2p−f+1)×(n+2p−f+1)
如果想让输出和输入大小相等的话
使得
n + 2 p − f + 1 = n n+2p-f+1=n
n+2p−f+1=n
那么需要填充
p = ( f − 1 ) / 2 p=(f-1)/2
p=(f−1)/2
所以当
f f
f 是一个奇数的时候,只要选择相应的填充尺寸
就能确保得到和输入相同尺寸的输出
这也是前面的例子,当过滤器是3×3时,使得输出尺寸等于输入尺寸
所需要的填充
( 3 − 1 ) / 2 (3-1)/2
(3−1)/2,也就是1个像素
另一个例子,当过滤器是5×5,如果
f = 5 f=5
f=5,代入式子
就会发现需要2层填充使得输出和输入一样大
5. 奇数的过滤器
很少看到一个偶数的过滤器在计算机视觉里使用,可能有两个原因:
- 如果
f f
f 是一个偶数,那么只能使用一些不对称填充
- 当有一个奇数维过滤器,比如 3×3,就有一个中心点,会更方便指出过滤器的位置
-
也许这些都不是为什么
f f
f 通常是奇数的充分原因
但如果看了卷积的文献,经常会看到3×3的过滤器
也可能会看到一些5×5,7×7的过滤器,也有1×1的过滤器习惯上,推荐只使用奇数的过滤器
参考:
相关推荐:
深度学习笔记(21) 边缘检测
深度学习笔记(20) 端到端学习
深度学习笔记(19) 多任务学习
深度学习笔记(18) 迁移学习
深度学习笔记(17) 误差分析(二)
谢谢!