README.md 4.9 KB

多通道遥感影像分割

遥感影像分割是图像分割领域中的重要应用场景,广泛应用于土地测绘、环境监测、城市建设等领域。遥感影像分割的目标多种多样,有诸如积雪、农作物、道路、建筑、水源等地物目标,也有例如云层的空中目标。

本案例基于PaddleX实现多通道遥感影像分割,涵盖数据分析、模型训练、模型预测等流程,旨在帮助用户利用深度学习技术解决多通道遥感影像分割问题。

前置依赖

  • Paddle paddle >= 1.8.4
  • Python >= 3.5
  • PaddleX >= 1.1.0

安装的相关问题参考PaddleX安装

另外还需安装gdal, 使用pip安装gdal可能出错,推荐使用conda进行安装:

conda install gdal

下载PaddleX源码:

git clone https://github.com/PaddlePaddle/PaddleX

该案例所有脚本均位于PaddleX/examples/channel_remote_sensing/,进入该目录:

cd PaddleX/examples/channel_remote_sensing/  

数据准备

遥感影像的格式多种多样,不同传感器产生的数据格式也可能不同。PaddleX现已兼容以下4种格式图片读取:

  • tif
  • png
  • img
  • npy

标注图要求必须为单通道的png格式图像,像素值即为对应的类别,像素标注类别需要从0开始递增。例如0,1,2,3表示有4种类别,255用于指定不参与训练和评估的像素,标注类别最多为256类。

本案例使用L8 SPARCS公开数据集进行云雪分割,该数据集包含80张卫星影像,涵盖10个波段。原始标注图片包含7个类别,分别是cloud, cloud shadow, shadow over water, snow/ice, water, landflooded。由于floodedshadow over water2个类别占比仅为1.8%0.24%,我们将其进行合并,flooded归为landshadow over water归为shadow,合并后标注包含5个类别。

数值、类别、颜色对应表:

Pixel value Class Color
0 cloud white
1 shadow black
2 snow/ice cyan
3 water blue
4 land grey

执行以下命令下载并解压经过类别合并后的数据集:

mkdir dataset && cd dataset
wget https://paddleseg.bj.bcebos.com/dataset/remote_sensing_seg.zip
unzip remote_sensing_seg.zip
cd ..

其中data目录存放遥感影像,data_vis目录存放彩色合成预览图,mask目录存放标注图。

数据分析

遥感影像往往由许多波段组成,不同波段数据分布可能大相径庭,例如可见光波段和热红外波段分布十分不同。为了更深入了解数据的分布来优化模型训练效果,需要对数据进行分析。

参考文档数据分析对训练集进行统计分析,确定图像像素值的截断范围,并统计截断后的均值和方差。

模型训练

本案例选择UNet语义分割模型完成云雪分割,运行以下步骤完成模型训练,模型的最优精度miou77.99%

  • 设置GPU卡号

    export CUDA_VISIBLE_DEVICES=0
    
  • 运行以下脚本开始训练

    python train.py --data_dir dataset/remote_sensing_seg \
    --train_file_list dataset/remote_sensing_seg/train.txt \
    --eval_file_list dataset/remote_sensing_seg/val.txt \
    --label_list dataset/remote_sensing_seg/labels.txt \
    --save_dir saved_model/remote_sensing_unet \
    --num_classes 5 \
    --channel 10 \
    --lr 0.01 \
    --clip_min_value 7172 6561 5777 5103 4291 4000 4000 4232 6934 7199 \
    --clip_max_value 50000 50000 50000 50000 50000 40000 30000 18000 40000 36000 \
    --mean 0.14311188522260637 0.14288498042151332 0.14812997807748615 0.16377211813814938 0.2737538363784552 0.2740934379398823 0.27749601919204 0.07767443032935262 0.5694699410349131 0.5549716085195542 \
    --std 0.09101632762467489 0.09600705942721106 0.096193618606776 0.10371446736389771 0.10911951586604118 0.11043593115173281 0.12648042598739268 0.027746262217260665 0.06822348076384514 0.062377591186668725 \
    --num_epochs 500 \
    --train_batch_size 3
    

也可以跳过模型训练步骤,下载预训练模型直接进行模型预测:

wget https://bj.bcebos.com/paddlex/examples/multi-channel_remote_sensing/models/l8sparcs_remote_model.tar.gz
tar -xvf l8sparcs_remote_model.tar.gz

模型预测

运行以下脚本,对遥感图像进行预测并可视化预测结果,相应地也将对应的标注文件进行可视化,以比较预测效果。

export CUDA_VISIBLE_DEVICES=0
python predict.py

可视化效果如下所示:

数值、类别、颜色对应表:

Pixel value Class Color
0 cloud white
1 shadow black
2 snow/ice cyan
3 water blue
4 land grey