为什么分割模型库的预测输出(值)是(0 到 1)而不是(0 或 1)?

Why is the predicted output (value) from segmentation model library (0 to 1) instead of (0 or 1)?

在按照这个tutorial执行语义分割任务时,
我注意到模型的最终预测输出不是 0 和 1,
它由从 0.0000xxxx 到 1.0 的十进制值组成。

由于模型只接受了0和1的标签,
输出中的小数值范围是什么意思?
(像素属于某个的可能性class?)

test_img = cv2.imread('data/membrane1/test/0.png', cv2.IMREAD_COLOR)    
test_img = cv2.resize(test_img, (SIZE_Y, SIZE_X))
test_img = cv2.cvtColor(test_img, cv2.COLOR_RGB2BGR)
test_img = np.expand_dims(test_img, axis=0)
prediction = model.predict(test_img)
plt.imshow(prediction_image, cmap='gray')

示例输出图像

样本Output/Predicted值

Youtube tutorial - 177 - Semantic segmentation made easy (using segmentation models library)
Github Original Source Code

我在另一个 video (19.20 ~ 20.04) 的同一个 youtube 教程中发现了这个。

预测中的值确实反映了像素与其对应的概率 class。

这里指的是当前像素点是膜的概率。

不确定您使用的是什么类型的模型,但最有可能的是,模型的最后一层是具有 S 形函数的密集层 activation_function。这将为您提供 0 到 1 之间的值。您需要找到一个阈值并查看哪个阈值提供更好的结果。例如,预测给出的所有值小于 0.5,将它们变为 0。预测给出的值 >= 0.5,将它们变为 1。但是,需要调整此阈值以查看哪个提供更好的结果。建议您使用完全未用于训练的数据来找到此阈值。