【遥感影像深度学习】系列的第一章,Python遥感影像深度学习的入门课程,介绍如何使用卷积神经网络(CNN)从卫星图像中分割云层
1、数据集
在本项目中,我们将使用 Kaggle 提供的 38-Cloud Segmentation in Satellite Images数据集。
该数据集由裁剪成 384x384 (适用于深度学习)的卫星场景组成。总共有 8400 个用于训练和 9201 个用于测试的图块,分别位于红、绿、蓝和近红外(近红外)波段的目录中,还有一个额外的目录用于存储参考掩膜(真实值 - *_gt)。结构如图 2 所示。
2、数据预处理
为了给神经网络准备好数据,我们首先需要对数据进行预处理,以适合我们的模型。由于我们将使用预训练的 ResNet 框架,因此模型中只能拟合 3 个波段,最好是 RGB 波段,因为模型已经用这些波段进行了预训练。因此,数据预处理的第一步就是从给定的图像中创建 RGB patch小块。我们将使用 PIL(Python Imaging Library,Python 图像库)打开红、绿、蓝 .tif 图像,并将其保存为单一的 RGB .png 文件。下面的代码就可以做到这一点(确保与原始数据集的结构相同),并对图像进行归一化处理。
from PIL import Image
from pathlib import Path
import numpy as np
def create_rgb_pil (red_filename: Path):
# set the filenames for each patch
red_fn = str(red_filename)
blue_fn = red_fn.replace('red','blue')
green_fn = red_fn.replace('red', 'green')
rgb_fn = red_fn.replace('red', 'rgb').replace('.TIF', '.png')
# open red, green and blue patches as numpy arrays
arr_red = np.array(Image.open(red_fn))
arr_green = np.array(Image.open(green_fn))
arr_blue = np.array(Image.open(blue_f