图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)

作者 | 小马

编辑 | CV君

报道 | 我爱计算机视觉(微信id:aicvml)

【写在前面】

为了获得更高的精度,深卷积神经网络(CNN)通常具有复杂的设计,具有许多卷积层和可学习的参数。为了减轻在移动设备上部署网络的成本,最近的工作开始研究在预定义的结构中挖掘冗余的模块和参数。然而,目前CNN的输入分辨率冗余尚未得到充分研究。在本文中,作者观察到,使用相同的神经网络,精确预测不同图像的最小分辨率是不同的

为此,作者提出了一种新的动态分辨率网络(DRNet),其中分辨率是根据每个输入样本动态确定的 。基于此,作者提出了一个具有可忽略计算成本的分辨率预测器,并与分类网络一起进行了优化。在实现上,预测器学习的最小分辨率可以保持甚至超过每个图像原始识别精度。在推断过程中,每个输入图像将调整到其预测的分辨率,以最小化总体计算负担。

然后,作者在几个基准网络和数据集上进行了广泛的实验。结果表明,本文的DRNet可以嵌入任何现成的网络结构中,从而大大降低计算复杂度。例如,与ImageNet上的原始ResNet-50相比,DRNet在计算量减少约34%的情况下实现了类似的性能,而在计算量减少10%的情况下,DRNet的精度提高了1.4%。

1. 论文和代码地址

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(1)

Dynamic Resolution Network

论文地址:https://arxiv.org/abs/2106.02898

代码地址:未开源

2. Motivation

在算法、计算能力和大规模数据集的发展下,深卷积神经网络(CNN)在各种计算机视觉任务中取得了显著的成功。然而,卓越的性能伴随着巨大的计算成本,这使得CNN难以部署在移动设备上。随着实际应用对CNN的需求不断增加,降低计算成本,同时保持神经网络的性能势在必行。

最近,研究人员致力于研究模型压缩和加速方法,包括网络剪枝、低比特量化、知识蒸馏和轻量级网络设计。网络剪枝 旨在通过一定的标准剪枝对模型性能不敏感的滤波器进行剪枝;低比特量化 指用低比特值来量化权重参数和激活值;知识蒸馏 将教师模型学习到的知识转移到学生模型从而来提高性能;轻量级网络设计 通过设计一些轻量级操作(如depth-wise convolution)来构建新的网络。

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(2)

输入分辨率是影响CNN计算量和性能的重要因素。对于同一网络,更高的分辨率通常会导致更大的FLOPs和更高的精度。虽然分辨率较小的模型性能较低,但FLOPs也较小,这能减轻CNN的计算负担。作者用预训练好的ResNet50测试了一些不同分辨率下的图像,并计算了每个样本正确预测所需的最小分辨率,如上图所示。“简单”样本 ,如前景明显的panda,可以在低分辨率和高分辨率下正确分类。

“复杂”样本 ,如前景与背景混合的damselfly,只能在高分辨率下准确预测。这意味着对于那些简单的样本,低分辨率计算可以节省大量的计算成本。这一现象也与人类感知相兼容,一些样本仅在模糊模式下即可轻松理解,而其他样本则需要在清晰模式下才能看到。

在本文中,作者提出了一种动态网络的解决方案(DRNet),它可以动态调整每个样本的输入分辨率,以便进行有效的推理。在DRNet中,不同的样本需要不同的分辨率才能给出正确的预测。作者引入了一个分辨率预测器,为每个输入图像动态选择一个合适的分辨率,然后将图像调整到预测的分辨率,用于图片分类。

具体实现上,作者将几个不同的分辨率设置为候选分辨率,并将图像输入到分辨率预测器中,以生成候选分辨率的概率分布作为输出。该分辨率预测器以简洁的方式设计,由几个卷积层和全连接层组成。分辨率预测器与分类网络端到端联合训练。通过这个简单而有效的框架,让输入样本动态地选择合适的分辨率,以进行准确而有效的推理。对于简单样本可以节省大量额外的冗余计算成本,对于复杂样本也可以保持准确的预测能力。同时,该方法与网络结构解耦,可以推广到任何网络中。

