查看原文
其他

干货!仅有 100k 参数的高效显著性检测方法

程明明、 颜水成 AI科技大本营 2020-12-18

作者 | 南开大学 程明明、依图科技 颜水成

译者 | 刘畅 责编 | Carol

封图 | CSDN 下载自视觉中国

显著性目标检测模型通常需要花费大量的计算成本才能对每个像素进行精确的预测,因此这使得其几乎不适用于低功耗的设备。

本文旨在通过提高网络计算效率来缓解计算花费与模型性能之间的矛盾。本文提出了一种灵活的卷积模块,即广义的OctConv(generalized OctConv, gOctConv),以有效的利用级内和跨级的多尺度特征,同时通过一种新颖的动态权重衰减方案来减少特征的冗余。

这种有效的动态权重衰减方案可稳定地提高训练期间参数的稀疏性,支持gOctConv中每个尺度的可学习通道数,从而可在性能下降忽略不计的情况下,减少80%的参数。利用gOctConv,本文构造了一个非常轻量的模型,即CSNet,该模型在公开的显著性检测基准数据集上,仅使用大型模型约0.2%的参数(100k),即可获得相同的性能。源代码会在文末公开。

 

引言

 

显著性目标检测(SOD)是一项非常重要的计算机视觉任务,它在图像检索,视觉跟踪和弱监督语义分割中有多种应用。尽管基于卷积神经网络(CNN)的SOD方法已经取得了很大的进步,但这些方法大多数都集中在通过利用精细细节和全局语义,注意力以及边缘信息来提升最新技术(SOTA)的性能。

尽管这些模型的性能十分出色,但它们通常非常耗费资源,因此几乎不适用于存储/计算能力有限的低功耗设备。如何构建具有SOTA性能的超轻量级SOD模型是一个重要但研究较少的领域。

SOD任务需要为每个图像像素生成准确的预测分数,因此既需要大规模的高级特征表示以正确定位显著对象,又需要精细的低级特征表示以进行精确的边界细化。建立超轻量级的SOD模型面临两个主要挑战。

首先,当高级特征的低频特性满足显著性图的高输出分辨率时,可能会出现严重的冗余。其次,SOTA 的SOD模型通常依赖ImageNet预训练的模型来提取特征,而这些特征提取本身就是十分耗费资源的。

最近,Chen等人也注意到了低频特征的空间冗余问题。为了替代普通的卷积,他们设计了一个OctConv运算来处理在低空间分辨率上变化较慢的特征图,从而降低了计算成本。但是,直接使用OctConv去减少SOD任务中的冗余问题仍然面临两个主要的挑战。(1)仅利用OctConv中的低和高分辨率两个维度,不足以完全减少SOD任务中的冗余问题,SOD任务比分类任务需要更强的多尺度表征能力。(2)在OctConv中,每个尺度的通道数是手动选择的,由于SOD任务需要的类别信息较少,因此需要花费大量努力为显着性模型做出重新调整。

在本文中,作者通过在以下几个方面进行扩展,提出了一个广义上的OctConv(gOctConv),用于构建极轻量的SOD模型。(1)可以灵活地从级内和跨级特征中获取任意数量的尺度输入,可以实现更大范围的多尺度表示。(2)本文提出了一种动态权重衰减方案,以支持每种尺度下可学习的通道数,从而使得在性能几乎无下降的情况下,减少80%的参数。

得益于gOctConv的灵活性和效率,本文提出了一个高度轻量级的模型CSNet,该模型充分研究了级内和跨级的多尺度特征。为了参数数量可以非常少,本文的CSNet可以从头开始直接进行训练,而无需ImageNet进行预训练,从而避免了不必要的特征表示。总而言之,作者在本文主要有两个贡献: 

  • 本文提出了一种灵活的卷积模块,即gOctConv,它可以有效地利用级内和跨级的多尺度特征来进行SOD任务,同时通过一种新颖的动态权重衰减方案来减少表征冗余。

  • 利用gOctConv,本文建立了一个非常轻量级的SOD模型CSNet,该模型在公开的SOD基准上,相较于SOTA的大型模型,可以在仅使用约0.2%的参数下(100k),取得相似的性能。


方法


1.方法概述

OctConv最初的设计仅是为替代传统卷积单元,它在一个阶段内引入高/低两个尺度进行卷积操作。但是,一个阶段只有两个尺度是不能引入SOD任务所需的足够的多尺度信息。因此,作者提出了一种广义的OctConv(gOctConv),如图2所示。作为原始OctConv的通用版本,gOctConv主要从以下几个方面进行了改进:

  • 任意数量的输入和输出尺度可以支持更大范围的多尺度表示。

  • 除了级内的特征外,gOctConv还可以从特征提取器以任意比例处理跨级的特征。

  • gOctConv通过本文提出的动态权重衰减方案可以学习每个尺度的通道数。

  • 可以关闭跨尺度的特征交互,提升灵活性。在下面的轻量模型设计中,本文将详细介绍gOctConv的不同实例。

 

