AUTO SEG-LOSS: 搜索度量替代语义分割
论文链接:https://arxiv.org/abs/2010.07930
项目链接:https://github.com/fundamentalvision/Auto-Seg-Loss
ABSTRACT
设计合适的损失函数是训练深度网络的关键。特别是在语义分割领域,针对不同的场景提出了不同的评价指标。尽管广泛采用的交叉熵损失及其变体取得了成功,但损失函数和评估指标之间的不一致会降低网络性能。同时,手动设计每个特定度量的损失函数需要专业知识和大量人力。在本文中,我们提出通过搜索每个度量的可微代理损失来自动设计度量特定的损失函数。我们用参数化函数代替度量中的不可微操作,并进行参数搜索以优化损失曲面的形状。引入两个约束来正则化搜索空间,提高搜索效率。在PASCAL VOC和Cityscapes上进行的大量实验表明,搜索的代理损失始终优于手动设计的损失函数。搜索损失可以很好地推广到其他数据集和网络。
1 INTRODUCTION
损失函数是训练深度网络不可缺少的组成部分,因为它们驱动着具有特定评估指标的各种应用的特征学习过程。然而,大多数指标,如常用的0-1分类误差,其原始形式是不可微的,无法通过基于梯度的方法直接优化。经验表明,交叉熵损失可以作为一种有效的替代目标函数用于各种分类任务。这种现象在图像语义分割中尤其普遍,其中已经设计了各种评估指标来解决专注于不同场景的不同任务。一些指标衡量的是整个图像的准确性,而另一些指标则更多地关注分割边界。尽管交叉熵及其变体在许多指标上都能很好地工作,但网络训练和评估之间的不一致仍然存在,并不可避免地导致性能下降。
通常,在语义分割中有两种设计度量特定损失函数的方法。第一种是修改标准交叉熵损失以满足目标度量(Ronneberger et al ., 2015; Wu et al, 2016)。另一种是为特定的评估指标设计其他聪明的替代损失(Rahman & Wang, 2016; Milletari et al, 2016)。尽管有了改进,但是这些手工制作的损失需要专业知识,并且不能简单地扩展到其他评估指标。
与手动设计损失函数相比,另一种方法是找到一个框架,该框架可以自动地为不同的评估指标设计适当的损失函数,这是由AutoML的最新进展推动的(Zoph & Le, 2017; Pham et al., 2018; Liu et al., 2018; Li et al, 2019)。尽管自动化损失函数的设计过程很有吸引力,但将AutoML框架应用于损失函数也不是很简单。典型的AutoML算法需要适当的搜索空间,一些搜索算法在其中进行。先前的搜索空间要么不适合损失设计,要么过于笼统而无法有效搜索。最近Li等人(2019)和Wang等人(2020)提出了基于现有手工制作的损失函数的搜索空间。算法搜索最佳组合。然而,这些搜索空间仍然局限于交叉熵损失的变体,因此不能很好地解决不对齐问题。
在本文中,我们提出了一个搜索主流不可微分割度量的代理损失的通用框架。关键思想是我们可以根据评价指标的形式来构建搜索空间。这样,培训标准和评价指标就统一了。同时,搜索空间足够紧凑,可以进行高效的搜索。具体地说,通过将大多数度量中不可微部分的单热预测和逻辑运算替换为它们的可微近似,将度量松弛到连续域。引入参数化函数来逼近逻辑运算,保证了损失面光滑的同时又能准确训练。损失参数化函数可以是任意族,定义在[0, 1]。对选择的族进一步进行参数搜索,在给定评价指标的验证集上优化网络性能。引入两个基本约束来正则化参数搜索空间。我们发现搜索到的代理损失可以有效地推广到不同的网络和数据集。在Pascal VOC (Everingham et al, 2015)和Cityscape (Cordts et al, 2016)上进行的大量实验表明,我们的方法提供的准确性优于为单个分割指标专门设计的现有损失,并且计算开销较小。
我们的贡献可以总结如下:1)我们的方法是主流分割指标的代理损失搜索的第一个通用框架。2)提出了一种有效的参数正则化和参数搜索算法,该算法可以在较小的计算开销下找到优化目标度量性能的损失代理。3)通过所提出的搜索框架获得的替代损失促进了我们对损失函数设计的理解,并且它们本身是新的贡献,因为它们不同于现有的专门为单个指标设计的损失函数,并且可以在不同的数据集和网络之间转移。
2 RELATED WORK
损失函数设计是深度网络训练中的一个活跃话题(Ma, 2020)。在图像语义分割领域,交叉熵损失被广泛应用(Ronneberger et al ., 2015; Chen et al, 2018)。但交叉熵损失是为了优化全局精度度量而设计的(Rahman & Wang, 2016; Patel et al, 2020),这与许多其他指标不一致。为设计合适的损失函数进行了大量的研究。对于mIoU度量,许多工作(Ronneberger et al ., 2015; Wu et al ., 2016)纳入类频率以缓解类不平衡问题。对于边界F1分数,边界区域的损失加权上升(Caliva et al ., 2019; Qin et al ., 2019),从而提供更准确的边界。这些作品仔细分析了具体评价指标的性质,并以完全手工制作的方式设计了损失函数,这需要专业知识。相比之下,我们提出了一个统一的框架来推导各种评估指标的参数化代理损失。其中,通过强化学习自动搜索参数。用搜索的替代损失训练的网络提供的准确性与那些最好的手工损失相当甚至更好。
不可微评价指标的直接损失优化早已被研究用于结构支持向量机模型(Joachims, 2005; Yue et al, 2007;Ranjbar et al, 2012)。然而,这些方法不能得到梯度的w.r.t.特征。因此,它们不能通过反向传播来驱动深度网络的训练。Hazan等(2010)提出用梯度下降法优化结构支持向量机,利用损失增强推理得到评价指标期望的梯度。Song等人(2016)进一步将这种方法扩展到非线性模型(例如,深度神经网络)。然而,梯度下降算法每一步的计算量都非常高。尽管Song等人(2016)和Mohapatra等人(2018)已经为平均精度(AP)指标设计了高效的算法,但其他指标仍然需要专门设计的高效算法。相比之下,我们的方法对于主流分割指标是通用的。由于具有良好的泛化性,我们的方法只需要对一个特定的度量执行一次搜索过程,之后可以直接使用搜索到的代理损失。将搜索损失应用于训练网络只带来很少的额外计算成本。
引入代理损失来推导不可微评价指标的损失梯度。通常有两种设计替代损失的方法。首先是手工构造一个近似的可微度量函数。对于IoU度量,Rahman & Wang(2016)提出使用可微形式的softmax概率分别近似交集和并,并显示其在二值分割任务上的有效性。Berman等人(2018)通过凸Lovasz扩展将mIoU从二进制输入扩展到连续域,进一步处理多类分割问题,他们的方法在“多类分割任务”中优于标准交叉熵损失。对于F1测度,Milletari等人(2016)通过用softmax概率代替二值预测,提出了骰子损失作为直接目标。尽管取得了成功,但它们并不适用于其他指标。
第二个解决方案是训练一个网络来近似目标度量。Nagenda等人(2018)训练一个网络来近似mIoU。Patel等人(2020)设计了一个神经网络来学习预测的嵌入和除分割以外的任务的基本事实。这方面的研究侧重于最小化目标度量的近似误差。但不能保证它们的近似为训练提供良好的损失信号。这些近似损失仅用于后调优设置,仍然依赖于交叉熵预训练模型。我们的方法有很大的不同,因为我们搜索代理损失来直接优化应用程序中的评估指标。
AutoML是机器学习长期追求的目标(He et al, 2019)。最近,AutoML的一个子领域,神经架构搜索(NAS),由于其在自动化神经网络架构设计过程中的成功而引起了广泛关注(Zoph & Le, 2017; Pham et al, 2018; Liu et al, 2018)。损失函数作为一种基本元素,其设计过程的自动化也引起了研究人员的兴趣。Li et al .(2019)和Wang et al .(2020)基于现有的人为设计的损失函数设计搜索空间,并搜索最佳组合参数。有两个问题:a)搜索过程输出整个网络模型,而不是损失函数。对于每一个新的网络或数据集,都要重新进行昂贵的搜索过程,并且 b)搜索空间中充满了交叉熵的变体,这无法解决交叉熵损失与许多目标指标之间的不一致。相比之下,我们的方法输出搜索代理损失函数与目标指标的接近形式,这是可在网络和数据集之间转移的。
3 REVISITING EVALUATION METRICS FOR SEMANTIC SEGMENTATION
为语义分割定义了各种评估指标,以解决不同场景下的不同任务。其中大多数是三种典型的类型:基于Acc,基于iou和基于F1分数。本节在一个统一的符号集下回顾评估度量。
表1总结了主流的评估指标。符号如下:假设验证集由 N N N个图像组成,标记为 C C C类(包括背景)的类别。让 I n , n ∈ { 1 , … , N } I_n, n \in\{1, \ldots, N\} In,n∈{ 1,…,N}为第 n n n张图像, Y n Y_n Yn为对应的ground-truth分割掩码。其中 Y n = { y n , c , h , w } c , h , w Y_n=\left\{y_{n, c, h, w}\right\}_{c, h, w} Yn={ yn,c,h,w}c,h,w是一个one-hot向量,其中 y n , c , h , w ∈ { 0 , 1 } y_{n, c, h, w} \in\{0,1\} yn,c,h,w∈{ 0,1}表示像素在空间位置 ( h , w ) (h, w) (h,w)属于第 c c c类 ( c ∈ { 1 , … , C } ) (c \in\{1, \ldots, C\}) (c∈{ 1,…,C})。在评估中,将ground-truth分割掩码 Y n Y_n Yn与网络预测 Y ^ n = { y ^ n , c , h , w } c , h , w \hat{Y}_n=\left\{\hat{y}_{n, c, h, w}\right\}_{c, h, w} Y^n={ y^n,c,h,w}c,h,w进行比较,其中 y ^ n , c , h , w ∈ { 0 , 1 } \hat{y}_{n, c, h, w} \in\{0,1\} y^n,c,h,w∈{ 0,1} 。 y ^ n , c , h , w \hat{y}_{n, c, h, w} y^n,c,h,w是由网络产生的连续分数(通过argmax操作)量化的。
Acc-based指标。全局精度度量(gAcc)计算正确分类的像素数量。可以用逻辑运算符AND写成公式(1)。gAcc度量对每个像素的计数是相等的,所以长尾分类的结果对度量数的影响很小。平均精度(mAcc)指标通过在每个类别内进行归一化来缓解这种情况,如公式(2)所示。
IoU-based指标。评估是基于集合相似度而不是像素精度。对每个类别的预测与ground-truth 掩模之间的交叉超并度(IoU)评分进行了评估。平均IoU (mIoU)度量将所有类别的IoU分数平均,如公式(3)所示。
在变体中,频率加权IoU (FWIoU)度量根据类别像素数对每个类别IoU得分进行加权,如公式(4)所示。边界IoU (BIoU) (Kohli et al ., 2009)度量只关心边界周围的分割质量,因此它在评估中挑选出边界像素,而忽略其余像素。可由公式(5)计算,其中BD( y n y_n yn)表示ground-truth y n y_n yn中的边界区域。BD( y n y_n yn)是通过对最小池ground-truth掩模进行异或运算得到的。Min-Pooling(·)的步长为1。
F1-score-based指标。F1-score是一个同时考虑准确率和召回率的标准。这种类型的一个众所周知的度量是边界F1-score (BF1-score) (Csurka et al, 2013),它被广泛用于评估边界分割精度。BF1-score中 precision和recall的计算如公式(6)所示,其中BD( y ^ n \hat{y}_n y^n)和BD( y n y_n yn)由公式(5)推导而来。边界区域采用stride为1的Max- pooling(·),允许容错。
4 AUTO SEG-LOSS FRAMEWORK
在Auto Seg-Loss框架中,将评估指标转化为具有可学习参数的连续代理损失,并对其进行进一步优化。图1说明了我们的方法。
4.1 将度量标准扩展到代理
如第3节所示,大多数分割指标是不可微的,因为它们以一个热点预测映射作为输入,并且包含二进制逻辑操作。我们通过平滑内部的不可微操作,将这些度量扩展为连续损失代理。
扩展one-hot操作。one-hot预测图, Y ^ n = { y ^ n , c , h , w } c , h , w \hat{Y}_{n}=\{\hat{y}_{n,c,h,w}\}_{c,h,w} Y^n={
y^n,c,h,w}c,h,w,通过在每个像素上选择得分最高的类别得到,并进一步转化为one-hot形式。在这里,我们用softmax概率近似one-hot预测,为,
y ^ n , c , h , w ≈ y ~ n , c , h , w = S o f t m a x c ( z n , c , h , w ) , (7) \hat{y}_{n,c,h,w}\approx\tilde{y}_{n,c,h,w}=\mathrm{Softmax}_{c}(z_{n,c,h,w}), \tag{7} y^n,c,h,w≈y~n,c,h,w=Softmaxc(zn,c,h,w),(7)
式中, z n , c , h , w ∈ R z_{n,c,h,w}\in\mathbb{R} zn,c,h,w∈R为网络输出的类别得分(未归一化)。近似的one-hot预测用 y ~ n , c , h , w {
{\tilde{y}}}_{n,c,h,w} y~n,c,h,w表示。
扩展逻辑操作。如表1所示,不可微逻辑运算fAND(y1,y2),fOR(y1,y2)和fXOR(y1,y2)是这些度量中不可或缺的组成部分。因为异或运算可以由AND和OR构造,所以fXOR(y1;y2) = fOR(y1,y2)−fAND(y1,y2),重点是扩展fAND(y1,y2)和fOR(y1,y2)到连续定义域。
按照惯例,用算术运算符代替逻辑运算符
f A N D ( y 1 , y 2 ) = y 1 y 2 , f O R ( y 1 , y 2 ) = y 1 + y 2 − y 1 y 2 , (8) f_{\mathrm{AND}}(y_{1},y_{2})=y_{1}y_{2},f_{\mathrm{OR}}(y_{1},y_{2})=y_{1}+y_{2}-y_{1}y_{2}, \tag{8} fAND