美文网首页
Light-Weight RefineNet

Light-Weight RefineNet

作者: Valar_Morghulis | 来源:发表于2023-02-07 14:53 被阅读0次

Light-Weight RefineNet for Real-Time Semantic Segmentation

BMVC 2018

Vladimir Nekrasov, Chunhua Shen, Ian Reid

https://arxiv.org/abs/1810.03272

https://github.com/drsleep/light-weight-refinenet

https://github.com/DrSleep/light-weight-refinenet/blob/master/models/mobilenet.py    (代码里的结构比正文3.3节结构稍微多一些东西)

摘要:我们认为有效和高效的语义图像分割是一项重要任务。特别是,我们将一个强大的语义分割架构(称为RefineNet)调整为更紧凑的架构,甚至适用于需要高分辨率输入实时性能的任务。为此,我们确定了原始设置中计算成本较高的块,并提出了两种修改,旨在减少参数和浮点运算的数量。通过这样做,我们可以实现两倍以上的模型缩减,同时保持性能水平几乎不变。我们最快的模型在512x512输入的通用GPU卡上经历了从20 FPS到55 FPS的显著加速,在PASCAL VOC测试集上的平均iou性能为81.1%,而我们最慢的模型从原来的17 FPS提升为32 FPS,在同一数据集上显示了82.7%的平均iou。Alternatively,我们展示了我们的方法很容易与轻量级分类网络混合:使用仅包含3.3M个参数且仅执行9.3B个浮点运算的模型,我们在PASCAL VOC上获得了79.2%的平均iou。

1    引言

深度学习的经验成功案例不断增加,几乎每个月都会有新的技术和架构突破。特别是,深度学习已成为计算机视觉、自然语言处理、机器人、音频处理等大多数领域的默认选择[21、22、24、37、40、44、57、61、65、67、69、70、72、75]。然而,这些突破往往以昂贵的计算需求为代价,这阻碍了它们在需要实时处理的任务中的直接应用。这个故事的好部分是,多个研究人员根据经验表明,经常存在大量冗余操作[1,16,17,27,31,36,68],可以(并且应该)利用这种冗余,以获得速度优势,同时保持性能基本不变。这个故事的糟糕之处在于,在大多数情况下,如何利用这种冗余,目前还没有通用的方法。例如,知识蒸馏[1,3,31,58]和修剪[26,27,29,42]等方法需要我们访问已经预训练的大模型,以便训练具有相同(或接近)性能的较小模型。显然,有时这是不可行的。相反,为特定的高分辨率输入场景设计一种新的架构[54,76]限制了同一架构在具有截然不同财产的数据集上的适用性,并且通常需要从头开始进行昂贵的训练。

在这里,我们将自己局限于语义分割的任务,这已被证明是解决场景理解的关键,并已在多个现实世界应用中成功利用,例如医学图像分割[11,59]、道路场景理解[2,71]、空中分割[38,51]。这些应用程序往往依赖于具有高分辨率输入的实时处理,这是大多数现代语义分割网络的致命弱点。

受上述观察的启发,我们旨在以不同的方式处理实时语义分割的任务。特别是,我们在RefineNet[46]上构建了我们的方法,这是一种强大的语义分割架构,可与任何主干网络无缝使用,如ResNet[30]、DenseNet[33]、NASNet[82]或任何其他网络。该架构属于“编码器-解码器”分割网络家族[2,53,54],其中首先对输入图像进行逐步下采样,然后逐步上采样,以恢复原始输入大小。我们选择了这种特定的架构,因为它i)在“编码器-解码器”方法中表现出最佳性能,并且ii)不像利用孔洞卷积的方法那样在最后一层的大特征图上操作[4,5,7,74,77]。由于浮点运算数量的增加,大型特征图的处理严重阻碍了DeepLab[4,5,7]和PSPNet[77]等架构的实时性能。作为一个弱点,由于解码器部分恢复高分辨率输出,“编码器-解码器”方法往往具有更多的参数。在这项工作中,我们通过专门关注解码器来解决实时性能问题,并根据经验表明,参数数量和浮点运算都可以大幅减少,而不会显著降低精度

