本文记录了博主阅读论文《ParseNet: Looking Wider to See Better》的笔记,代码。更新于2019.05.16。

文章目录

  • Abstract
  • Introduction
  • Related Work
  • ParseNet
    • Global Context
    • Early Fusion and Late Fusion
    • L2L_2L2​ Normalization Layer
  • Experiments
    • Best Practice of Finetuning
    • Combining Local and Global Features
  • Conclusion

Abstract

本文提出了一个将全局上下文加入到全卷积网络用于语义分割的方法。这个方法很简单,用的是一个层的平均特征来扩张每个位置上的特征。此外,作者还研究了几种训练过程中的特质,极大地增加了对比算法表现(比如FCN)。将全局特征加上后,用了一个学习归一化参数的技巧,这种方式极大提高了算法表现。所提出的方法(ParseNet)在PASCAL-Context下实现了当前最好的表现(PASCAL VOC 2012数据库)。

Introduction

下图是网络过程:

Related Work

ParseNet

Global Context

尽管理论上,网络最后一层的特征的感受野非常大(比如加了VGG的FCN的感受野为404x404),但实际上,经验感受野却远远小于这个数值,并且不足以支撑全局上下文。为了证明感受野的有效性,我们对输入图像的一个小图块增加随机噪声,再研究目标层上的影响结果。如果效果改变很大,那就是给定任意一个图块是在经验感受野外的。如下图所示:

最后一层的感受野几乎无法覆盖整张图的1/4.这种有效感受野与经验感受野之间的区别也被Zhou等人证明了。

具体而言,我们用全局平均池化对最后一层上下文特征进行池化,或是对任意目标层池化。在局部特征图上增加全局特征后,分割的效果大幅提升。

Early Fusion and Late Fusion

在得到了全局上下文特征后,我们有两个标准的处理方式将其与局部特征一起使用。首先,是early fusion,如Fig.1中所示,这里将全局特征复制(unpool)到与局部特征相同的尺寸(空间),之后级联,再用组合后的特征学习得到分类器。另外一种替代方法是late fusion,即每个特征用于分别学习其对应的分类器,再通过Long等人提出的方法将两个分割估计加权结合成一个分了结果。

这两种融合方式都有各自的优缺点。如果没有对组合特征进行额外处理,early fusion与late fusion其实是差不多的(Hariharan等人提出)。而对于late fusion而言,有可能单独一个特征是没有办法识别出某种特定目标的,但是结合它们则有可能;那么这种情况下,是无法恢复这种损失的。作者的实验证明,通过核实的归一化方法,这两种方法的效果是差不多的。

在融合特征的时候,必须要很小心地对每个特征进行归一化,从而保证组合后的特征运行正常。在经典的计算及视觉中,这个被视作cue combination problem。如下图所示,我们提取了从高层提取的特征(从左到右),也提取了低层特征,但是后者的尺度明显比前者大。后面会说到,如果想要直接结合特征,那么工作量是非常大的。因此,这里先用L2L_2L2​归一化每个特征,然后再学习尺度参数,这样学习过程会更稳定。

L2L_2L2​ Normalization Layer

如前面说到的,我们需要整合两个(甚至更多的)特征向量,总体来说,它们有不同的尺度和norm。直接这样做工作量非常大。作者发现,先对每个特征进行单独的归一化,然后再分别学习尺度,会使得这个问题简单很多。

L2L_2L2​ norm layer不仅对于特征结合有帮助。如前文所述,在某些情况下,late fusion的效果也不错,但是需要L2L_2L2​归一化的帮助。比如,如果我们希望利用低层特征来学习分类器,如Fig.3中所示,那么部分特征的范数将特别大。因此,在没有自习的权重初始化和调参的情况下是没有办法学习这些特征的。在本文工作中,在将特征用于分类器之前,作者利用了L2L_2L2​范数并学习参数尺度(每个通道),从而得到了更稳定的训练过程。

具体来说,设l\mathcal ll为我们希望最小化的损失。这里我们用summed softmax loss。对于一个有ddd维的输入x=(x1…xd)\mathbf{x}=(x_1 \dots x_d)x=(x1​…xd​),作者用公式x^=x∥x∥2\hat{\mathbf{x}}=\frac{\mathbf{x}}{\Vert \mathbf{x} \Vert^2}x^=∥x∥2x​来进行L2−norm2L_2-norm^2L2​−norm2归一化,其中∥x∥2=(∑i=1d∣xi∣2)1/2\Vert \mathbf{x}\Vert_2=\left ( \sum^d_{i=1}\vert x_i\vert^2\right )^{1/2}∥x∥2​=(∑i=1d​∣xi​∣2)1/2是x\mathbf xx的L2L_2L2​范数。

