细粒度语义分割:ICCV2019论文解析

Fine-Grained Segmentation Networks: Self-Supervised Segmentation for Improved Long-Term Visual Localization

论文链接:

http://openaccess.thecvf.com/content_ICCV_2019/papers/Larsson_Fine-Grained_Segmentation_Networks_Self-Supervised_Segmentation_for_Improved_Long-Term_Visual_Localization_ICCV_2019_paper.pdf

摘要

长期的视觉定位是在一个场景中估计给定的查询图像的相机姿态,该场景的外观随时间而变化。这是一个重要的问题,在实践中,例如,遇到的自主驾驶。为了获得对这种变化的鲁棒性,长期定位方法通常使用分段作为不变的场景表示,因为每个场景部分的语义不受季节性变化和其他变化的影响。然而,由于可用类的数量有限,这些表示通常不是非常有区别的。本文提出了一种新的神经网络,即细粒度分割网络(FGSN),它可以提供大量的标签,并能以自监督的方式进行训练。此外,我们还展示了如何训练FGSNs在季节变化中输出一致的标签。我们通过大量实验证明,将我们的FGSNs产生的细粒度分段集成到现有的定位算法中可以显著提高定位性能。

1.       Introduction

具体而言,本文的贡献如下:

1) 提出了一种新的基于聚类索引的高密度分割网络FGSN。这消除了对人工定义类的需求,并允许我们通过自我监督学习以数据驱动的方式定义类。使用2D-2D对应数据集[42]进行训练,我们确保我们的课程在季节性和视点变化下是稳定的。我们方法的源代码是公开的。

2) fgsn允许我们创建更多类的内部分段。我们表明,这对语义视觉定位算法有积极的影响,并且当使用现有的定位方法时,可以带来实质性的改进。

3) 我们进行了详细的实验来研究聚类数目对多个视觉定位算法的影响。此外,我们还比较了两种类型的权重初始化,分别使用预先训练好的网络进行语义分割和图像分类。

2.       Related Work

Semantic Segmentation

语义分割是为输入图像中的每个像素指定一个类标签的任务。现代方法使用完全卷积网络[47],可能预先训练分类[47],同时结合更高层次的背景[99],扩大接受域[17,19,92],或融合多尺度特征[18,66]。另一项工作是将fcn与概率图形模型相结合,例如,以后处理步骤[17]的形式,或作为端到端可训练网络中的可微组件[41,46100]。

(Semantic) Visual Localization

本文研究了基于语义分割的第二类方法[4,21,28,78,80,83,85,86,94]。这些方法使用语义图像分割来获得对外观和(中等)几何变化不变的场景表示。由于通常可用的类很少,因此得到的表示不是很有区别性。因此,语义定位方法使用语义作为仅次于3D信息的第二感知模态[21,78,83,85,86]。本文证明了这种方法所使用的图像分割不一定需要语义。相反,我们表明,这些方法得益于我们的fgsn产生的更细粒度分段和更多类。

Domain Adaption

语义定位算法隐式地假设语义分割对光照、视点、季节性等变化具有鲁棒性。实际上,用于语义分割的cnn通常只有在训练集中反映这些条件的情况下才能在不同的条件下表现良好。然而,为大型图像集创建像素级注释是一项耗时的任务。因此,域自适应方法[27,40,48,49,68,88101]考虑了将在一个域上训练的算法应用于新域的问题,在新域中几乎没有标记数据可用。这使得对合成数据集进行训练[65,67]以提高真实图像的性能[33,70102]成为可能。此外,网络在不同天气和光照条件下拍摄的图像上的性能也可以提高[90,91]。在语义图像分割中,这些方法提高了分割的鲁棒性。但是,它们不会增加可用类的数量,因此是对我们方法的补充。为了同样的目的,我们使用了最近提出的对应数据集[42],以确保我们的分割对光照和季节变化具有鲁棒性。

Self-Supervised Learning

自监督学习方法是无监督学习方法的一种变体,其中模型学习预测一组可从输入数据自动创建的标签。有几种方法训练CNN执行特定领域的辅助任务[25,56,61,97]。任务的一些例子包括预测丢失的图像部分[60]、自我运动[1]和图像的旋转[30]。为了解决这些辅助任务,CNNs需要学习有意义的视觉特征,这些特征也可以用于手头的实际任务。在[15]中,Caron等人。训练CNN使用k-均值图像特征聚类获得的标签进行图像级分类。我们将此方法扩展到训练图像分割网络。我们还显式地使用实际的集群或标签进行可视化本地化。这与[15]不同,在[15]中,集群只是学习分类等任务特性的一种手段。

3.       Fine-Grained Segmentation Networks

