语义分割系列论文 ParseNet

  • 核心思想--Global Context
  • 理论感受野的大小(Receptive Field)
  • 实际感受野的大小
  • 此文章如何扩大感受野?
  • 疑点(读者可以忽略本节)
  • 总结

这是第一次尝试写博客,主要是在看ParseNet这篇论文时,不管是在知乎还是在CSDN,甚至在外网的medium上面,都没有找到讲解得十分清楚的博客。而自己相比与直接看论文原文,更喜欢看学术气没那么重,更贴近口语化的博客文章。我相信这样的铁汁不在少数,那么索性自己开通博客来写一下吧。

在语义分割领域,基础的网络如FCN、SegNet、U-Net的资料很全,刚刚入坑的同学肯定首先是把这些弄明白的,我也会assume你清楚这些最基础的知识。但接下来的学习路线就没那么清晰了,我自己也大概处于这样的阶段。后面应该会出一些deeplab等等更复杂一些的语义分割的文章,这次就从这个较简单的网络开始吧!

核心思想–Global Context

原文题目:ParseNet — Looking Wider to See Better
这是一篇ICLR2016的文章,到2020/04/25有538个引用。相比较U-Net等动辄上万引用的大作,ParseNet的影响力中规中据,但如果你想在语义分割领域深入下去的话,这也算是一个必读文章了。
此文章最核心的思想就是引入了global context,即全局信息。这点怎么理解呢?(敲黑板!)语义分割是对每一个像素点做分类,而在做此分类时我们需要整体的信息。举个例子你就明白了。和窥一斑而见全豹的逻辑正相反,如果只看这张猫咪图的一个像素点,或者一小片像素,我们就去说这些个像素是属于猫,或者豹,或者老虎,这样的准确率是很低的!

如下图所示,FCN没有考虑全局信息,在下半部的分割就很离谱了。可能让我们人类单独看这一片错误分割为bird、dog、sheep的图,把其他部分盖住,大概也很难看出这是一只猫。但我们如果考虑了全局的信息,那就很明显要分类成猫了。整篇文章的核心思想,就是加上了这global context!

理论感受野的大小(Receptive Field)

这时你心里应该有一个问号,至少我的内心os是“我当然知道这个了!卷积这个操作在创造之初不就是为了能够让后面的网络层看到更多信息而发明出来的么?那vgg来举例,第一个conv层中的每个点,是经过3×3的kernel得到的,第二个conv层再经过一个3×3的kernel那感受野(receptive field)不就是9×9了么?这样下去到最后一层时肯定都能看到全局的了!”我这里是犯了两个错误,第一个,连续的conv层不是3×3 -> 9×9 -> 27×27 -> 81×81这样增加的,你这是错误的认为stride也等于kernel size=3 了。通常stride=1时,感受野是 3×3 -> 5×5 -> 7×7 -> 9×9 这样增加的,你细品一下。如果是这样的话,那么若原始图像是1024×1024的话,最后一层岂不是很难拥有全局视野了么?这是你第二个错误,这全局视野主要是来自pooling层。按照vgg的结构,一个block由两个conv和一个pooling层组成,所以感受野的变化是3×3 -> 5×5 -> 10×10这个规律下去的。conv层增加2个像素,pooling层翻一倍。

理论上,后面层的网络是有很大感受野的。

实际感受野的大小

但文章这里强调了一下,实际上,感受野要小很多!(先看懂下面一段英文再继续!)

To identify the effective receptive field, we slide a small patch of random noise across the input image, and measure the change in the activation of the desired layer. If the activation does not vary significantly, that suggests the given random patch is outside of the empirical receptive field, as shown in Figure 2

原文这里方法讲得很清楚,就不翻译了。不过要注意,这里讨论的感受野,是网络中某一层activation map上的某点的感受野。图(c)中的红叉是在activation map上的某点给对应画在了原图中。可以看到理论上的感受野很大很方正,但实际中就会小很多。

此文章如何扩大感受野?


在feature map上面,我们以往做的pooling大多都是2×2的,这次是global的,然后再将其扩张成原来的大小,和之前的cat到一起,再传入下一层。

就这?就这??

对,就这!

文章没有给出整个网络的结构,所以不清楚这个module是怎么加到别的网络,加到哪几个层。我所能看明白的就是这些了。

疑点(读者可以忽略本节)

  1. early-fusion和late-fusion的区别。上面部分是early-fusion,而好像late-fusion是用这个global pooling之后的vector直接来分类,最后再和原本的分类一起的这两个分数再做一些操作。那么问题来了,既然你每个channel上只有一个数了,你怎么能对不同的位置做分割呢?
  2. L2 Norm。据文章说,做L2 Norm是因为low level和higher level的scale不同,low level的更大。我没有看懂是对谁来做这个norm,而且这个cat明明是一个layer内部的事情,传到后面并不存在层间的影响。

    这个图的横坐标含义好像也没有说明。
  3. 那么至于如何用一个learnable的参数去赋给各个channel的值以权重,就更不明白了。

