首页 > 解决方案 > 对象检测上的 Sigmoid 与 Softmax 交叉熵

问题描述

我正在使用 MobileNetv1+SSD 进行对象检测。我很难为分类选择正确的损失函数。

在 Liu、Wei 等人的 SSD 论文中,作者在多类置信度上使用了 softmax 损失tf.nn.softmax_cross_entropy_with_logits但是,使用来自 Tensorflow管道 的 sigmoid 损失,我得到了更好的结果tf.nn.sigmoid_cross_entropy_with_logits

我的问题是:

标签: tensorflowdeep-learningcomputer-visionobject-detection

解决方案


如果只有一个类可以为“真” ,您将使用 softmax 交叉熵损失。您的任务中一个示例(例如一张图像)的基本事实可能如下所示[0,0,0,1,0,0]。例如,这 6 个值可以表示 6 个不同的类,例如['cat', 'dog', 'house', 'fish', 'shoe', 'boat'].

网络的最终输出将是输出向量中每个标量的“概率”分数列表。概率总和为 1,例如[0.05, 0.1, 0.15, 0.55, 0.15]

如果您尝试解决的问题涉及多个值为“真”的可能性,您将使用 sigmoid 损失函数,例如基本事实可能是[0,1,0,1,0,0].


推荐阅读