3. 方法3.1 Dynamic Resolution Network

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(3)

为了能够在不同的样本在训练和测试过程中有不同的分辨率,作者提出了一种实例感知分辨率的选择方法。如上图所示,本文的模型主要由两部分组成:用于分类的基础网络 ,如ResNet和EfficientNet,以及分辨率预测器 ,该预测器输出的分辨率在性能和计算上都是高效的。将一个样本送入改pipeline时,分辨率预测器首先对其进行预处理,并为输入图像输出合适的分辨率r。有了这个合适的分辨率,图像会相应地调整大小,然后被送入基本网络以继续分类。这种方式可以节省大量冗余计算,并保持高性能。分辨率预测器和基础网络在训练过程中进行端到端优化。

Resolution Predictor

分辨率预测器以轻量级的方式来设计,用来预测达到较高性能的最低分辨率,从而来降低网络的计算量。一方面,分辨率预测器的目标是通过推断候选分辨率的概率分布,找到适当的实例感知分辨率 。但是,在1×1到224×224之间有大量的候选分辨率,这使得分辨率预测器很难在这么大的分辨率范围内准确搜索,并且这也是毫无意义的。

作为简化策略和实际需求,作者选择m个候选分辨率以缩小搜索范围。另一方面,必须保持分辨率预测器的模型尽可能小,因为它会带来额外的FLOPs,如果额外引入的计算量超过低分辨率下节省的计算量,则实现这样一个模块就变得没有意义 。因此,作者设计了由几个卷积层和全连接层组成的分辨率预测器,以完成分辨率分类任务。分辨率预测器的预处理如下所示:

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(4)

其中是分辨率预测器的输入样本,是候选分辨率的数量,是分辨率预测器的输出,表示每个候选分辨率的概率。然后,选择与最高概率的分辨率作为分类器的分辨率。由于从分辨率预测器的软输出到离散分辨率调整操作的过程不支持端到端的训练,因此作者采用Gumbel Softmax模块将软决策转化为硬决策,通过应用Gumbel Softmax trick解决不可微的问题:

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(5)

对于训练和测试过程,分辨率预测器首先做出决策,然后将具有选定分辨率的输入图片送入分类网络中。由于在一个Batch中有m种分辨率,作者将一个大Batch划分为m个小Batch。不同BatchNorm层处理不同分辨率的样本,这样,每个BatchNorm层只需统计每个分辨率下对应的样本数即可。

Resolution-aware BN

作者在本文的框架中只采用一个分类器网络,这个分类器网络需要处理多分辨率输入,这就会导致两个问题。第一个问题是,全连接层将无法处理不同的输入分辨率 。这个问题可以通过全局平均池来解决,因此,可以在一个网络中处理多个分辨率的数据。

另一个问题存在于BatchNorm(BN)层中 。BN通过通道维度的归一化使得模型可以更快、更稳定的收敛。然而,不同分辨率下的均值和方差是不兼容的。由于BN层包含的参数数量可以忽略不计,因此作者使用分辨率感知的BN层。作者对每个分辨率的BN层进行解耦,并选择相应的BN层来归一化特征:

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(6)

其中,是一个非常小的数,来防止分母为0;和是不同分辨率下的均值和方差;和是不同分辨率下可学习的缩放权重和bias。由于共享卷积对性能不敏感,所有卷积的参数在不同分辨率下还是共享的。

3.2 OptimizationLoss Function

基础分类器和分辨率预测器联合优化。损失函数包括两部分:用于图像分类的交叉熵损失 和用于限制计算预算的FLOPs损失

给定一个预训练的基本图像分类网络F,它将图像X作为输入,并输出图像分类的概率预测,接下来优化分辨率预测器,并同时微调预训练的分类器,使他们可以联合优化。对于输入图像X,首先将其调整为m个候选分辨率,如。然后使用分辨率预测器来输出每张图片的分辨率概率向量,并使用Gumbel-Softmax trick将软分辨率概率转换为one-hot形式。根据来选择相应大小的图像:

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(7)