细粒度分割网络(FGSN)与用于语义分割的标准CNN具有相同的结构。给定输入图像,生成密集的分割图。但是,标签不是在一组手动创建的注释上训练的,而是以自监督的方式创建的。在训练过程中,在一定的时间间隔内,从训练集中的图像中提取特征,并使用k-均值聚类进行聚类。然后,在训练期间,将每个像素一个的簇分配用作监督,即作为标签。这样,我们就可以更改FGSN输出的类的数量,而无需使用新的类集创建注释。FGSN被训练为为每个像素输出正确的标签。在训练过程中,我们还使用了一组2D-2D点对应关系[42],以确保预测在季节变化和视点变化下是稳定的。对应数据集的每个样本都包含从不同的遍历中获取的同一场景的两个图像,因此在不同的季节或天气条件下。每对图像中的一幅总是来自参考导线,在有利的天气条件下拍摄。在描绘相同3D点的图像中的点之间的2D-2D点对应也可用于每个图像对。鼓励网络对每个对应的两个点进行同一类预测,使输出对季节变化具有鲁棒性。图2示出了训练过程。注意,创建对应数据集的过程要比用语义标签手工标记相同的图像简单得多,详见[42]。

Training Loss

我们的训练损失包括两部分,通信部分Lcorr和集群分类部分Lclass。后者鼓励模型为数据集的参考图像中的每个像素输出正确的标签。我们使用一个标准的交叉熵损失作为目标。最终的Lclass是所有样品的平均值。

4.       Semantic Visual Localization

为此,我们计算规范化互信息(NMI)来度量Cityscapes[22]验证集中的集群分配和注释语义标签之间的共享信息。将集群分配表示为X,语义标签分配表示为Y,规范化的互信息由

其中I是互信息,H是熵。如果X和Y是独立的,NMI(X;Y)=0。如果其中一个任务可以从另一个任务中预测,那么X传递的所有信息将与Y共享,并且NMI(X;Y)=1。

表1显示我们网络的NMI。正如预期的那样,与为分类而预先训练的网络相比,为语义分割而预先训练的网络实现了更高的NMI。直观地说,集群应该包含可用于本地化的语义信息。然而,高的NMI并不一定意味着更好的本地化性能。例如,在house和sky之间的边缘包含像素的集群将减少集群分配和语义类之间的NMI,但是对于本地化是有用的。

图3显示了在具有语义分割初始化的CMU上训练的网络的城市景观类和我们的聚类索引之间的列联表。每个列联表通过形成二维直方图来显示同一数据的两组赋值之间的相互关系,其中每个维度对应于其中一个赋值。在我们的例子中,维度分别对应于语义类标签和集群索引。可以看到,有许多聚类索引被分配给与语义类植被相同的像素。由于CMU图像包含大量的植被,这是预期的,并可能导致更多的信息可用于图像的本地化。从20个簇的网络列联表可以看出,索引为19的簇与几个语义类重叠。这意味着许多像素被分配给这个集群,这表明语义信息丢失了。这也反映在NMI(表1) ,这对于20个群集网络来说要比使用更多群集的网络要低。

5.       Experiments

图3还示出许多簇不直接对应于语义类。这表明fgsn偏离了用于初始化它们的预先训练的网络。

表2显示了RobotCar和CMU数据集的实验结果。可以看出,使用经过20多个簇训练的FGSNs可以提高定位性能。特别是在具有挑战性的条件下,例如在RobotCar和Suburban上过夜,在CMU上停车,与语义分割相比,所获得的改进是相当可观的。当然,使用过多的聚类会导致图像的过分割,从而降低SSMC的定位精度。实验清楚地表明,SSMC从使用细粒度分段中获益,尽管聚类未必与标准语义概念对应。

根据表2,添加额外的数据集会降低性能,这很可能是因为必须重新实现网络才能产生结果。

如表3所示,如我们的FGSNs所提供的那样,使用带有更多标签的分段,提高了本地化性能,缩小了与当前最新技术的性能差距。这些结果清楚地验证了FGSNs背后的动机:使用更多的分割标签来创建更具区分性但仍然健壮的语义视觉定位表示。

6.       Conclusions

在本文中,我们提出了一种新的卷积神经网络(FGSN),它输出密集的细粒度分割。利用k-means聚类,我们可以利用图像特征的聚类分配作为标签,以自监督的方式训练FGSNs。这使我们能够使用任意多个输出类,而不必手动创建注释。此外,我们还使用了2D-2D对应数据集[42],以确保类在季节变化和视点变化下是稳定的。通过大量的实验,我们已经证明,使用更多的细粒度分割,如我们的FGSNs,有利于语义视觉定位的任务。

