文章目录
介绍
背景
在监管地上建筑物的建设、拆除、改建和扩建是一项重要任务。随着高分辨率卫星图像技术的发展以及智能算法的应用,这些工作可以实现自动化处理,从而大大提高工作效率和准确性。本次竞赛旨在利用2015年和2017年的某地卫星图片,预测这两年间新增的人工地上建筑物像元,并通过F1分数评估模型性能。
目录结构
- 准备数据:获取并预处理原始卫星图像。
- 图像预处理:解决图像拼接区域颜色差异及数据范围问题。
- 手工标注:挑选代表性区域进行标注以生成训练标签。
- 数据增强:应用多种方法增强数据集以提高模型泛化能力。
- 网络训练:基于改进的U-Net架构训练深度学习模型。
- 改进U-Net:描述了如何调整传统U-Net以适应特定任务需求。
- F1 score:定义用于模型选择的评价标准。
- 加权损失函数:设计适合当前任务的损失函数。
- 后处理:包括模型融合与形态学处理等步骤优化最终结果。
- 关于代码:说明如何使用预训练模型做预测及重新训练模型的过程。
准备数据
本项目涉及的数据来源于高分辨率卫星图像。为了确保模型能够有效地识别出这两年间的建筑变化,需要对原始图像进行一系列预处理操作,主要包括:
-
解决不同拼接区域的颜色差异:由于原始图像由多个部分拼接而成,各部分之间可能存在明显的色差。为了解决这个问题,我们采用了一种基于百分位数的方法来标准化每个通道的像素值分布,具体做法如下:
- 将图像转换为
float32
类型; - 计算99%和1%分位数作为最大值和最小值;
- 对图像中的有效区域(mask标记)进行归一化处理;
- 将均值调整到0.5;
- 最后将数值范围扩大至[0, 65535],并转回
uint16
类型保存。
- 将图像转换为
-
手工标注:考虑到全面标注所有区域的成本过高,我们选择了若干具有代表性的区域进行细致标注。对于选定的区域,白色区域表示确实发生了建筑变化,而黑色区域则表示没有变化。完成标注后,再将大图切割成多个小图以构建训练集。
-
数据增强:为了提升模型的鲁棒性和泛化能力,我们采用了旋转、翻转、亮度对比度调整等多种方式对训练样本进行了扩充。此外,还探索了其他可能的数据增强策略,如随机裁剪、缩放和平移等。
-
数据集划分:按照7:2:1的比例随机分配训练集、验证集和测试集,保证每个子集中包含足够多样化的样本。
图像预处理
针对原始图像存在的两个主要问题——拼接区域颜色差异大以及每个通道的数据范围不一致(实际范围为0~2774),我们采取了以下措施:
- 颜色校正:通过计算图像中非零区域的99%和1%分位数,然后根据这两个边界值对图像进行线性拉伸,使得所有像素值都被映射到一个更合理的区间内。
- 数据标准化:将图像转换为浮点型格式,减去最小值后除以最大值与最小值之差,接着调整均值使其接近0.5,最后乘以65535并将结果转换回无符号整数类型。
手工标注
在标注过程中,我们只选择了一些有代表性的区域进行精细标注,确保在这些区域内白色标记对应于实际发生的建筑变化,而黑色标记则代表未发生变化的地方。完成标注后,会将大图分割成多个小块,形成最终用于训练的小图集合。从标注的mask图像到训练用的.npy
文件转换过程详见process_mark.py
,其核心逻辑是截取指定区域内的图像和标签,并将其组合在一起。
数据增强
为了提高模型的泛化能力,我们在训练过程中实施了几种常见的数据增强技术,包括但不限于图像翻转、旋转、亮度和对比度调整等。这些增强手段不仅增加了训练样本的数量,而且有助于模型更好地学习到目标物体的本质特征,而不受特定视角或光照条件的影响。
网络训练
本项目的深度学习模型基于改进版的U-Net架构,该架构以其出色的语义分割性能而闻名。相较于传统的U-Net,我们的改进之处在于引入了额外的输入通道(例如RGBN),这使得模型可以直接处理多光谱图像,并且能够在一定程度上缓解高层建筑倾斜带来的影响。训练阶段的关键参数设置如下:
- 使用Dice系数损失函数结合交叉熵损失作为优化目标;
- 通过调整权重因子α来平衡精确率(precision)和召回率(recall)之间的关系;
- 设置适当的批次大小(batch size)和迭代次数(epochs)以确保模型收敛稳定。
改进U-Net
U-Net是一种经典的卷积神经网络架构,广泛应用于医学影像分析等领域。它由编码器(下采样路径)和解码器(上采样路径)组成,中间通过跳跃连接传递特征信息。为了适应此次比赛的任务要求,我们对标准U-Net做了如下改进:
- 增加输入通道数:除了常规的红绿蓝三通道外,还加入了近红外波段,构成四通道输入,以便更好地捕捉地物特征。
- 调整损失函数:考虑到新增建筑检测的重要性,我们自定义了一个加权损失函数,其中赋予正样本更高的权重,以此来强调模型对这类关键区域的关注。
- 优化后处理流程:引入形态学操作去除小面积噪点,并运用连通域分析进一步修正预测结果。
F1 Score
F1分数是一个综合考虑了精确率和召回率的指标,在二分类问题中尤为适用。对于本项目而言,我们将变化区域视为正类,非变化区域视为负类,进而计算F1得分。为了避免某些情况下出现除以零的问题,我们在公式中加入了一个极小常数项作为保护机制。
加权损失函数
为了使模型更加关注新增建筑的检测,我们设计了一个加权损失函数,其中包含了Dice系数损失和交叉熵损失两部分。通过调节参数α,可以在精确率和召回率之间找到最佳平衡点。实践中发现,当α≤0.5时,即权重w∈(0, 1],模型能够取得较好的表现。具体实现细节请参见utils.py
文件。
后处理
后处理步骤旨在进一步优化预测结果的质量,主要包括以下几个方面:
- 模型融合:通过对不同loss权重下的模型输出进行像素级融合,可以获得更为完整的检测结果。
- 形态学处理:利用腐蚀膨胀等操作去除孤立噪声点,并通过连通域分析修复断裂的目标轮廓。
关于代码
整个项目的代码可以在本地机器或阿里云PAI平台上运行。如果是在本地环境中执行,则需配置local_config_end2end.json
文件中的相关参数;而在PAI平台上运行时,则应根据实际情况修改unet-end2end-rgbn.txt
中的配置项,并指定该文件为启动参数。
对于预测阶段,提供了预训练好的权重文件供参赛者直接使用。只需更改配置文件中的几个关键路径参数(如输入输出目录、权重文件位置等),然后运行end2end_best_predict.py
脚本即可得到预测结果。此外,还可以通过运行post_process.py
来进行必要的后处理操作,以提高提交结果的质量。
总结
在整个项目中,我们成功地解决了图像拼接带来的颜色不一致问题,并通过八通道U-Net实现了对新增建筑的有效检测。同时,数据增强策略显著提升了模型的泛化能力和鲁棒性,而精心设计的加权损失函数则确保了模型在面对复杂场景时仍能保持较高的准确度。最后,通过模型融合与形态学处理等一系列后处理手段,我们进一步提高了预测结果的一致性和完整性。
展望未来,我们可以尝试更精确地区分新增道路和新建高架桥,或者引入CRFasRNN等高级模型以改善预测边界的清晰度。此外,探索更加复杂的模型融合方案(如stacking)也可能带来意想不到的效果。总之,尽管本次竞赛已经结束,但我们相信,只要持续努力,就一定能在这一领域取得更大的突破。
标签:训练,模型,UNet,区域,图像,Net,卫星,标注 From: https://blog.csdn.net/QQ_1309399183/article/details/144912659