从官方文档上摘抄的注意事项
MMSegmentation 使用 num_classes 和 out_channels 来控制模型最后一层 self.conv_seg 的输出。
num_classes 应该和数据集本身类别个数一致,当是二值分割时,数据集只有前景和背景两类,所以 num_classes=2
out_channels 控制模型最后一层的输出的通道数,通常和 num_classes 相等。
当二值分割时候,可以有两种处理方法, 分别是:
-
设置 out_channels=2,在训练时以 Cross Entropy Loss 作为损失函数,在推理时使用 F.softmax() 归一化 logits 值,然后通过 argmax() 得到每个像素的预测结果。(我一般会用这个)
-
设置 out_channels=1,在训练时以 Binary Cross Entropy Loss 作为损失函数,在推理时使用 F.sigmoid() 和 threshold 得到预测结果,threshold 默认为 0.3。
对于实现上述两种计算二值分割的方法,需要在 decode_head 和 auxiliary_head 的配置里修改。
注意: 使用 reduce_zero_label 请确认数据集原始类别个数,如果只有两类,需要关闭 reduce_zero_label 即设置 reduce_zero_label=False。
cited from:
官方文档
some useful tutorial: