Sigmoid 与 Softmax CrossEntropy 在对象检测上的对比
Sigmoid vs Softmax CrossEntropy on Object Detection
我正在使用 MobileNetv1+SSD 进行对象检测。我在为分类选择正确的损失函数时遇到困难。
在 Liu、Wei 等人的 SSD 论文中,作者在多重 类 置信度 tf.nn.softmax_cross_entropy_with_logits
上使用了 softmax 损失。但是,使用 Tensorflow pipeline tf.nn.sigmoid_cross_entropy_with_logits
.
的 sigmoid 损失,我得到了更好的结果
我的问题是:
- 物体检测的两种损失之间的主要区别是什么?
- 导致使用不同损失的结果差异的原因可能是什么?
你会使用softmax交叉熵损失,如果只有一个 class可以是"true"。任务中一个示例(例如一张图像)的基本事实可能看起来像 [0,0,0,1,0,0]
。例如,这 6 个值可以表示 6 个不同的 classes,例如 ['cat', 'dog', 'house', 'fish', 'shoe', 'boat']
.
网络的最终输出将是输出向量中每个标量的 "probability" 分数列表。概率总和为 1,例如[0.05, 0.1, 0.15, 0.55, 0.15]
.
如果您要解决的问题涉及 多个 值可能为 "true",则您将使用 S 形损失函数,例如基本事实可能是 [0,1,0,1,0,0]
.
我正在使用 MobileNetv1+SSD 进行对象检测。我在为分类选择正确的损失函数时遇到困难。
在 Liu、Wei 等人的 SSD 论文中,作者在多重 类 置信度 tf.nn.softmax_cross_entropy_with_logits
上使用了 softmax 损失。但是,使用 Tensorflow pipeline tf.nn.sigmoid_cross_entropy_with_logits
.
我的问题是:
- 物体检测的两种损失之间的主要区别是什么?
- 导致使用不同损失的结果差异的原因可能是什么?
你会使用softmax交叉熵损失,如果只有一个 class可以是"true"。任务中一个示例(例如一张图像)的基本事实可能看起来像 [0,0,0,1,0,0]
。例如,这 6 个值可以表示 6 个不同的 classes,例如 ['cat', 'dog', 'house', 'fish', 'shoe', 'boat']
.
网络的最终输出将是输出向量中每个标量的 "probability" 分数列表。概率总和为 1,例如[0.05, 0.1, 0.15, 0.55, 0.15]
.
如果您要解决的问题涉及 多个 值可能为 "true",则您将使用 S 形损失函数,例如基本事实可能是 [0,1,0,1,0,0]
.