Anchor Loss | ICCV2019,优化分类性能

本文提出了一种基于样本预测困难度动态调整交叉熵的损失函数,它根据预测的相对困难程度来自动调节损失的大小。

在本文中,我们将介绍anchor loss,并解释图像分类中anchor loss。首先,我们定义了预测的困难,并给出了相关的例子。然后给出了锚失量函数的广义形式。并通过数值的形式介绍了anchor loss。最后,通过与其他损失函数在公式上的比较,加深anchor loss 提出的改变。

论文地址:https://arxiv.org/pdf/1909.11155.pdf
github:https://github.com/slryou41/AnchorLoss

1.现有问题

在人体关键点预测任务中,对称的关键点比如左膝和右膝,在视觉上的差异并不大,这就导致如下图中左膝的热度图中虽然左膝的位置也有不错的置信度,但是右膝的位置的置信度是最大的,这种情况就导致了预测错误。在分类任务中,由于两个类别之间的差异性不大,也会导致最大置信度的偏移而产生的分类错误问题。

anchor loss根据当前样本的预测困难程度动态地重估损失值,而预测难度指的是通过比对真类别预测概率和假类别预测概率之间的差异来确定的。如下图所示,为anchor loss的公式以及对应的符号解释。

2.举例说明

以分类任务为例,说明下整个anchor loss的计算过程。在分类任务上,我们采用sigmoid-二进制交叉熵作为基本函数,与softmax不同,sigmoid激活将每个类的输出概率作为一个独立变量处理,其中每个标签表示图像是否包含相应类的对象。这个公式还使我们的损失函数能够通过调制每个标签上的损失值来捕捉输出空间中的细微差异。如下公式为anchor loss在分类任务中的表现形式。

首先如下所示为网络输入值,以及经过激活函数后对应的输出值。

------------target------------
tensor([[0., 1., 0., 0., 0.],
        [0., 0., 1., 0., 0.],
        [0., 0., 0., 1., 0.],
        [0., 1., 0., 0., 0.]])

------------input------------
tensor([[0.2700, 0.5650, 0.1038, 0.5062, 0.4629],
        [0.7132, 0.5688, 0.0094, 0.7925, 0.2843],
        [0.7025, 0.4202, 0.2817, 0.9563, 0.2574],
        [0.5099, 0.0611, 0.8952, 0.7805, 0.8269]])


------------after sigmoid------------
tensor([[0.5671, 0.6376, 0.5259, 0.6239, 0.6137],
        [0.6711, 0.6385, 0.5024, 0.6884, 0.5706],
        [0.6687, 0.6035, 0.5700, 0.7224, 0.5640],
        [0.6248, 0.5153, 0.7100, 0.6858, 0.6957]])

根据输出值,以及添加了0.05的扰动后,q*的结果如下:

------------q*------------
tensor([[0.6739],
        [0.7384],
        [0.7187],
        [0.7600]])

------------q-q*------------
 tensor([[-0.0205,  0.0500, -0.0617,  0.0363,  0.0261],
        [ 0.2187,  0.1861,  0.0500,  0.2360,  0.1182],
        [-0.0036, -0.0689, -0.1024,  0.0500, -0.1084],
        [ 0.1595,  0.0500,  0.2447,  0.2205,  0.2304]])

------------loss------------
loss tensor([[0.8372, 0.4581, 0.7464, 0.9779, 0.9511],
        [1.1120, 1.0175, 0.7654, 1.1659, 0.8454],
        [1.1049, 0.9251, 0.8439, 0.3246, 0.8301],
        [0.9803, 0.7397, 1.2377, 1.1577, 1.1897]])

从上述的补充的补偿输出中我们可以发现,如下所示,就单个样本而言,当前类别为第二类,而对应的输出值为0.6376,与该输出值最接近的为第四类输出值为0.6239。因此与之对应的动态损失后的损失值也最大为0.9779。

------------target------------
tensor([[0., 1., 0., 0., 0.],

------------after sigmoid------------
tensor([[0.5671, 0.6376, 0.5259, 0.6239, 0.6137],

------------loss------------
loss tensor([[0.8372, 0.4581, 0.7464, 0.9779, 0.9511],
3.anchor loss和focal loss的异同。

anchor loss的设计初衷是将相对属性考虑在内,是一种在训练过程中会根据样本的难度,动态更新损失倾向性的损失函数。那么其与常规的交叉熵损失和focal loss 和anchor loss之间有什么异同呢?

如上图所示,图中p代表了分类的标签,q代表了网络的输出。公式6为二分类交叉熵损失函数,公式7为二分类focal损失函数。从公式中我们发现,focal 损失函数通过引入一个注意力参数r,用来解决样本不均衡的问题。而在anchor loss中如果将q*的值设定为1-p,那么anchor loss就等同于focal loss。如果将r参数设为0,那么anchor loss就等同于二分类交叉熵损失。

发布了233 篇原创文章 · 获赞 187 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/qiu931110/article/details/103226392