特别是,i)我们概述了重要的工程改进,这些改进使原始RefineNet中的参数数量减少了50%以上;然后ii)我们精确定位了体系结构中残差块的冗余度,并表明在移除这些块的情况下,性能保持不变。我们对语义分割的三个竞争性基准(PASCAL VOC[18]、NYUDv2[64]和PASCAL Person Part[6,9])以及五个不同的主干网络(ResNet-50、ResNet-101、ResNet-152[30])以及最近发布的NASNet Mobile[82]和MobileNet-v2[60])进行了广泛的实验。前三个主干用于直接比较我们的方法和原始的RefineNet,而后两个主干用于展示我们的方法与主干压缩是正交的,并且我们可以从组合这些方法中进一步受益。

从数量上看,我们最快的ResNet模型在GTX 1080Ti上的512×512大小的输入上实现了55 FPS,同时在PASCAL VOC上具有81.1%的平均iou性能,在NYUDv2上具有41.7%的平均iou,在Person Part上具有64.9%的平均iou。相比之下,我们表现最好的模型,VOC的平均iou为82.7%,NYUDv2的平均iou为44.4%,Person Part的平均iou为67.6%,仍然保持稳定的32 FPS。

所有模型都将公开,以便于在多种应用中使用有效和高效的语义分割。

2    相关工作

语义分割。    早期的语义分割方法依赖于手工制作的特征,如HOG[14]和SIFT[50],结合普通分类器[13,20,62,63]和分层图形模型[39,41,56]。这一直持续到深度学习的复兴,Long等人的一项关键工作[49],其中作者将深度图像分类网络转换为完全卷积网络,能够对不同大小的输入进行操作。此外,通过使用扩张卷积和概率图形模型[4,45,48,74,78],扩展了这一工作范围。其他工作集中于编码器-解码器范例[46,53,54],其中首先对图像进行逐步下采样,然后逐步上采样,以生成与输入相同大小的分割掩模。最近,Lin等人[46]提出了RefineNet,通过在编码器和解码器之间的跳连中添加残差单元来扩展编码器-解码器方法。Zhao等人[77]添加了多尺度池化层,以改善局部和全局(上下文)信息之间的信息流;Fu等人[19]开发了以沙漏方式排列的多个编码器-解码器块[73],并使用DenseNet[33]获得了竞争性结果。流行的基准数据集PASCAL VOC[18]上的当前技术状态属于DeepLab-v3[7](测试集上的平均交集超过并集86.9%)和基于ResNet[30]和Xception[10]的DeepLab-v3+[8](89.0%),相应地,其中作者在孔洞空间金字塔池块(ASPP)[5]内包括批归一化[35]层,使用了大型多标签数据集[66],并在最新版本中添加了解码器。

实时分割。    上面概述的大多数方法要么受到大量参数[46]、大量浮点运算[4、5、7、77]或两者的影响[49、53、54、73]。这些问题构成了在需要实时处理的应用程序中利用此类模型的一个重大缺点。

为了缓解这些问题,有几种特定于任务的方法,例如ICNet[76],其中作者调整PSPNet[77]以逐步处理多个图像尺度。他们在1024×2048图像上达到了30 FPS的速度,在CityScapes[12]的验证集上达到了67%的平均iou,但尚不清楚这种方法是否仍能在具有低分辨率输入的其他数据集上获得稳定的性能。或者,Li等人[43]提出了一种级联方法,其中在级联的每个渐进级别中,通过在中间分类器输出上显式设置硬阈值,仅处理特定部分像素。他们在512×512输入分辨率上显示了14.3 FPS的性能,PASCAL VOC上的平均iou为78.2%[18]。我们还注意到,其他几个实时分割网络一直遵循编码器-解码器的模式,但未能获得适当的性能水平。具体而言,SegNet[2]在尺寸为360×480的输入上实现了40 FPS,CityScapes上的平均iou仅为57.0%,而ENet[54]能够在尺寸为1920×1080的输入上执行20 FPS的推断,CityScapes上平均iou为58.3%。

其他领域的实时推理。    已经提出了多个任务不可知的解决方案来通过压缩来加速神经网络中的推理。当前的方法实现了超过100倍的压缩率[34]。其中,最流行的方法包括量化[23,79,81]、修剪[26,27,29,42]和知识蒸馏[1,3,31,58]。其他值得注意的例子集中在低阶因子分解和分解的思想[17,36],其中通过利用(线性)结构,可以将大的层分解为较小的层。

虽然上述所有方法都被证明在实现显著的压缩率方面是有效的,但必须首先为手头的任务获取一个初始的强大但大型的预训练模型。我们进一步注意到,这些方法可以作为我们方法之上的后处理步骤来应用,但我们将这个方向留给以后的探索。

