machine-learning - 解释 Caffe FCN 输出类

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

我已经设置了 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 个输出!我不明白为什么?!它可能是一个输出矩阵用零和一,不是吗?)

所以我的问题是:

1.我应该对这两个类求和吗?因为我需要 1 个输出

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

谢谢

最佳答案

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

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

关于machine-learning - 解释 Caffe FCN 输出类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553480/

相关文章:

python - Keras 预测一个数字,如果在一个范围内则通过

machine-learning - 如何创建自定义特征提取器函数并将其与 Scikit-learn 管道中的 countvectorizer 一起使用

machine-learning - 前向传播与前向传播前向传球

python - 在 Python 中从文本/PDF 生成 XML 的最佳 Python 库是什么?

python - 深度学习——关于caffe的一些幼稚问题

matlab - 不同 HOG 代码的混淆

matlab - 使用 MatLab 按不同强度分割对象

algorithm - 特征检测算法和特征描述符算法

python - 运行Caffe时出现两个错误

machine-learning - Caffe - 如何使用还原层?