语义分割CVPR2020-CascadePSP: Toward Class-Agnostic and Very High-Resolution Segmentation与类别无关和甚高分辨率的分割

发布时间:2023-11-18 08:30

论文地址:https://arxiv.org/abs/2005.02551
代码地址:https://github.com/hkchengrex/CascadePSP

CascadePSP: Toward Class-Agnostic and Very High-Resolution Segmentation

  • 1.概述
  • 2.相关工作
    • 2.1.语义分割分割改进算法
    • 2.2.Cascade Network
  • 3.CascadePSP
    • 3.1.精调模块(Refinement)
      • 3.1.1.精调模块(Refinement)
      • 3.1.2.损失(Loss)
      • 3.1.3.精调模块的消融实验
    • 3.2.全局和局部级联细化
      • 3.2.1.全局步骤
      • 3.2.2.局部步骤
      • 3.2.3.L值的选择
      • 3.2.4.对全局精调和局部精调的消融实验
    • 3.3.训练
  • 4.实验
    • 4.1.数据集和评估方法
    • 4.2.设置细节
    • 4.3.分割输入
      • 4.3.1.PASCAL VOC 2012
      • 4.3.2.BIG数据集
    • 4.4.场景解析(scene parsing)
  • 5.结论

1.概述

现有的语义分割很多都是为了低分辨率图像设计,这些架构往往很难适应高分辨率图像。为了在高分辨率图像上工作,很多都市降采样或者裁剪,但是这样的方法会损失信息。
CascadePSP:是一个对从低分辨率到高分辨率图像都能很好的改善分割结果的改良框架。我们的模型将初始MASK作为输入,该MASK可以是任何算法的输出,以提供粗略的对象位置。然后我们的CascadePSP会输出一个精致的MASK。我们的模型是以级联的方式设计的,以由粗到细的方式生成精细的分割。早期级别的粗略输出预测对象结构,该对象结构将用作后期级别的输入,以细化边界细节。
我们的主要贡献可以总结为:
1)级联细分优化模型,这是一种通用的级联细分优化模型,可以对任何给定的输入细分进行优化,提高了最新细分模型的性能,而无需进行优化。
2)我们的方法可用于产生高质量和非常高分辨率的分割,这是以前基于深度学习的方法从未实现的。
3)引入了BIG数据集,该数据集可用作超高分辨率语义图像分割任务的精确评估数据集。

2.相关工作

2.1.语义分割分割改进算法

如何解决譬如FCN分割输出的效果不是特别好这个问题,如CRF或区域增长,它们通常遵循低级别的颜色边界,而没有充分利用高级别的语义信息,并且不能修复大的错误区域。基于以端到端的方式接受培训的单独的细化模块也用于提高边界精度,大型模型容易过度拟合,而浅层精化网络的精化能力有限。相反,我们的方法具有很高的模型容量,可以独立训练,只使用对象来修复分割。不需要对特定的模型进行微调,这样我们的训练就不会受到过度调整的阻碍。

2.2.Cascade Network

多尺度分析利用了许多计算机视觉任务中的大尺度和小尺度特征,许多方法预测每个阶段的独立结果,并将它们合并以获得多尺度信息。我们的方法不仅融合了来自粗尺度的特征,而且将它们用作下一个更精细层次的输入之一。我们将表明,添加粗输出作为下一级的输入不会改变我们的公式,因此相同的网络可以递归地用于更高分辨率的细化。

3.CascadePSP

3.1.精调模块(Refinement)

3.1.1.精调模块(Refinement)

\"语义分割CVPR2020-CascadePSP:
如图二,精调模块将一幅影像和它经过不完美分割方案得到的不同尺度的掩膜作为精调模块的输入。多尺度得输入允许模块捕捉不同等级得结构和边缘信息,使得网络可以自适应的融合不同尺度得掩膜以改善分割。
所有低分辨率得分割图像都经过上采用得到与RGB分辨率相同,并于RGB图像concat。使用以ResNet为骨干得PSPNet得到步长为8的特征图。使用[1,2,3,6]池化大小得到不同尺度信息,除了最终的stride=1输出,我们的模型还生成了中间stride=8和stride=4 segmentations,它们关注于输入分段的整体结构。我们跳过stride=2,以提供纠正局部错误边界的灵活性。
为了重建在提取过程中丢失的像素级图像细节,我们使用主干网络的跳跃连接,并使用上采样块来融合特征。我们将跳过连接的特征和线性上采样的特征concat起来,用两个ResNet块处理它们。使用2层1 × 1 conv生成分段输出,然后进行sigmoid激活。