最后,最近,已经提出了许多新的、轻量级的架构[32,34],经验表明,具有较少参数的模型能够获得可靠的性能。为了强调我们的方法与分类网络设计中的此类进步是正交的,我们使用两种轻量级架构进行了实验,即NASNet Mobile[82]和MobileNet-v2[60],并在很少的参数和浮点运算的情况下显示了竞争性的结果。

3    Lightweight RefineNet

在这里,我们将概述我们的方法,旨在减少原始RefineNet架构的参数和浮点操作的数量,同时保持性能水平不变。

我们首先描述最初的设置,然后继续解释和讨论我们建议进行的更改。

图1:RefineNet结构。(a) 具有用于语义分割的RefineNet的通用网络架构,其中CLF代表单个3x3卷积层, 通道数量等于输出类的数量; (b)-(d)原始RCU、CRP和融合块的概述; (e)-(g)轻量RCU、CRP和融合块。为了简洁起见,我们只可视化CRP块的2个卷积层(而不是原始架构中使用的4个)。注意,如第3.3节所述,我们在最终架构中不使用任何RCU块。Figure 1: RefineNet structure. (a) General network architecture with RefineNet for semantic segmentation, where CLF stands for a single 3x3 convolutional layer with the number of channels being equal to the number of output classes; (b)-(d) general outline of original RCU, CRP and fusion blocks; (e)-(g) light-weight RCU, CRP and fusion blocks. In the interests of brevity, we only visualise 2 convolutional layers for the CRP blocks (instead of 4 used in the original architecture). Note that we do not use any RCU blocks in our final architecture as discussed in Sec. 3.3.

3.1 RefineNet Primer

如上所述,RefineNet架构属于编码器-解码器方法家族。作为编码器主干,它可以重用大多数流行的分类网络;特别是,使用残差网络展示了原始贡献[30]。除了省略最后的分类层之外,该方法不会以任何方式修改基础分类网络。

在解码器部分,RefineNet依赖于两种类型的附加抽象:残差卷积单元(RCU)(图1(b))和链式残差池(CRP)(图2(c))。第一个是原始残差块[30]的简化,没有批量归一化[35],而第二个是多个卷积和池化层的序列,也以残差方式排列。所有这些块都使用3×3卷积和5×5池化以及适当的填充,以便空间大小保持不变。

解码过程从分类器的最后一个输出(具有最低分辨率)通过两个RCU块传播开始,随后是CRP的四个池化块和另外三个RCU,然后将其与倒数第二个特征图一起馈送到融合块(图1(d))。在融合块内,每条路径用3×3卷积卷积并上采样到路径中的最大分辨率。然后两条路径相加,并通过几个RCU、CRP和融合块进行传递,直到达到所需的分辨率(Two paths are then summed up, and analagoulosly further propagated through several RCU, CRP and fusion blocks until the desired resolution is reached.)。最后的卷积层产生得分图。

3.2    更换3x3卷积

我们首先强调,在原始RefineNet的参数数量和浮点运算数量方面,最昂贵的部分源于3×3卷积的广泛使用。因此,我们将重点放在用更简单的替代品取代它们,而不会降低性能。

直观地说,具有更大内核大小的卷积旨在增加感受野大小(和全局上下文覆盖),而1×1卷积只是将每个像素的特征从一个空间局部地转换到另一个空间。我们认为,在RefineNet的情况下,我们根本不需要昂贵的3×3卷积,并且我们能够根据经验证明,用1×1卷积代替它们不会损害性能。此外,我们评估了两种情况下的经验感受野大小[80],没有发现任何显著差异(第8节)。特别是,我们用1×1对应物替换CRP和融合块中的3×3卷积(图1(f-g)),并将RCU修改为具有瓶颈设计的RCU[30](图1)。通过这种方式,我们将参数数量减少了2倍多,FLOP数量减少了3倍多(表1)。

或者,我们可能会回到最近提出的深度可分离卷积[10],这些卷积被证明可以节省大量参数而不牺牲性能,但我们的方法甚至更简单,因为除了最后一个分类层之外,它根本不使用任何3×3卷积。

3.3    省略RCU块

我们继续进行初始实验,并使用PASCAL VOC[18]训练上一节中概述的轻量级架构。我们能够实现接近原始网络性能的性能,此外,观察到移除RCU块不会导致任何精度下降,事实上,RCU块中的权重几乎完全饱和。