未来的重要方向包括进一步调整视觉定位方法以适应更多的簇,以确保正确使用输出分段的增加的细节级别。此外,有兴趣进一步研究FGSNs的泛化,例如结合域自适应方法。

细粒度语义分割:ICCV2019论文解析的更多相关文章

  1. 结构感知图像修复:ICCV2019论文解析

    结构感知图像修复:ICCV2019论文解析 StructureFlow: Image Inpainting via Structure-aware Appearance Flow 论文链接: http ...

  2. 大型图像数据聚类匹配:ICCV2019论文解析

    大型图像数据聚类匹配:ICCV2019论文解析 Jointly Aligning Millions of Images with Deep Penalised Reconstruction Conge ...

  3. 深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析

    深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析 What Else Can Fool Deep Learning? Addressing Color Constan ...

  4. 面部表情视频中进行远程心率测量:ICCV2019论文解析

    面部表情视频中进行远程心率测量:ICCV2019论文解析 Remote Heart Rate Measurement from Highly Compressed Facial Videos: an ...

  5. 无监督域对抗算法:ICCV2019论文解析

    无监督域对抗算法:ICCV2019论文解析 Drop to Adapt: Learning Discriminative Features for Unsupervised Domain Adapta ...

  6. 人脸真伪验证与识别:ICCV2019论文解析

    人脸真伪验证与识别:ICCV2019论文解析 Face Forensics++: Learning to Detect Manipulated Facial Images 论文链接: http://o ...

  7. 深度学习数据特征提取:ICCV2019论文解析

    深度学习数据特征提取:ICCV2019论文解析 Goal-Driven Sequential Data Abstraction 论文链接: http://openaccess.thecvf.com/c ...

  8. 视频动作定位的分层自关注网络:ICCV2019论文解析

    视频动作定位的分层自关注网络:ICCV2019论文解析 Hierarchical Self-Attention Network for Action Localization in Videos 论文 ...

  9. 摄像头定位:ICCV2019论文解析

    摄像头定位:ICCV2019论文解析 SANet: Scene Agnostic Network for Camera Localization 论文链接: http://openaccess.the ...

随机推荐

  1. 码农飞升记-00-Java发展历程

    目录 1.Java发布历程 2.Java发展史 Oak 的出现( Java 的雏形) 1995年 Java 的诞生 1996年 Sun 公司发布第一个 JDK 1998年12月用 J2SE 取代 JD ...

  2. [Java] 数据类型, 变量, 运算符, 表达式

    title: [Java] 变量与表达式 你已经学会输出 Hello world 了, 那么现在, 我们来学习关于变量的知识 基本数据类型 在 Java 中, 有 8 种基本的数据类型: 名称 描述 ...

  3. 限制pyqt5应用程序 只允许打开一次

    起因 pyqt5程序创建桌面快捷方式后,多次单击图标 会打开多个UI界面,这种情况肯定是不允许的! 解决 if __name__ == '__main__': try: app = QtWidgets ...

  4. 【JavaScript】【dp】Leetcode每日一题-解码方法

    [JavaScript]Leetcode每日一题-解码方法 [题目描述] 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -& ...

  5. 【dependencyManagement版本管理】dependencies.dependency.version is missing

    maven 的gav的v(版本问题) 报错dependencies.dependency.version is missing 出现的场景 一个项目中有多个模块 父模块中出现dependencies. ...

  6. 月薪6K和月薪2W的测试,有什么区别?

    之前,我收到了一位朋友的好消息,说自己拿到了接近月薪 20k 的 offer.   说实话,软件测试岗位前期门槛低,但是想要拿到高薪真没那么简单.工作 2-3 年薪资还在原地打转的同学,都大有人在. ...

  7. Java对象内存分布

    [deerhang] 创建对象的四种方式:new关键字.反射.Object.clone().unsafe方法 new和反射是通过调用构造器创建对象的,创建对象的时候使用invokespecial指令 ...

  8. Power BI官方客户案例2021

    微软商业应用峰会Power BI客户案例,今年的客户案例相比前2年不同,主要是大客户,基本都是行业Top公司. 选取零售,医药制造,教育,医疗IT等行业龙头.沃尔玛,拜耳,滑铁卢大学的分享内容非常棒, ...

  9. Kubernetes服务pod的健康检测liveness和readiness详解

    Kubernetes服务pod的健康检测liveness和readiness详解 接下来给大家讲解下在K8S上,我们如果对我们的业务服务进行健康检测. Health Check.restartPoli ...

  10. for 循环语句 (enumerate枚举,据说直接写出索引值)

    for i in ***: 今天上课看到alex用了 for index,i in enumerate(list): print(index,i) (enumerate好像可以设置开头序号enumer ...