基于 DeepGlobe 土地覆盖数据集,用一套统一协议 训练并对比 16 个分割模型(15 个主线模型:CNN、Transformer、Mamba、混合架构;外加 4090 实验线 wangbq-net)。文后提供gitee代码地址,也算是这段时间的学习告一段落了

一、简介
本项目开展**遥感影像语义分割(土地覆盖分类)**研究与实践:
-
以 DeepGlobe Land Cover 数据集为基准,将 512×512 遥感影像按像素划分为 7 类土地覆盖(城市、农田、草地、森林、水体、荒地、未知);
-
用同一套协议(相同数据划分、损失函数、调度器、早停策略、评估口径)训练 16 个模型------其中 U-Net、UNet++、DeepLabV3+、SegFormer-B0、SegFormer-B1 五个模型直接基于
segmentation_models_pytorch库实现,其余为自研或论文复现; -
验证集 mIoU 采用全局混淆矩阵计算(整个验证集汇总后求 IoU),而非批次平均;
-
支持 CPU 训练全部模型,GPU(RTX 4090)环境下提供大分辨率/大骨干实验线 wangbq-net;
-
附带大影像推理链:切片 → 推理 → 拼接 → 矢量化,可直接处理任意尺寸卫星影像。
模型口径 :全项目共 16 个模型------第 1~15 个为主线模型(含 UNet++/DeepLabV3+ 的两个换骨干变体),第 16 个为 wangbq-net(4090 实验线)。
二、数据集
使用 DeepGlobe Land Cover Classification Challenge(CVPR 2018 Workshop)官方数据集:
| 项 | 说明 |
|---|---|
| 官方渠道 | deepglobe.org 挑战赛页面(需注册) |
| Kaggle 镜像 | DeepGlobe Land Cover Classification Dataset(推荐,可直接下载) |
| 训练影像 | 1146 张 2448×2448 RGB 卫星影像(带像素级彩色标注) |
| 测试影像 | 154 张(官方未公开标注) |
| 类别 | 7 类:urban land / agriculture land / rangeland / forest land / water / barren land / unknown |
| 标注格式 | RGB 颜色编码 mask,类别定义见数据集内 class_dict.csv |
本项目实际使用 :按 metadata.csv 中 mask 文件实际存在性过滤后得到 803 张 ,在训练集内部按 seed=42 划分出 训练 683 张 / 验证 120 张(官方验证集标注缺失,故内部划分)。
目录结构(解压后保持 Kaggle 原始结构即可):
DeepGlobeLandCoverClassification/ # 数据集根目录(--data_dir 指向这里)
├── metadata.csv # 影像索引(sat_image_path / mask_path / split)
├── class_dict.csv # 类别颜色定义表
├── train/
│ ├── xxx_sat.jpg # 卫星影像
│ └── xxx_mask.png # 彩色标注
└── test/
└── xxx_sat.jpg
三、模块一览表
训练与评估核心
| 文件 | 作用 |
|---|---|
run_training.py |
统一入口:训练 / 评估(--evaluate)/ 可视化,全部参数可由 yaml 配置或命令行覆盖 |
train.py |
训练循环:Dice+CE 组合损失、warmup+cosine 调度、梯度裁剪、早停、EMA、全局混淆矩阵 mIoU |
dataset.py |
DeepGlobe 数据集加载(metadata.csv 驱动)、512×512 裁切、none/light/medium/strong 四级数据增强 |
models.py |
16 模型统一工厂:模型名 + 编码器 → 网络;内置编码器白名单校验 |
test_module.py |
评估模块:TTA(4 变换)预测、逐类 IoU、混淆矩阵计算、预测可视化 |
inference.py |
单图推理库函数(供大影像链与其他脚本调用) |
模型实现(16 个模型 = 9 个自研模型 + 7 个 SMP 库模型)
9 个自研/复现模型 (下表 #1~#9,一一对应 9 个模型文件)+ 1 个共用骨干文件,均由 models.py 导入:
| # | 文件 | 模型 | 架构要点 |
|---|---|---|---|
| 1 | lite_deeplabv3.py |
Lite-DeepLabV3+ | 自研轻量 ASPP 解码器 |
| 2 | cfformer_l.py |
CFFormer-L | 交叉飞跃注意力,CPU 友好的 Transformer 分割 |
| 3 | terrasegnet.py |
TerraSegNet | EfficientNetV2-S 骨干 + 自研解码器 |
| 4 | cm_unet.py |
CM-UNet | Mamba 思想 + 轻量 UNet 解码器(2024) |
| 5 | segnext.py |
SegNeXt-S | ConvNeXt 式编码 + Hamburger 解码器(需固定 torch.manual_seed(42) 保证确定性) |
| 6 | offseg.py |
OffSeg-B | 正交注意力高效分割(ICCV 2025) |
| 7 | cgrseg.py |
CGRSeg-T | 内容引导实时分割(ECCV 2024) |
| 8 | umixformer.py |
U-MixFormer-B1 | MiT 编码 + 混合解码器(WACV 2025;编码器可参数化) |
| 9 | wangbq_net.py |
wangbq-net | 4090 实验线:MiT-B2/B3/B4/B5 + U-MixFormer 解码器(复用 umixformer.py),支持 768×768 |
| --- | efficientformer_v2_backbone.py |
不是模型 | 公共骨干文件:#6 OffSeg-B 与 #7 CGRSeg-T 共用 |
7 个 SMP 库模型 (下表 #1~#7)没有独立模型文件,由 models.py 直接调用 segmentation_models_pytorch 库创建(5 种库结构,UNet++ 与 DeepLabV3+ 各多训一个换骨干变体,故 5 种结构对应 7 个模型):
| # | 模型 | 库调用 | 编码器 |
|---|---|---|---|
| 1 | U-Net | smp.Unet |
MobileNetV2(基线) |
| 2 | UNet++(主线) | smp.UnetPlusPlus |
MobileNetV2 |
| 3 | UNet++ Eff-B0(换骨干变体) | smp.UnetPlusPlus |
EfficientNet-B0 |
| 4 | DeepLabV3+(主线) | smp.DeepLabV3Plus |
MobileNetV2 |
| 5 | DeepLabV3+ Eff-B1(换骨干变体) | smp.DeepLabV3Plus |
EfficientNet-B1 |
| 6 | SegFormer-B0 | smp.Segformer |
MiT-B0 |
| 7 | SegFormer-B1 | smp.Segformer |
MiT-B1(当前精度冠军 0.7438) |
9 + 7 = 16 个模型。
大影像推理链
| 文件 | 作用 |
|---|---|
tile_large_image.py |
大尺寸影像切片(含重叠度控制) |
process_large_image.py |
逐片批量推理 |
merge_tiles.py |
预测结果拼接还原为整幅图 |
raster_to_vector.py |
分类结果栅格转矢量(GeoJSON/Shapefile) |
预测可视化
| 文件 | 作用 |
|---|---|
predict_single_samples.py |
单样本四联图(原图 | 真值 | 预测 | 误差图)与 mIoU 汇总 CSV |
配置文件
| 文件 | 作用 |
|---|---|
config_<model>_cpu.yaml × 15 |
各模型 CPU 训练配置(batch、lr、epochs、增广等级等) |
config.yaml |
通用配置模板 |
config_wangbq_net_4090.yaml |
wangbq-net 4090 GPU 配置(768²、MiT-B2、EMA) |
requirements.txt |
全量依赖(已锁版本) |
四、安装使用
1. 环境安装
git clone https://gitee.com/baoqiangwang/DeepGlobeLandCoverClassification
# 建议 Python 3.10+,先创建虚拟环境
pip install -r requirements.txt
2. 数据准备
按上文「二、数据集」所述,从 Kaggle 下载 DeepGlobe 数据集并解压,记下根目录路径(下文以 D:\datasets\DeepGlobeLandCoverClassification 为例)。
3. 训练
完整 16 个模型训练命令 (--data_dir 按你的数据集实际路径修改):
# ---- 主线 15 个模型(CPU/GPU 通用)----
# 01 U-Net(MobileNetV2 编码器,基线)
python run_training.py --config config_unet_mobilenet_v2_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 02 UNet++(MobileNetV2 编码器)
python run_training.py --config config_unetplusplus_mobilenet_v2_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 03 DeepLabV3+(MobileNetV2 编码器)
python run_training.py --config config_deeplabv3plus_mobilenet_v2_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 04 Lite-DeepLabV3+(自研轻量 ASPP)
python run_training.py --config config_lite_deeplabv3plus_mobilenet_v2_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 05 CFFormer-L(交叉飞跃注意力)
python run_training.py --config config_cfformer_l_mobilenet_v2_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 06 SegFormer-B0
python run_training.py --config config_segformer_b0_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 07 SegFormer-B1(当前精度冠军 0.7438)
python run_training.py --config config_segformer_b1_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 08 TerraSegNet(EfficientNetV2-S)
python run_training.py --config config_terrasegnet_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 09 CM-UNet(Mamba 轻量 UNet)
python run_training.py --config config_cm_unet_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 10 SegNeXt-S(Hamburger 解码器)
python run_training.py --config config_segnext_s_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 11 OffSeg-B(正交注意力,EfficientFormerV2-S2)
python run_training.py --config config_offseg_b_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 12 CGRSeg-T(内容引导实时分割,EfficientFormerV2-S1)
python run_training.py --config config_cgrseg_t_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 13 U-MixFormer-B1(混合解码器,收敛最快)
python run_training.py --config config_umixformer_b1_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 14 换骨干加赛一:UNet++ Eff-B0
python run_training.py --config config_unetplusplus_efficientnet_b0_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# 15 换骨干加赛二:DeepLabV3+ Eff-B1
python run_training.py --config config_deeplabv3plus_efficientnet_b1_cpu.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
# ---- 第 16 个:wangbq-net(RTX 4090 专用,768 分辨率 + MiT-B2)----
python run_training.py --config config_wangbq_net_4090.yaml --data_dir D:\datasets\DeepGlobeLandCoverClassification
命令行参数可覆盖 yaml 中的任意配置:
python run_training.py --config config_segformer_b1_cpu.yaml --batch_size16--lr0.0001 --data_dir ...
训练产物:
checkpoints/<模型名>_<编码器>_<时间戳>/ # 权重 + training.log(权威训练日志)
4. 评估与预测
# 测试集评估(含 TTA 与逐类 IoU)
python run_training.py --evaluate--checkpoint checkpoints/<模型目录>/<best权重>.pth --split test
# 单样本预测可视化(原图|真值|预测|误差 四联图)
python predict_single_samples.py --help
五、Best IoU 对比
15 个模型在同一协议(seed=42 内部划分、120 张验证图、全局混淆矩阵 mIoU、logs 权威口径)下的精度总榜:

-
U-MixFormer-B1(0.7385):收敛最快(40 轮内),单样本预测表现最佳;
-
U-Net(0.6067):最经典基线,全部模型的成绩都应与它对账;
-
两次"换骨干加赛"(UNet++ Eff-B0 0.5964、DeepLabV3+ Eff-B1 0.6822)证明:盲目替换更强 ImageNet 骨干可能是负收益,编码器-解码器匹配度才是主账。

第 16 个模型 wangbq-net(MiT-B2 + 768 分辨率)成绩待 4090 训练完成后更新至此。
六、License
Apache License 2.0 --- 详见 LICENSE。
gitee获取方式:
本项目为目前全网覆盖架构最全、实验最严谨的 DeepGlobe 遥感分割对比工程。
包含 CNN、Transformer、Mamba 全系模型复现、统一训练协议、精度榜单、可视化评估、大尺寸影像推理与栅格转矢量全流程代码。
整套工程已完整调试、归档收官,后续将长期维护迭代、持续优化模型精度与工程落地性。
免费获取完整 Gitee 开源仓库地址
本项目长期无偿开源,持续优化遥感分割精度、轻量化模型与工程落地能力。
如果对你的科研毕设、论文实验、项目学习有帮助,
欢迎 Star、收藏、转发,支持作者持续开源更新!!