叶片病害分割模型预测掩膜绘图异常代码排查请求
叶片病害分割项目绘图代码问题排查
我正在开展叶片病害分割深度学习项目,已完成50轮模型训练,得到以下精度与损失指标:
- 训练损失:19.4736,训练精度:0.9395
- 验证损失:19.6197,验证精度:0.9100
- 测试损失:19.6148,测试精度:0.9123
但绘制预测掩膜时结果不准确,怀疑绘图代码存在问题,绘图代码如下:
def plot_predictions(model, images, masks, num_samples=5): predictions = model.predict(images[:num_samples]) for i in range(num_samples): plt.figure(figsize=(15, 5)) plt.subplot(1, 3, 1) plt.title('Real Image') plt.imshow(images[i]) plt.subplot(1, 3, 2) plt.title('Ground Truth Mask') plt.imshow(masks[i], cmap='gray') # Assuming masks are already binary plt.subplot(1, 3, 3) plt.title('Predicted Mask') plt.imshow(predictions[i][:, :, 0], cmap='gray') # Convert predicted mask to binary plt.show() plot_predictions(model, test_images.numpy(), test_masks_L, num_samples=5)
绘制出的预测掩膜与真实掩码差异明显(示例图呈现原始图像、真实掩码与预测掩码的对比)。以下是可能的错误点:
- 未对预测结果做二值化处理:代码注释标注要转成二值掩码,但实际仅提取了预测结果的单通道,没有进行阈值分割。分割模型的输出通常是0-1之间的概率值(如sigmoid激活输出),需要设定阈值(如0.5)将概率转换为0/1的二值掩码,否则
imshow会将连续的概率值当作灰度图显示,导致视觉上与真实掩码差异较大。 - 掩码数据格式不匹配:检查
test_masks_L的数据类型、形状是否与预测结果一致。例如真实掩码是整数类型(0/1),而预测结果是浮点型;或者两者通道数不匹配,都可能导致显示异常。 - 图像归一化未反处理:如果输入模型的
test_images做过归一化(如除以255),虽此处显示原始图像无问题,但如果预测结果的输出范围与真实掩码不一致(如真实掩码是0-255,预测结果是0-1),也会导致显示效果不符预期。 - 通道维度处理错误:若模型输出为多通道(如二分类任务输出2通道),直接取
[:, :, 0]可能不是目标病害类别的概率,应选择对应类别通道,或用argmax获取类别索引后再显示。
内容的提问来源于stack exchange,提问作者Urwa Shanza
相关产品推荐
相关产品推荐

