为什么训练时不使用IOU?

18

当人们尝试使用CNN解决语义分割任务时,通常在训练过程中使用softmax-crossentropy损失函数(参见全卷积 - Long)。但是当涉及比较不同方法的性能时,会报告像交集比这样的度量。

我的问题是为什么人们不直接训练想要优化的度量?对我来说,在训练期间使用某些度量进行训练,然后在基准测试中评估另一些度量似乎很奇怪。

我可以看出,对于训练样本中不存在该类别的情况,IOU存在问题(联合=0且交集=0 => 除零操作)。但是当我可以确保我的所有真实标签样本都包含所有类别时,是否还有另一个原因不使用此度量呢?

5个回答

17

看看这篇论文,他们提出了一种使IoU概念可微分的方法。我用他们的解决方案实现了惊人的结果!


7
可能需要在这里包含一些数学内容,以免成为仅有链接的回答。他们的算法看起来类似于Y.Wang等人。 粗略地说,I ~= sum(Y*Y')U ~= sum(Y + Y' - Y*Y')。 您的论文使用了 I/U 的负对数形式,而我提供的论文使用了 1-I/U。我喜欢负对数形式,但我很快会尝试两种形式。您的论文在 I/U 之后进行求和,而非之前。 - Poik
1
在我个人看来,对于训练集中的每个样本计算I/U,然后再进行求和更加合理。这样,您可以基于每个样本评估准确性,并且单独的错误会相加。先进行求和可能会导致误差抵消(sum(I)/sum(U)可能会给出一个好的分数,而sum(I/U)可能不会为相同的数据)。虽然我并不是专家... - MPA
@mathetes 我也在研究像素级别的语义分割问题,并且考虑到了二元分类。我已经查阅了一些论文,但对某些内容还不太清楚:1) Mattyus et al. 显示了不同的soft-IOU,当我试图将其二值化时,它似乎与你的论文中给出的实现有所不同。2) 加权交叉熵损失是否达到了与soft iou损失相同的目标? - Naman
@Poik 在我的情况下,我实现了你提供的论文中的损失函数,IoU和Dice系数都非常高(>0.92),但预测结果非常糟糕,基本上是恒定的0,有什么建议吗? - Luis Leal

11

这就像问“为什么在分类问题上我们使用log loss而不是accuracy进行训练?”答案非常简单-你无法直接训练大多数指标,因为它们对于您的参数不可微分(或至少不产生良好的误差曲面)。Log loss(softmax交叉熵)是准确度的有效代理。但您完全正确,使用非指标的有效代理进行训练是错误的,由于所考虑的一些指标,例如加权准确性可以轻松地将log loss加权处理得到良好的代理,所以链接的论文并没有做好工作。


3
为什么IOU不可导?最坏的情况下,我们应该能够通过积分来解决它。 - information_interchange

4
这里有一种简单的思考方式。
在解决相关图像问题时,仅仅评估准确性或IoU等指标是不够的。评估指标必须还能帮助网络确定权重应该向哪个方向调整,以便网络能够有效地学习迭代和时代。
评估这个方向就是早期评论中所说的错误可微分。我认为,IoU指标与网络无法使用的内容之间没有关系:“嘿,它不完全在这里,但我可能要把我的边界框向左移动一点!“
只是一个简单的解释,但希望有所帮助...

3

我在训练分割模型时经常使用平均交并比(mean IOU)。更确切地说,是-log(MIOU)。如果将-MIOU作为损失函数,则由于其范围狭窄(0,1)且表面陡峭,很容易使您的优化器陷入0的状态。通过取其对数尺度,损失表面变得缓慢且有利于培训。


Tae-Sung Shin,感谢您的建议。我仍在努力将损失降至0。学习率也应该调整吗?我正在使用Adam优化器。 - weather guy
-log(MIOU)的验证损失从一开始就是0,训练损失略高(0.03)。这是一个分类问题,存在非常严重的类别不平衡。然而,二进制交叉熵损失效果良好且收敛。 - weather guy

0
主要原因是IoU是基于区域的,意味着如果您的TP阈值为0.5,则以0.99概率预测的像素与以0.51概率预测的像素相同。如果我们想要最小化损失以找到一个更有信心的模型,这并不理想。交叉熵损失将考虑模型置信度的差异,因为它是基于概率的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接