#|深度学习之 11 空洞卷积的实现

本文是接着上一篇深度学习之 11 卷积神经网络实现_水w的博客-CSDN博客
目录
空洞卷积
1 优点与适用性
2 存在的问题
?空洞卷积存在网格效应
?远距离的点之间的信息可能不相关
?解决方法
【#|深度学习之 11 空洞卷积的实现】?满足HDC条件的空洞卷积叠加演示:dilation rate [1, 2, 5] with 3 x 3 kernel
3 使用PyTorch实现空洞卷积
?空洞卷积的实现 实现dilation为1,2,5的三层空洞卷积
?空洞卷积实验结果

空洞卷积

  • 灰色部分为卷积核权重,与左侧相同;白色部分为空,值为0
  • dilation rate:空洞率,空洞卷积权 重值的 间隔 为dilation rate - 1
  • 当空洞率为1时,退化为普通卷积
  • 空洞后的卷积核的空间(感受野)大
#|深度学习之 11 空洞卷积的实现
文章图片

#|深度学习之 11 空洞卷积的实现
文章图片

1 优点与适用性
?在不增加参数的情况下 增大感受野, 适用于图片size较大,或需要快速感受全局信息的情况?通过设置不同的dilation rate捕获 多尺度 上下文信息,适用于需要捕获图片的多层次的情况,如语义分割等。#|深度学习之 11 空洞卷积的实现
文章图片

卷积核为大小2,四层卷积,普通卷积可以覆盖5个像素点, 而使用空洞卷积可以覆盖16个像素点
#|深度学习之 11 空洞卷积的实现
文章图片

但是因为空洞卷积的特殊性,我们其实并不能够项普通卷积一样拿来就用。
2 存在的问题
?空洞卷积存在网格效应 ?远距离的点之间的信息可能不相关
?空洞卷积存在网格效应

三层空洞卷积 dilation=2只获取到了一些点的信息, 并没有获取到全部的信息。实际上就算我们不断的继续堆叠最顶点的这个点,只用到了部分结点,我们还是不能够获取到全部底层的信息。
右侧的序列上, 如果我们不进行填充,那么在3层之后就已经到头了,没有办法再进行卷积了。
#|深度学习之 11 空洞卷积的实现
文章图片

?远距离的点之间的信息可能不相关
空洞卷积虽然是被设计用来捕获更 远距离 的信息的,但是这样一味的使用大的dalition就会 忽略掉近距离的信息 ,如何能 同时处理远距离信息和临近区域的信息 是设计好空洞卷积的关键之一。
点B明显与近距离的点A更相关,与左上角的点C 关系不大,如果dalition过大则容易忽略点A的信息而降低模型效果。
#|深度学习之 11 空洞卷积的实现
文章图片
?解决方法
#|深度学习之 11 空洞卷积的实现
文章图片

?满足HDC条件的空洞卷积叠加演示:dilation rate [1, 2, 5] with 3 x 3 kernel
#|深度学习之 11 空洞卷积的实现
文章图片

#|深度学习之 11 空洞卷积的实现
文章图片

#|深度学习之 11 空洞卷积的实现
文章图片

3 使用PyTorch实现空洞卷积#|深度学习之 11 空洞卷积的实现
文章图片

?空洞卷积的实现 实现dilation为1,2,5的三层空洞卷积
直接套用之前实现的普通卷积的代码,定义了这3层卷积,对每一层卷积都指定它的空洞率分别为1,2和5,然后在这个前向传播的过程中也是和之前的过程是一致的,这里不过多叙述。
#|深度学习之 11 空洞卷积的实现
文章图片

?空洞卷积实验结果
  • 模型在训练集上可以达到一个较低的loss和较高的准确率;
  • 在大约40轮后测试集的Loss就处于波动状态甚至有些上升,说明模型出现了过拟合;
  • 测试集的平均准确率达到了82.92%,说明当前模型在cifar-10上进行分类的效果良好;
使用空洞卷积之后,测试集的loss曲线在大概40轮左右的时候,就不再下降了,甚至有点稍微上升的情况,就说明在40轮的时候,模型可能有点过拟合。那么最后我们这个测试集的准确率也到了82%左右,而对于之前设计的普通卷积的准确率大概是不到80%,。
#|深度学习之 11 空洞卷积的实现
文章图片

但是并不能够说明这个空洞卷积在任何时候都比普通卷积都要好。需要依据任务和数据的不同,效果也会有所差距。

    推荐阅读