需要注意的是,如果没有进行对应的尺度缩放,直接对一层的每个输入应用归一化会明显改变这一层的尺度,并且减慢训练速度。这里提出了一个尺度缩放参数γi\gamma_iγi​,对于每个通道,都用yi=γix^iy_i=\gamma_i\hat x_iyi​=γi​x^i​进行归一化结果的尺度缩放。

额外参数的个数等同于整个通道数,在反向传播过程中是可以忽略的。实际上,通过设置γi=∥x∥2\gamma_i = \Vert\mathbf x\Vert_2γi​=∥x∥2​,可以恢复L2L_2L2​归一化的特征,如果该特征是最优的话。需要注意的是,这个以归一化形式实施很简单,而且参数尺度学习只取决于每个输入特征向量,而不需要从其他样本中整合信息(如batch normlization那样)。在训练过程中,作者使用反向传播和chain rule来计算相关尺度参数γ\gammaγ和输入数据x\mathbf xx的导数:

∂l∂x^=∂l∂y⋅γ∂l∂x=∂l∂x^(I∥x∥2−xxT∥x∥23)∂l∂γi=∑yi∂l∂yix^i\frac{\partial \mathcal l}{\partial \mathbf{\hat x}}=\frac{\partial\mathcal l}{\partial \mathbf y}\cdot\gamma \qquad\frac{\partial \mathcal l}{\partial \mathbf x} = \frac{\partial \mathcal l}{\partial \mathbf{\hat x}}\left(\frac{\mathbf I}{\Vert \mathbf x\Vert_2}-\frac{\mathbf {xx}^T}{\Vert \mathbf x\Vert_2^3}\right)\qquad \frac{\partial \mathcal l}{\partial \gamma_i}=\sum_{y_i}\frac{\partial \mathcal l}{\partial y_i}\hat x_i∂x^∂l​=∂y∂l​⋅γ∂x∂l​=∂x^∂l​(∥x∥2​I​−∥x∥23​xxT​)∂γi​∂l​=yi​∑​∂yi​∂l​x^i​

对于本文中的情况,我们需要将L2L_2L2​范数应用于特征图的每个像素,而非整个图。可以很容易地通过像素及操作将这个公式扩展,因为其更有效。

Experiments

数据库:VOC2012
框架:Caffe
初始化:VGG-16

Best Practice of Finetuning

PASCAL-Context:
迭代次数:80k(BaselineB为160k


PASCAL VOC2012:

Combining Local and Global Features

数据库:SiftFlow,PASCAL-Context和PASCAL VOC2012
SiftFlow:
2688张图,33个语义类别。

PASCAL-Context:

PASCAL VOC2012:



Conclusion


【阅读笔记】《ParseNet: Looking Wider to See Better》相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  7. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  10. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

最新文章

  1. oracle修改表结构的sql命令是什么,sql语句中修改表结构的命令是什么?
  2. java action处理list_Struts2 -- Jsp取action List及数据映射
  3. PHP用foreach来表达array_walk/array_filter/array_map/array_reduce
  4. 一文弄懂Numpy中ndarray的维度(dimension)/轴数(axis/axes)问题
  5. fluent design_Fluent Design单选按钮,复选框,选择框,Java菜单
  6. c++new时赋初值_C++ Lesson 7:new,delete amp; 类的重用
  7. 【渝粤题库】陕西师范大学163212旅游地理学 作业(专升本)
  8. DICOM学习(3)——python实现worklist获取
  9. 64 位Instant Client连接64位PLSQL(win10)
  10. jdk版本问题:hour_day_of 0 -1
  11. android emoji转换成字符串,安卓的emoji表情转换为文字
  12. unittest数据驱动之DDT
  13. 解决Mac苹果电脑没有声音,喇叭会显示为灰色禁用状态
  14. C++算法篇:DFS超详细解析(2)--- tarjan算法求无向图割边
  15. 公有云提到的各个合规compliance都是什么东西?
  16. mac安装软件管家homebrew
  17. Angular学习笔记-使用工厂和值声明提供器
  18. MySQL数据库大作业——学生管理系统GUI
  19. 爬取boss直聘数据并分析
  20. 国开网电大 地基基础 形考任务1-4

热门文章

  1. 计算机网络漫谈:OSI七层模型与TCP/IP四层(参考)模型(转载)
  2. Jenkin权限控制——项目矩阵授权策略
  3. 北京交通大学计算机保研~
  4. JavaScript+屏幕自适应:时钟(色卡分享+canvas+js)
  5. 关于Qt上位机与下位机stm32数据传输的解析问题(一)
  6. 环信im登录及收发消息
  7. 邮箱邮件收发件服务器怎么设置?
  8. Excel自动打开、刷新、保存
  9. pandas数据处理-----(一)
  10. A Byte of Python3 学习笔记