Python_for_microscopists项目:土地覆盖数据集预处理与分割教程
python_for_microscopists 项目地址: https://gitcode.com/gh_mirrors/py/python_for_microscopists
概述
本教程将详细介绍如何使用Python处理土地覆盖数据集,为后续的语义分割任务做准备。土地覆盖数据集通常包含高分辨率卫星或航拍图像及其对应的标注掩码,这些数据在环境监测、城市规划等领域有重要应用。
数据集理解
土地覆盖数据集通常包含两种类型的文件:
- 图像文件(.tif格式):通常是三通道的RGB图像
- 掩码文件(.tif格式):单通道图像,每个像素值代表不同的土地覆盖类别
通过初步分析可以看到:
- 图像文件的三个通道分别代表不同的光谱波段
- 掩码文件的三个通道实际上是相同的,可以只使用其中一个通道
数据预处理流程
1. 图像分块处理
高分辨率图像通常尺寸很大,直接输入神经网络会带来内存问题。解决方案是将大图像分割成小块:
patch_size = 256
# 计算能被256整除的最近尺寸
SIZE_X = (image.shape[1]//patch_size)*patch_size
SIZE_Y = (image.shape[0]//patch_size)*patch_size
# 裁剪图像
image = Image.fromarray(image)
image = image.crop((0, 0, SIZE_X, SIZE_Y))
使用patchify库将图像分割为256x256的小块:
patches_img = patchify(image, (256, 256, 3), step=256)
2. 掩码同步处理
对掩码进行相同的分块处理,确保图像和掩码一一对应:
patches_mask = patchify(mask, (256, 256), step=256)
3. 有效数据筛选
许多小块可能只包含背景(标签0),这些数据对训练没有帮助。我们筛选出包含足够多有效标签的样本:
val, counts = np.unique(temp_mask, return_counts=True)
# 至少5%的区域是有用标签
if (1 - (counts[0]/counts.sum())) > 0.05:
# 保存有效样本
4. 数据集划分
将筛选后的数据划分为训练集和验证集:
splitfolders.ratio(input_folder, output=output_folder, seed=42, ratio=(.75, .25))
数据组织建议
为了便于使用Keras的ImageDataGenerator,建议按以下结构组织数据:
Data/
train_images/
train/
img1, img2, img3, ......
train_masks/
train/
msk1, msk, msk3, ......
val_images/
val/
img1, img2, img3, ......
val_masks/
val/
msk1, msk, msk3, ......
技术要点解析
-
图像裁剪vs缩放:对于语义分割任务,保持原始分辨率很重要,因此优先选择裁剪而非缩放。
-
分块策略:使用无重叠分块(step=256)简化数据管理,但可能导致边缘信息丢失。有重叠分块是另一种选择。
-
数据平衡:筛选有效样本可以避免模型偏向于背景类别,提高训练效率。
-
格式一致性:确保图像和掩码的文件名一一对应,便于数据加载。
实际应用建议
-
对于不同的数据集,需要调整patch_size以适应图像内容和任务需求。
-
可以修改有效样本的判定阈值(当前5%),根据具体任务调整。
-
考虑添加数据增强步骤,如旋转、翻转等,增加数据多样性。
-
对于多类别分割任务,需要确保掩码中的类别编号连续且从0开始。
通过这套预处理流程,我们可以将原始的大尺寸土地覆盖数据转换为适合深度学习模型训练的格式,为后续的语义分割任务打下坚实基础。
python_for_microscopists 项目地址: https://gitcode.com/gh_mirrors/py/python_for_microscopists
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考