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

本文是接着上一篇深度学习之 11 卷积神经网络实现_水w的博客-CSDN博客

目录

空洞卷积

1 优点与适用性

2 存在的问题

 ◼  空洞卷积存在网格效应

 ◼  远距离的点之间的信息可能不相关

 ◼  解决方法

  ◼  满足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 空洞卷积的实现_第1张图片

深度学习之 11 空洞卷积的实现_第2张图片

优点与适用性

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

卷积核为大小2,四层卷积,普通卷积可以覆盖5个像素点, 而使用空洞卷积可以覆盖16个像素点

深度学习之 11 空洞卷积的实现_第4张图片

但是因为空洞卷积的特殊性,我们其实并不能够项普通卷积一样拿来就用。 

存在的问题

 ◼   空洞卷积存在网格效应
 ◼  远距离的点之间的信息可能不相关

 ◼  空洞卷积存在网格效应

三层空洞卷积 dilation=2

只获取到了一些点的信息, 并没有获取到全部的信息。实际上就算我们不断的继续堆叠最顶点的这个点,只用到了部分结点,我们还是不能够获取到全部底层的信息。 

右侧的序列上, 如果我们不进行填充,那么在3层之后就已经到头了,没有办法再进行卷积了。

深度学习之 11 空洞卷积的实现_第5张图片

 ◼  远距离的点之间的信息可能不相关

空洞卷积虽然是被设计用来捕获更 远距离 的信息的,但是这样一味的使用大的dalition就会 忽略掉近距离的信息 ,如何能 同时处理远距离信息和临近区域的信息 是设计好空洞卷积的关键之一。

点B明显与近距离点A更相关,与左上角的点C 关系不大,如果dalition过大则容易忽略点A的信息而降低模型效果。 

深度学习之 11 空洞卷积的实现_第6张图片 ◼  解决方法

深度学习之 11 空洞卷积的实现_第7张图片

  ◼  满足HDC条件的空洞卷积叠加演示:dilation rate [1, 2, 5] with 3 x 3 kernel

深度学习之 11 空洞卷积的实现_第8张图片

深度学习之 11 空洞卷积的实现_第9张图片

深度学习之 11 空洞卷积的实现_第10张图片

使用PyTorch实现空洞卷积  

深度学习之 11 空洞卷积的实现_第11张图片

  ◼  空洞卷积的实现 实现dilation为1,2,5的三层空洞卷积

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

深度学习之 11 空洞卷积的实现_第12张图片

  ◼  空洞卷积实验结果

  • 模型在训练集上可以达到一个较低的loss和较高的准确率;
  • 在大约40轮后测试集的Loss就处于波动状态甚至有些上升,说明模型出现了过拟合;
  • 测试集的平均准确率达到了82.92%,说明当前模型在cifar-10上进行分类的效果良好;

使用空洞卷积之后,测试集的loss曲线在大概40轮左右的时候,就不再下降了,甚至有点稍微上升的情况,就说明在40轮的时候,模型可能有点过拟合。那么最后我们这个测试集的准确率也到了82%左右,而对于之前设计的普通卷积的准确率大概是不到80%,。

深度学习之 11 空洞卷积的实现_第13张图片

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

你可能感兴趣的:(#,深度学习,人工智能,神经网络,python,深度学习,cnn)