2.轻量级模型设计

如下图所示,本文提出的轻量级网络是由特征提取器和跨阶段的融合部分组成,可同时处理多个尺度的特征。特征提取器与本文提出的层内多尺度块(即ILBlocks)堆叠在一起,并根据特征图的分辨率分为4个阶段,每个阶段分别具有3、4、6和4个ILBlock。由gOctConvs组成的跨阶段融合部分会处理来自特征提取器各阶段的特征以获得高分辨率的输出。 

其中gOctConv用于在ILBlock中引入多尺度。gOctConv通过消除跨尺度的运算,使每个输入通道对应于具有相同分辨率的输出通道。每个尺度内的depthwise操作可进一步节省计算成本。ILBlock由一个原始OctConv和两个3×3 gOctConv组成,如上图所示。原始OctConv会与两个尺度进行交互,而每个尺度由gOctConvs提取特征。块中的多尺度特征将分别进行处理和交互。每个卷积后面紧跟着BatchNorm和PRelu。

为了保持高的输出分辨率,常规方法会在特征提取器的高层语义上进行操作,这不可避免地增加了计算冗余。相反,本文仅使用gOctConvs融合来自特征提取器各阶段的多尺度特征,并生成高分辨率输出。作为效率和性能之间的折衷,仅使用了后三个stage的特征。gOctConv 1×1将每个阶段最后一次转换的特征作为输入,并进行跨阶段卷积以输出具有不同比例的特征。为了在粒度级别上提取多尺度特征,特征的每个尺度都由一组具有不同扩展率的并行卷积处理。

3.动态权重衰减

作者建议在训练过程中利用本文提出的动态权重衰减方法,为gOctConv中的每个尺度获取可学习的通道数。动态权重衰减可在引入稀疏性的同时保持通道之间的权重分布稳定,从而有助于修剪算法消除冗余通道。具体的算法过程如下 


实验


1.基本设置

本文方法是基于PyTorch框架。对于轻量级模型,本文使用Adam优化器,批处理大小为24,从头开始训练300个epoch。在没有ImageNet预训练的情况下,CSNet仍可以达到与基于预训练主干的大模型相当的性能。最初将学习率设置为1e-4,然后在200个epoch和250个epoch时衰减10倍。本文仅使用了随机翻转和裁剪的数据增强。gOctConvs之后的BatchNorms权重衰减,作者建议使用动态的权重衰减替代,默认权重为3,而其他权重的权重衰减默认设置为5e-3。

训练数据集是DUST-TR,并在几个常见的测试集上进行评价,包括ECSSD,PASCAL-S,DUT-O,HKU-IS,SOD和DUTS-TE。

2.实验结果

图5显示了使用本文提出的轻量级CSNet进行显著性检测的可视化结果。

3.固定通道数 VS 可学习的通道数

特征提取器仅由ILBlocks组成。使用固定的参数,并仅调整ILBlocks的gOctConvs中高分辨率/低分辨率特征的通道数分配比例。如表格1所示,就F-measure而言,CSNet-5 / 5的F值比特征提取器3/1高出1.4%。即使在极端情况下,仅具有低分辨率功能的CSNet-0 / 1的性能也比具有所有高分辨率功能的提取器1/0多44%的FLOPs。但是,手动调整具有不同分辨率的特征通道数的分割比例可能在性能和计算成本之间仅能达到次优。

如表格2所示。ResNet + CSF仅使用53%的参数和21%的FLOP达到与ResNet + PoolNet相似的性能。gOctConvs可以在主干的不同阶段获得高分辨率和低分辨率的特征,从而获得高分辨率输出,同时节省了大量计算资源。

 

4.运行时间

CSNet的设计初衷是轻量级且可以高效地执行SOD任务。因此本文在i7-8700K CPU的单核上使用224×224的图像测试了运行时间。与大模型相比,本文提出的CSNet具有超过x10的加速。

与为其他任务设计的模型相比,CSNet以相似的速度实现了F-measure最高6%的增长。但是,由于当前的深度学习框架尚未针对原始的OctConvs和本文的gOctConvs进行优化,因此FLOPs与运行时间之间仍然不具有很强的关系。

 

总结


在本文中,作者提出了一种具有更大灵活性的广义OctConv,可以有效利用级内和跨级的多尺度特征,同时通过一种新颖的动态权重衰减方案来减少冗余。动态权重衰减方案可在通道之间保持稳定的权重分布,并在训练过程中稳定提高参数的稀疏性。

动态权重衰减支持学习gOctConvs中每个尺度的通道数,从而减少了近80%的参数,而性能下降却忽略不计。本文建立了一个非常轻量级的模型CSNet,该模型在公开的显著性物体检测基准上,相较于大模型,可在仅使用约0.2%参数(100K)的情况下,保持相似的性能。 

论文:https://arxiv.org/abs/2003.05643

代码:https://github.com/MCG-NKU/Sal100K

推荐阅读
你点的每个“在看”,我都认真当成了AI
Modified on

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存