【问题标题】:Interpret Caffe FCN output classes解释 Caffe FCN 输出类
【发布时间】:2019-01-04 07:32:36
【问题描述】:

我已经设置了 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,因为我想将输入图像分类为 0 和 1 2 类(所以看来我应该有 2 个输出!我不明白为什么?!它可能是一个输出矩阵有零和一,不是吗?)

所以我的问题是:

1.我应该总结这两个类吗?因为我需要 1 个输出

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

谢谢

【问题讨论】:

    标签: machine-learning computer-vision caffe image-segmentation matcaffe


    【解决方案1】:

    在进行二元分类时,使用带有两个输出的 "SoftmaxWithLoss" 在数学上等同于使用 "SigmoidCrossEntropyLoss"。因此,如果您真的只需要一个输出,您可以将最后一层设置为num_output: 1 并使用"SigmoidCrossEntropyLoss"。但是,如果要利用 caffe 的"Accuracy" 层,则需要使用两个输出和"SoftmaxWithLoss" 层。

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

    【讨论】:

    • 感谢您的回答。总而言之,我的意思是以某种方式合并它们,但这是错误的,第二个输出是你所说的正确输出。如果我使用 SigmoidCrossEntropyLoss 和一个输出,我不能使用 Accuracy 层吗?
    • @mehdi AFAIK "Accuracy" 层是在考虑"Softmax" 预测的情况下实现的。
    • 啊,好的,谢谢。现在我只是使用第二个输出,它有负值和正值,真的不知道为什么它不产生 0 和 1 而不是负值和正值,但我将负值替换为 0,将正值替换为 1,这似乎是对的。
    • @mehdi 查看this answer:在预测时,您需要将"SoftmaxWithLoss" 替换为简单的"Softmax",以便明确从预测中获取概率。
    • 给出的答案是deploy和train prototxt文件的区别,deploy应该有简单的loss。我提到的问题是“train.prototxt”和“SoftmaxWithLoss”
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 2012-05-19
    • 2014-02-17
    • 2011-05-03
    • 2012-02-17
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多