关于YOLO v1论文中损失函数相关文本的技术咨询
先把论文里这段核心内容贴出来方便对照:
我们使用平方和误差(sum-squared error)是因为它易于优化,但它与我们最大化平均精度(average precision)的目标并不完全契合。它对定位误差和分类误差赋予相同权重,这可能并不理想。此外,每张图像中许多网格单元(grid cells)不包含任何对象,这会将这些单元的‘置信度’(confidence)分数推向零,往往会盖过包含对象的单元的梯度……
咱逐点拆解这几个关键问题:
选平方和误差的初衷
平方和误差(sum-squared error)是深度学习里最“亲民”的损失函数之一,最大的优点就是求导简单、优化成本低,不用搞复杂的数学计算,训练初期能让模型快速收敛。YOLO v1团队一开始选它,纯粹是因为它好上手,能快速把模型跑起来验证思路。和最终目标的核心矛盾
做目标检测,咱们最终要的是平均精度(average precision)——这玩意儿看的是预测框和真实框的重合度(IoU)、分类准确率这些综合指标。但平方和误差是个“一碗水端平”的主儿:它把定位误差(比如框的坐标偏了)和分类误差(比如把猫认成狗)当成同等重要的误差来计算,完全没考虑这俩误差对最终AP的影响天差地别。这种权重分配显然不合理。最致命的问题:背景网格的梯度压制
YOLO是把图像切成S×S的网格,大部分网格里根本没有目标(就是背景)。这些背景网格的置信度目标值是0,平方误差会拼命把它们的预测置信度往0拉,产生的梯度量级特别大。而那些包含目标的网格数量少得可怜,它们的梯度很容易被这些海量背景网格的梯度给“淹没”——结果就是模型花了大量精力学怎么区分背景,却没学会怎么精准预测有目标的框,最终检测效果自然好不了。
内容的提问来源于stack exchange,提问作者tarun26