为了确认这只发生在轻量级的情况下,我们探索了在原始RefineNet架构中丢弃RCU块,我们在同一数据集上经历了超过5%的性能下降。我们认为,这是由于RCU块在1×1卷积机制中是冗余的,因为增加上下文覆盖的唯一重要目标基本上是通过CRP内的池化层来实现的。为了支持这一说法,我们进行了一系列消融实验,稍后将在第5.2节中介绍。

我们的最终架构不包含任何RCU块,仅依赖于CRP块,其中包含1×1卷积和5×5最大池,这使得我们的方法非常快速和轻量级。

3.4    适应不同主干

RefineNet架构的一个显著的实际好处是,只要主干网内有几个下采样操作,它就可以与任何主干网混合(这是大多数SOTA分类器的情况)。因此,为了使用任何其他模型应用RefineNet架构,不需要进行任何具体更改。特别是,在实验部分,我们展示了其使用高效NASNet Mobile[82]和MobileNet-v2[60]网络的适应性;我们仍然可以通过有限的参数和浮点运算实现稳定的性能。

4    实验

在实验部分,我们的目标是通过经验证明,我们能够i)实现与原始RefineNet相似的性能水平,同时ii)显著减少参数数量,iii)大幅提高前向传播速度;以及iv)强调使用其他架构应用我们的方法的可能性。

为此,我们考虑了三个分割数据集,即NYUDv2[64]、PASCAL VOC[18]和PASCAL Person-Part数据集[6,9],以及五个分类网络,即ResNet-50、ResNet-101、ResNet-152[30]、NASNet Mobile[82]和MobileNet-v2[60](仅针对PASCAL VOC),所有这些网络都已在ImageNet上进行了预训练[15]。作为一般惯例,我们报告了每个基准上的平均iou[18]。补充材料中给出了PASCAL上下文[52]和CityScapes[12]的其他结果。

我们在PyTorch[55]中进行了所有实验,并使用动量随机梯度下降进行训练。对于所有残差网络,我们从5e-4的初始学习率开始,对于NASNet移动和MobileNet-v2,我们从1e-3的学习率开始。我们在训练期间冻结了批量归一化统计数据。

对于基准测试,我们使用了一个8GB RAM、Intel i5-7600处理器和一个CUDA 9.0和CuDNN 7.0下的GT1080Ti GPU卡的工作站。为了公平地比较运行时,我们在PyTorch中重新实现了原始的RefineNet。我们使用随机输入计算100次正向传递,并对结果进行平均;在报告时,我们提供了平均值和标准偏差值。

NYUDv2。    我们首先在NYUDv2数据集上进行了一系列初始实验[25,64]。该数据集包括1449张RGB-D图像和40张分割类标签,其中795张用于训练,654张用于测试。我们不会以任何方式利用深度信息。我们在100和200个epoch后将学习率降低一半,并保持训练直到300个epoch,或更早收敛。

表2提供了我们的定量结果以及原始RefineNet的结果,以及该数据集上的其他竞争方法。我们注意到,对于所有ResNet网络,我们能够与原始RefineNet的性能紧密匹配,而原始参数只有一小部分。这进一步导致了显著的两倍加速。

Person-Part    PASCAL人体部分数据集[6,9]由1716张训练图像和1817张验证图像组成,其中包含6个语义类,包括头部、躯干和上/下肢/手臂,以及背景。我们遵循与NYUDv2相同的训练策略,并在表2中提供了结果。再次,我们实现了对原始模型结果的分析。

PASCAL VOC    我们继续使用语义分割的标准基准数据集PASCAL VOC进行实验[18]。该数据集由4369幅图像组成,包含20个语义类和背景,其中1464幅分别构成训练集、1449幅验证和1456幅测试。正如通常所做的,我们使用BSD[28]中附加注释的VOC图像以及MS COCO[47]中的图像来增强它。

我们使用相同的策略来训练所有网络,但学习率不同,如上所述:特别是,我们在COCO训练20个阶段后和BSD训练50个阶段后将学习率降低一半,并保持训练直到总共200个阶段,或者直到验证集的准确性停止提高。

表3中给出了我们对验证和测试集的定量结果以及原始RefineNet的结果。我们再次注意到,对于所有ResNet网络,我们实现了与原始RefineNet相当的性能;对于NASNet Mobile和MobileNet-v2,我们优于MobileNet-v1+DeepLab-v3和MobileNet-v2+DeepLab-v3方法[60],这与我们的方法密切相关。定性结果如图2所示。