所选分辨率的识别结果为。交叉熵损失在和ground-truth标签之间执行,如下所示:

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(8)

如果仅使用交叉熵损失,分辨率预测器将收敛到次优点,并倾向于选择最大分辨率,因为分辨率最大的样本通常对应相对较低的分类损失。虽然低分辨率图像的分类置信度相对较低,但预测是正确的,且需要更少的FLOPs。为了降低计算成本并平衡不同分辨率的选择,作者提出了FLOPs约束正则化来指导分辨率预测器的学习:

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(9)

其中,是实际的FLOPs,是样本的期望,是目标FLOPs。通过这个正则化,如果平均FLOPs值太大,将导致惩罚,从而使得分辨率预测器预测性能充分(预测正确)和成本有效(分辨率低)的分辨率。

最后,总损失是分类损失和分辨率波动正则化项的加权总和:

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(10)

其中,是一个超参数,用于平衡和的大小。

Gumbel Softmax trick

由于在从分辨率预测器的连续输出到离散分辨率选择的过程中存在不可微问题,作者采用Gumbel Softmax trick在反向传播过程中使离散决策可微。分辨率预测器给出了候选分辨率的概率,然后可以使用下面的方式来离散化候选分辨率选择:

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(11)

其中,是通过对从均匀分布中的样本应用两次函数得到的Gumbel噪声。

在训练期间,one-hot的导数由连续且可微的Gumbel softmax函数近似:

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(12)

其中τ是温度参数。

4.实验4.1. ImageNet-100 Experiments

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(13)

上表展示了在ImageNet-100上,DRNet和baseline(ResNet-50)的对比结果,可以看出动态自适应的多分辨率和分辨率感知的BN层都有利于性能的提升。

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(14)

上表展示了不同和的实验结果,更高的可以达到更高的性能,但也会带来更多的计算量;在0.2时可以达到比较好的结果。

4.2. ImageNet-1K Experiments

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(15)

上表展示了DRNet和baseline在ImageNet-1K的实验结果,可以看出,FLOPs降低10%的时候,模型的准确率居然还提升了。

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(16)

上表比较了本文方法和其他模型压缩方法的结果对比,本文的方法是唯一压缩之后还能提升性能的。

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(17)

为了验证动态分辨率的有效性,作者采用了随机分辨率进行了实验,如上表所示,可以看出DRNet的性能比他们更高(不过这里计算量也更高)。

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(18)

上表展示了DRNet的真实加速,这是通过在Intel(R) Xeon(R) Gold 6151 CPU上测量前向传播的时间获得的。DRNet远远超过ResNet-50。

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(19)

上表展示了动态分辨率应用在MobileNet上时的结果,可以看出本文的方法对于轻量级网络也是有效的。

4.3. Visualization

图像处理怎么计算最大灰度值(用多大分辨率的图像做分类更适合)(20)

从上图可以看出,更大分辨率的图片大多是复杂的图片,更小分辨率的图片往往是简单的图片。

5. 总结

在本文中,作者发现在实现相同精度的情况下,不同样本可以具有不同的最小分辨率。因此,对于一些较简单的样本,在较低分辨率下可以节省大量的计算成本。为了使CNN有效预测,作者提出了一种新的动态分辨率网络,用于动态选择分辨率,使得在性能和计算量都能达到较好的水平。然后将输入图片调整为预测分辨率,并输入到分类器中,在该分类器中,作者使用分辨率感知BN层替换每个BN层,以适应多分辨率输入。在各种网络上的广泛实验证明了DRNet的有效性。

个人认为,这篇文章和黄高老师在ICLR2018上的Multi-Scale DenseNet和NIPS2021上的Dynamic Vision Transformers的Motivation很像,都是通过根据图像的内容来自适应的进行对一些部分(网络深度、网络结构或者分辨率)进行动态调整,从而来达到性能和计算量的平衡。不过这篇文章还能够通过减少分辨率来提升性能,这一点还是挺惊喜的。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页