多通道遥感影像分割¶
遥感影像分割是图像分割领域中的重要应用场景,广泛应用于土地测绘、环境监测、城市建设等领域。遥感影像分割的目标多种多样,有诸如积雪、农作物、道路、建筑、水源等地物目标,也有例如云层的空中目标。
本案例基于PaddleX实现多通道遥感影像分割,涵盖数据分析、模型训练、模型预测等流程,旨在帮助用户利用深度学习技术解决多通道遥感影像分割问题。
前置依赖¶
- Paddle paddle >= 1.8.4
- Python >= 3.5
- PaddleX >= 1.1.4
安装的相关问题参考PaddleX安装
另外还需安装gdal, 使用pip安装gdal可能出错,推荐使用conda进行安装:
conda install gdal
下载PaddleX源码:
git clone https://github.com/PaddlePaddle/PaddleX
cd PaddleX
git checkout release/1.3
该案例所有脚本均位于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
, land
和flooded
。由于flooded
和shadow over water
2个类别占比仅为1.8%
和0.24%
,我们将其进行合并,flooded
归为land
,shadow 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
语义分割模型完成云雪分割,运行以下步骤完成模型训练,模型的最优精度miou
为78.38%
。
- 设置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.15163569 0.15142828 0.15574491 0.1716084 0.2799778 0.27652043 0.28195933 0.07853807 0.56333154 0.5477584 \
--std 0.09301891 0.09818967 0.09831126 0.1057784 0.10842132 0.11062996 0.12791838 0.02637859 0.0675052 0.06168227 \
--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 |