3.1.2.损失(Loss)

对于较粗的步幅8输出,我们使用交叉熵损失产生最佳结果,对于较细的步幅1输出,使用L1+L2损失,对于中间步幅4输出,使用交叉熵和L1+L2损失的平均值产生最佳结果。不同的损失函数适用于不同的步幅,因为粗细化侧重于全局结构,而忽略局部细节,而细化通过依赖局部线索实现像素级精度。
为了鼓励更好的边界细化,对步幅1分割输出还使用梯度幅度上的L1损失,分割上的梯度由3 × 3均值滤波器和索贝尔算子估计,梯度损失使得输出在像素级更好地粘附到对象边界。由于梯度比像素级损失更稀疏,我们用α来加权它,在我们的实验中α被设置为5。梯度损失可以写成:
\"在这里插入图片描述\"

其中fm()表示3 × 3均值滤波器,∇表示由Sobel算子近似的梯度算子,n是像素总数,xi, yi分别是是地面真值分割和输出分割的第i个像素,最后的损失函数可以写为:
\"在这里插入图片描述\"

其中LsCE、Ls(L1+L2)和Ls(grad)分别表示输出步长的交叉熵损失、L1+L2损失和梯度损失。

3.1.3.精调模块的消融实验

使用标准分割评价指标IoU,并为了突出边界精度的重要性,使用一个新的指标:平均边界精度测量指标(mean Boundary Accuracy measure (mBA).)
为了对不同大小的图像进行稳健估计,我们以均匀的间隔在[3,w+h 300]中对5个半径进行采样,计算从地面真实边界开始的每个半径内的分割精度,然后对这些值进行平均。表1显示,我们的模型在IoU方面产生了最显著的改进,在边界精度方面甚至更显著。
\"语义分割CVPR2020-CascadePSP:

通过多级级联,该模块可以将不同的细化阶段委托给不同的规模,3级模型使用中间小规模分割来更好地捕捉对象结构。

3.2.全局和局部级联细化

全局步骤考虑整个调整大小的图像来修复结构,而局部步骤使用图像裁剪以全分辨率细化细节。相同的细化模块可以递归地用于更高分辨率的细化。

3.2.1.全局步骤

\"语义分割CVPR2020-CascadePSP:

在级联的第一级之后,其中一个输入通道将被双上采样粗输出所取代。这种情况一直重复到最后一级,在最后一级,输入由初始分段和前一级的所有输出组成。
这种设计使我们的网络能够逐步修复分段错误,同时保持初始分段中的细节。有了多个级别,我们可以粗略地描绘对象并修复粗略级别中的较大误差,并使用粗略级别提供的更健壮的特征来关注精细级别中的边界精度。

3.2.2.局部步骤

\"语义分割CVPR2020-CascadePSP:

首先使用下采样图像执行全局细化,然后使用来自更高分辨率图像的图像裁剪执行局部细化。在局部步骤中,模型采用全局步骤最后一级的两个输出,表示为S1(4)和S1(1)。两个输出都几乎被调整到图像的原始大小。该模型采用大小为L×L的图像裁剪,裁剪输出的每一侧都将有16个像素被剔除,以避免边界伪影,图像边界除外。以L/2-32的步长均匀地进行裁剪,使得大多数像素被四个裁剪所覆盖,并且超出图像边界的无效裁剪被移动以与图像的最后一行/列对齐。图像作物然后被馈送到输出步幅分别为4和1的2级级联。在融合中,由于不同的图像背景,来自不同面片的输出可能彼此不一致,我们通过平均所有输出值来解决这个问题。对于分辨率更高的图像,我们可以以由粗到细的方式递归应用局部步长。

3.2.3.L值的选择

\"语义分割CVPR2020-CascadePSP:
图6展示了当选择不同的L时,测试期间GPU内存使用和细化质量(mBA)之间的关系。在我们的实验中,我们选择了具有3.16 GB GPU内存使用量的L = 900,以平衡增加GPU内存使用量和降低性能增益之间的权衡。在我们对BIG验证集的实验中,使用更高的L是不必要的,并且会占用额外的内存。在低内存设置中,较小的L(如500)可用于产生稍差的(0.6% mBA)精度,但是内存占用更低(1.16 GB)。请注意,GPU内存使用仅与L有关,而与图像分辨率无关,因为融合步骤可以在CPU上轻松执行。

