返回介绍

CNN-卷积反卷积(2)

发布于 2025-02-25 23:04:59 字数 1671 浏览 0 评论 0 收藏 0

在前面的斗图篇我们提过这篇文章《Visualizing and understanding convolutional networks》,这是一片介绍反卷积和可视化的文章,今天我们就来详细看看这篇文章的一个开源实现 - 来自 GitHub - piergiaj/caffe-deconvnet: A deconvolutional network in caffe

首先我们给出上面这篇论文的网络结构架构:

从结构中可以看出,网络首先进行前向计算,在前向计算中收集一些数据,然后将这些数据塞入反向网络中进行反向计算,从而得到最终的反卷积结果。

这其中还包括一些传统网络中没有的层结构 - 当然不是网络中带有参数的核心层了。以下这张图是这个网络的结构展示以及在前向计算过程中每个层的维度大小:

从这张图可以看出它就是一个经典的 AlexNet 结构的网络,但是这个层中有一些特殊的层,它们是:

  • PoolingSwitches
  • SliceHalf

这两个层有什么作用呢?实际上它就是一个 Pooling 层,只不过会多输出一些信息。对于 max_pooling 来说,它会输出正常的 max_pooling 值,以及对应的 max_pooling 的 index。这个 index 信息将会被用在反向计算中。因为反向计算时我们要将 diff 传输到 pooling 层前指定的 index 上,这里要做一个记录。

其中 PoolingSwitches 就是记录 max pooling 的值和 max pooling 选中的 index,而 SliceHalf 则将这两部分分成两个输出,属于 SliceLayer 的一个特殊实现。

反向计算就是把之前的参数再传输回去,在前面我们已经介绍过这其中的思想了。返回的网络结构如下图所示:

可以看出除了去掉了 relu 层,反向的结构和前向的结构完全一样。反向中的 InvPooling 层做了 Pooling 的的反向计算,其中利用到了前向计算中保存的 index 值。

其中的一些效果可以参见前面的斗图篇,这里就不多介绍了。感兴趣的童鞋也可以自己尝试一下。

总体来说这个方法可以帮助我们观察出图像中的一些响应特点,在论文中作者还提出,他们通过可视化的方法发现了 AlexNet 中的一些不足,并提出了一些改进方法,也最终形成了在江湖上有一定影响力的 ZF 模型。

除了这种反卷积的可视化方法,其实还有其他的可视化方法。后面我们再慢慢介绍。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文