基于深度学习的多光谱图像语义分割 —— 从原理到实践(第六节·完结篇)
基于深度学习的多光谱图像语义分割 —— 从原理到实践(第六节·完结篇)
经过前五节,我们完成了数据准备、分块处理、模型推理、应用分析以及网络训练。
最后一节,我们将对训练好的模型进行量化评估,用客观指标衡量它的分割性能。
同时,我们会回顾整个流程,给出总结和扩展建议。

6. 模型评估与性能分析
6.1 为什么需要评估?
训练完成后,我们需要回答几个关键问题:
- 模型在未见过的数据上表现如何?
- 哪些类别分割得更好?哪些容易混淆?
- 模型是否达到了实际应用所需的精度?
定量评估不仅帮助我们判断模型优劣,还能指导后续调优(如调整网络结构、数据增强策略、损失权重等)。
6.2 评估流程概览
我们将验证集图像输入训练好的网络,得到预测分割图,然后与真实标签(labelsVal)进行逐像素比较,计算出多个指标。主要步骤如下:
- 对验证集图像进行分块推理(与测试相同)。
- 拼接预测结果,并应用掩膜。
- 使用
evaluateSemanticSegmentation函数自动计算全局准确率、类别准确率、IoU 等。 - 输出和解读评估结果。
6.3 对验证集执行分块分割
验证集图像尺寸 8833×6918,同样采用分块推理,块大小与测试时一致(1024×1024):
patchSize = [1024 1024];
bimVal = blockedImage(val_data(:,:,1:6), BlockSize=patchSize);
bimSeg = apply(bimVal, @(bs) semanticseg(bs.Data, net, Outputtype="uint8"), ...
PadPartialBlocks=true, PadMethod=0);
segmentedImage = gather(bimSeg);
应用掩膜(验证集掩膜 maskVal):
maskVal = val_data(:,:,7);
segmentedImage = segmentedImage .* uint8(maskVal ~= 0);
然后将预测结果保存为 PNG 文件(与真实标签格式一致):
imwrite(segmentedImage, "results.png");
6.4 加载真实标签与预测结果
真实标签 labelsVal 我们已在第二节保存为 gtruth.png。使用 pixelLabelDatastore 分别加载预测和真实标签,并指定类别名称和 ID:
classNames = ["NotVegetation", "Vegetation"];
pixelLabelIDs = [1 2];
pxdsResults = pixelLabelDatastore("results.png", classNames, pixelLabelIDs);
pxdsTruth = pixelLabelDatastore("gtruth.png", classNames, pixelLabelIDs);
6.5 计算语义分割指标
使用 evaluateSemanticSegmentation 函数一键计算多项指标:
ssm = evaluateSemanticSegmentation(pxdsResults, pxdsTruth);
输出示例:
Evaluating semantic segmentation results
----------------------------------------
* Selected metrics: global accuracy, class accuracy, IoU, weighted IoU, BF score.
* Processed 1 images.
* Finalizing... Done.
* Data set metrics:
GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore
______________ ____________ _______ ___________ ___________
0.9694 0.9704 0.9406 0.94064 0.79474
6.6 各项指标解读
| 指标 | 值(示例) | 含义 |
|---|---|---|
| GlobalAccuracy | 0.9694 | 所有像素中正确分类的比例,整体准确率 96.94%,非常不错。 |
| MeanAccuracy | 0.9704 | 每一类准确率的平均值,不受类别不均衡影响。 |
| MeanIoU | 0.9406 | 平均交并比(Intersection over Union),是语义分割最常用的指标之一。它计算每个类别的预测区域与真实区域的重叠程度,平均后得到。0.94 表示预测与真实重叠度很高。 |
| WeightedIoU | 0.94064 | 按类别像素数加权后的 IoU,反映了整体重叠程度。 |
| MeanBFScore | 0.7947 | 边界 F1 分数,评估分割边界的完整性。数值低于前几项,说明边界处仍有改进空间。 |
这些指标表明,U‑Net 在多光谱数据上表现优异,能够可靠地用于植被/非植被分类。
6.7 进一步分析(可选)
如果你需要更细粒度的信息,可以查看每个类别的 IoU 和准确率:
% 显示每个类别的 IoU
disp(ssm.Metrics.IoU)
或者绘制混淆矩阵:
cm = confusionmat(pxdsTruth, pxdsResults);
% 可进一步可视化
这有助于发现哪些类别容易被误分,从而调整模型或训练策略。
6.8 模型保存与部署建议
评估满意后,你的模型可以用于实际生产环境。MATLAB 支持:
- 将
dlnetwork导出为 ONNX 格式,用于跨平台部署。 - 使用 GPU Coder 生成 CUDA 代码,实现高性能推理。
- 集成到 App Designer 或 Web 应用中,提供在线分割服务。
6.9 本节完整代码
以下是验证评估的完整代码段:
% 1. 验证集分块推理
patchSize = [1024 1024];
bimVal = blockedImage(val_data(:,:,1:6), BlockSize=patchSize);
bimSeg = apply(bimVal, @(bs) semanticseg(bs.Data, net, Outputtype="uint8"), ...
PadPartialBlocks=true, PadMethod=0);
segmentedImage = gather(bimSeg);
% 2. 应用掩膜
maskVal = val_data(:,:,7);
segmentedImage = segmentedImage .* uint8(maskVal ~= 0);
% 3. 保存预测结果
imwrite(segmentedImage, "results.png");
% 4. 加载真实标签和预测标签
classNames = ["NotVegetation", "Vegetation"];
pixelLabelIDs = [1 2];
pxdsResults = pixelLabelDatastore("results.png", classNames, pixelLabelIDs);
pxdsTruth = pixelLabelDatastore("gtruth.png", classNames, pixelLabelIDs);
% 5. 评估
ssm = evaluateSemanticSegmentation(pxdsResults, pxdsTruth);
disp(ssm.Metrics);
7. 全文总结与拓展方向
7.1 系列回顾
本系列博客从零开始,系统讲解了如何使用 MATLAB 和 U‑Net 对多光谱遥感图像进行语义分割。我们走过了以下环节:
- 基础认知:语义分割的任务定义、多光谱数据的优势、U‑Net 的原理。
- 数据准备:下载预训练模型和数据集,维度转换,多通道可视化,标签二分类。
- 分块策略:利用
blockedImage和blockedImageDatastore处理超大图像,构建训练数据流水线。 - 模型推理:对测试图像进行分块预测、去噪、叠加可视化,并计算植被覆盖率。
- 模型训练:自定义损失函数,设置超参数,从头训练 U‑Net(可选)。
- 性能评估:使用多种指标量化模型精度,验证其实际应用价值。
7.2 拓展建议
如果你希望进一步提升模型能力或拓展应用场景,可以考虑以下方向:
- 多类别分割:将二分类扩展为原始 18 类,实现更精细的地物分类。
- 更先进的主干网络:尝试 DeepLabv3+、Swin Transformer 等,结合注意力机制提升边界精度。
- 数据增强:在线随机旋转、翻转、色彩抖动、弹性变形等,增强泛化性。
- 时间序列分析:利用多时相影像监测植被变化,预测生态趋势。
- 轻量化部署:使用 MobileNet、EfficientNet 等轻量级编码器,适配边缘设备。
7.3 资源与参考资料
- MATLAB 官方文档:Semantic Segmentation Using Deep Learning
- 原论文:Ronneberger et al., “U‑Net: Convolutional Networks for Biomedical Image Segmentation”
- 数据集:Kemker et al., “High‑Resolution Multispectral Dataset for Semantic Segmentation”
8. 致谢与结语
感谢你跟随本系列教程,从原理到实践完整走了一遍多光谱图像语义分割的全流程。希望这些内容能够帮助你在自己的研究或项目中快速落地。如有任何疑问或建议,欢迎在评论区交流讨论。
深度学习与遥感结合的前景广阔,让我们共同探索更多可能!
本系列博客完
更多推荐

所有评论(0)