总结

这是一篇看懂的和看不懂的内容对半的文章,现在理解网上为什么没有详细的博客来介绍了,因为只看文章没人能看得全懂。毕竟这也算是一篇5年前的论文了,在当时大家还不知道SegNet,不知道U-Net,所以在当时的预备知识和现在我们的预备知识肯定是不同的。

网上仅找到了caffe的实现,没有tf和pytorch的code。

这些疑点也不会去细究了,只要记住此文的核心贡献,即通过全局的池化->反池化->与原feature map concatenate到一起,就能增加该层的感受野。

语义分割系列论文 ParseNet相关推荐

  1. 【语义分割】论文代码资料汇总

    语义分割的资料总结 1.Github一份丰富的论文清单 from hangdong1587,这份清单中包含了一下几个部分: 语义分割基础论文 基于多边形的分割 基于U-net的分割 前景分割 语义分割 ...

  2. 语义分割系列14-DMNet(pytorch)实现

    DMNet:<Dynamic Multi-Scale Filters for Semantic Segmentation> 发布于2019ICCV. 有意思的是,DMNet的作者和APCN ...

  3. 一文看尽9篇语义分割最新论文(GPSNet/Graph-FCN/HMANet等)

    前言 恰逢 2020年,本文再次更新近期值得关注的最新语义分割论文.这次分享的paper将同步推送到 github上,欢迎大家 star/fork(点击阅读原文,也可直接访问): https://gi ...

  4. 语义分割系列6-Unet++(pytorch实现)

    目录 Unet++网络 Dense connection deep supervision 模型复现 Unet++ 数据集准备 模型训练 训练结果 Unet++:<UNet++: A Neste ...

  5. 干货 | 语义分割综述论文总结与推荐

    添加几篇 19-20 年的综述 Evolution of Image Segmentation using Deep Convolutional Neural Network: A Survey 这篇 ...

  6. 语义分割经典论文总结

    语义分割论文系列总结 1.0经典论文总结 1.1 FCN 1.2 Parse-Net 1.3 U-Net 1.4 Deeplab系列(v1,v2,v3,v3+) 1.5 Non-local 在语义分割 ...

  7. 介绍一篇通过无监督depth estimation改进语义分割的论文

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨黄浴@知乎 来源丨https://zhuanlan.zhihu.com/p/341180239 ...

  8. 语义分割系列2-Unet(pytorch实现)

    Unet发布于MICCAI.其论文的名字也说得相对很明白,用于生物医学图像分割. <U-Net: Convolutional Networks for Biomedical Image Segm ...

  9. 【深度学习】语义分割:论文阅读:(CVPR 2022) MPViT(CNN+Transformer):用于密集预测的多路径视觉Transformer

    这里写目录标题 0详情 1摘要 2 主要工作 3 网络结构 3.1 Conv-stem 3.2 Multi-Scale Patch Embedding 3.3 Multi-path Transform ...

最新文章

  1. NASA前掌门蛰伏10年 打造非冯·诺伊曼架构芯片
  2. MyBatis 物理分页
  3. 跨境电商自建站后台系统原型rp_外贸业务员和跨境电商运营哪个好,跨境电商可以去哪个网站学...
  4. linux 查看服务器性能常用命令
  5. C语言文件与数组之间输入输出操作
  6. 中文名称:案例编程MOOK系列
  7. windows 下安装 mysql
  8. python编写骰子和的程序_简单掷骰子程序发行
  9. JavaIO编程之ReadLine
  10. Unity接入谷歌支付
  11. VBScript编程教程 [上]
  12. 统计学中的十几个数据分析方法
  13. GD32F4—RTC闹钟及自动唤醒中断配置详解
  14. 【无标题】C语言 最简单的代码
  15. uvalive 4997 ABCD Tiles
  16. wps只能输入老跳到宋体字
  17. 给PS / Windows电脑添加字体
  18. Redis的原理分析
  19. 珍爱网退费流程?珍爱网怎么退费
  20. 语音自监督预训练模型 CNN Encoder 调研总结

热门文章

  1. 网页自适应rem如何适配_rem详解及使用方法
  2. python如何随机生成一个整数_Python生成随机数的方法
  3. 富文本编辑器 ck-editor5 的使用
  4. sssdeeeeeeeeeeeee
  5. c语言程序设计试题汇编第三版勘误,C语言程序设计勘误表.doc
  6. java实验报告之Employee类的设计
  7. SSD6 exercise1 解题思路
  8. 咕咚CEO申波:Fitbit 模式在中国走不通,智能手环将消失
  9. 区块链游戏正走上中心化老路?迷恋猫团队CEO撰文痛批
  10. 翻译连载 | JavaScript轻量级函数式编程-第4章:组合函数 |《你不知道的JS》姊妹篇... 1