3.2.4.对全局精调和局部精调的消融实验

当我们删除全局步骤时,IoU下降更显著,这表明全局步骤主要负责修复整体结构,对IoU提升贡献更大,而仅本地步骤由于图像上下文不足而无法实现。如果没有局部步骤,尽管IoU仅略微下降,但我们注意到边界精度下降更明显,因为全局步骤无法提取高分辨率细节。
\"语义分割CVPR2020-CascadePSP:

3.3.训练

为了学习对象信息,我们以类不可知的方式在数据集集合上训练我们的模型。我们合并了MSRA-10K,DUT-OMRON, ECSSD ,FSS-1000 ,生成了一个3,572的分割数据集,其语义类别比PASCAL (20个类别)或COCO (80个类别)等常见数据集更加多样。使用这个数据集(> 1000个类)使我们的模型更加健壮,并且可以推广到新的类。
在训练过程中,我们采用随机的224×224图像裁剪,并通过扰动地面真相来生成输入分割。全卷积特征提取器提供平移不变性,而金字塔池模块提供重要的图像上下文,允许我们的模型扩展到更高的分辨率,而没有显著的性能损失。较小裁剪的使用加快了我们的训练过程,并使数据准备更加容易,因为用于分割的高分辨率训练数据的获取成本很高。我们避免使用现有模型生成的分割输出进行训练,这会导致过度拟合到特定模型。取而代之的是,扰动的地面真实应该描述由其他方法产生的不准确分割的各种形状和输出,这有助于我们的算法对不同的初始分割更加鲁棒。

4.实验

在数据集PASCAL VOC2012、BIG、ADE20K上评估结果。

4.1.数据集和评估方法

PASCAL VOC2012没有完美的像素级分割结果,为了更好的去评估结果,我们从其中的验证集中标注了500个segmentations,去除了原分割中边缘附近标注为void的像素。缺少高分辨率分割数据集是难点,于是自己制作了50验证,100测试的BIG数据集,分辨率从20481600到50003600.

4.2.设置细节

使用pytorch,PSPNet使用ResNet-50作为主题架构。数据增强手段包括对地面真值分割的扰动,图像翻转与裁剪。使用10E-4权重损失的Adam优化器,经过30K迭代后,学习率由310E-4减为310E-5,batchsize=9。在两个1080Ti上训练总时长为16小时,局部步骤旨在感兴趣的区域进行。

4.3.分割输入

我们对比评估了使用不同模型分割输出结果作为精调模块的输入,以证明我们的方法的有效性

4.3.1.PASCAL VOC 2012

输入时不需要resize,因为分辨率不高,可以只使用Global Step
\"语义分割CVPR2020-CascadePSP:

4.3.2.BIG数据集

现有模型不能直接处理BIG数据集,所以我们resize再放入现有分割模型中

4.4.场景解析(scene parsing)

使用我们的预处理网络独立地细化每个语义对象,然后使用融合函数集成结果。图12概述了我们的策略。
\"语义分割CVPR2020-CascadePSP:
我们通过使用25%填充的感兴趣区域,为每个语义对象独立地提炼足够大的连接组件。为了处理重叠区域,我们的融合函数是一个修改后的argmax,如果所有输入的类别的置信度低于0.5,我们则使用原始的分割(即未经过Refinement模块的输入分割)。
我们在ADE20K 的验证集上评估我们的模型。由于ADE20K数据集包含“填充”背景类,这些背景类的对象性不强,与我们的训练数据差异太大,我们降低了它们的输出分数,以专注于前景细化。请注意,细化前景对象仍然有助于背景细化,因为argmax操作会同时考虑置信度得分。表4列出的结果表明,我们的模型产生了更高质量的分割。

5.结论

我们提出CascadePSP,这是一个通用的分割细化框架,用于细化任何输入分割,并在没有任何微调的情况下实现更高的精度。CascadePSP执行高分辨率(高达4K)分割细化,即使我们的模型从未见过任何高分辨率的训练图像。利用在低分辨率数据上训练的单个细化模块而不进行任何微调,所提出的全局步骤细化整个图像,并为后续局部步骤提供足够的图像上下文来执行全分辨率高质量细化。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号