5    讨论

如上所述,我们能够通过省略超过一半的原始参数来获得类似的结果。这就提出了这样一个问题:如何以及为什么会发生这种情况。我们进行了一系列实验,旨在为这一问题提供一些见解。补充材料中提供了更多细节。

5.1    感受野大小

首先,我们考虑感受野大小的问题。直观地说,丢弃3×3卷积会显著损害原始架构的感受野大小。尽管如此,我们注意到,由于i)RefineNet的跳连设计结构,低级特征与高级特征相加,以及ii)保留负责收集上下文信息的CRP块,我们没有遇到这种情况。

特别是,我们探索了在PASCAL VOC上预训练的轻量级RefineNet-101中的经验感受野(ERF)大小[80]。在CRP之前,ERF集中在小物体部分周围,几乎不覆盖物体(图3)。CRP块倾向于扩大ERF,而与较低层特征的相加进一步产生显著更大的激活轮廓。

5.2 表示能力

尽管RCU块似乎不影响网络的感受野大小,但它可能仍然负责产生分割和分类的重要特征。

为了评估是否确实如此,我们通过在RefineNet101的最低分辨率块中添加多标签分类和分割头来进行消融实验,该块在PASCAL VOC上预训练,1)RCU之前,2)RCU之后,3)CRP之后。我们修复了训练网络的其余部分,并使用VOC数据集的1464张训练图像分别对这些头部进行微调。我们评估了VOC验证子集的所有结果。

如表4所示,CRP是精确分割和分类的主要驱动力,而RCU块仅略微改善了结果。

6    结论

在这项工作中,我们解决了将现有的语义分割体系结构重新考虑为适合实时性能的体系结构的问题,同时保持性能水平基本不变。我们通过对现有网络提出简单的修改,并强调哪些构建块对于最终结果来说是多余的,从而实现了这一点。我们的方法可以与任何数据集的任何分类网络一起应用,并且可以进一步受益于使用轻量级主干网络和其他压缩方法。在数量上,我们能够与原始网络的性能紧密匹配,同时显著超过其运行时间,甚至在512×512输入上获得55 FPS(从最初的20 FPS)。除此之外,我们还证明了在分割网络的解码器部分不需要使用具有大核卷积,我们将在未来的工作中进一步讨论这一主题。

附录:

7    实验

除了主要部分中概述的实验外,我们还评估了我们在PASCAL上下文[52]和CityScapes[12]上的方法。

PASCAL上下文。    该数据集包括60个语义标签(包括背景),包括4998个训练图像和5105个验证图像。在训练过程中,我们分别在50个时期后和100个时期后将学习率减半,并保持训练直到200个时期或更早的收敛。我们不预先训练PASCAL VOC或COCO。

我们的定量结果如表5所示,定性结果如图4所示。

CityScapes。    最后,我们将注意力转向CityScapes数据集[12],该数据集包含5000张具有19个语义类的高分辨率(1024×2048)图像,其中2975张用于训练,500张用于验证,1525张用于测试。对于上下文,我们使用相同的学习策略。我们以ResNet-101为主干的单尺度模型能够在测试集上实现72.1%的平均iou,这与多尺度评估的原始RefineNet结果73.6%接近[46]。

视觉结果如图5所示。

PASCAL Person-Part.    有关定量结果,请参阅正文。我们在图6中提供了定性结果。

NYUD    有关定量结果,请参阅正文。我们在图7中提供了定性结果。

8    感受野大小

为了量化为什么丢弃3×3卷积不会导致显著的性能下降,我们考虑了经验感受野(ERF)大小的问题[80]。直观地说,丢弃3×3卷积会显著损害原始架构的感受野大小。尽管如此,我们注意到,由于i)RefineNet的跳连设计结构,低级特征与高级特征相加,以及ii)保留CRP块,我们没有经历过这种情况。

除了正文中的结果之外,我们还比较了原始RefineNet-101和RefineNet-LW-101之间最后一层(分类)的ERF,这两个层都在PASCAL VOC上进行了预训练。从图8中可以注意到,两个网络都表现出语义相似的激活轮廓,尽管原始架构倾向于产生较少的锯齿状边界。

相关文章

网友评论

      本文标题:Light-Weight RefineNet

      本文链接:https://www.haomeiwen.com/subject/nsxfkdtx.html