解释 Caffe FCN 输出 类

Interpret Caffe FCN output classes

我已经设置了 Caffe 并使用 FCN-8s 模型,输出几乎没有变化 类:

layer {
 name: "score_5classes"
 type: "Convolution"
 bottom: "score"
 top: "score_5classes"
 convolution_param {
    num_output: 2
    pad: 0 
    kernel_size: 1 
    }
}
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "score_5classes"
  bottom: "label"
  top: "loss"
  loss_param {
    normalize: true
  }
}

我把最后一层的输出数改成了2,因为我想把我的输入图像分为2 类、0和1(所以我好像应该有2个输出!我不明白为什么?!它可以是一个包含 0 和 1 的输出矩阵,不是吗?)

所以我的问题是:

1.Should 我把这 2 个加起来 类 ?因为我需要 1 个输出

2.The损失这么小!即使输出与预期相去甚远! Caffe如何计算丢失层?

谢谢

进行二进制class化时,使用"SoftmaxWithLoss" with two outputs, is mathematically equivalent to using "SigmoidCrossEntropyLoss"。所以,如果你真的只需要一个输出,你可以将最后一层设置为 num_output: 1 并使用 "SigmoidCrossEntropyLoss"。但是,如果你想利用caffe的"Accuracy"层,你需要使用两个输出和"SoftmaxWithLoss"层。

关于您的问题:
1. 如果您选择使用 "SoftmaxWithLoss" 并且您只需要一个输出,则为每个像素取第二个输出,因为此条目表示 class 1.
的概率 我会把它留给你作为一个练习来弄清楚如果你求和你会得到什么(提示:`"Softmax" 输出概率...)
2. 损失非常小很可能是因为你有严重的 class 不平衡——你的大部分像素是 0 而只有极少数是 1(反之亦然),因此预测总是 0 不会招致这么大的惩罚。如果是这种情况,我建议查看解决此问题的 Focal Loss