SOLC (我们已经发布了完整代码!)
遥感SAR-光学土地利用分类 PyTorch实现
如果该仓库对您有用的话,欢迎star和fork,并提出您的疑问。尽量在issues中提问,有时间一定回复。
数据集来源
参考 https://github.com/AmberHen/WHU-OPT-SAR-dataset
数据集:SAR和光学影像
https://pan.baidu.com/s/1sIGsD3lBEogSCqzbDaclA 密码:i51o
论文链接: MCANet: 用于土地利用分类的光学和SAR影像联合语义分割框架
https://www.sciencedirect.com/science/article/pii/S0303243421003457
2022-06-01 更新
- 发布裁剪代码 (sar, opt, lbl)
- 发布标签转换代码
- 发布数据集分割代码 (6:2:2) -> (17640:5880:5880)
- 上传至服务器 (四张GPU)
- 项目结构应如下所示:
SOLC
├── dataset
| |whu-opt-sar-dataset-256 // 根目录
│ ├── ├── train
│ ├── │ ├── sar
│ ├── │ │ ├── NH49E001013_1.tif
│ ├── │ ├── opt
│ ├── │ │ ├── NH49E001013_1.tif
│ ├── │ ├── lbl
│ ├── │ │ ├── NH49E001013_1.tif
│ ├── ├── val
│ ├── │ ├── sar
│ ├── │ │ ├── NH49E001013_2.tif
│ ├── │ ├── opt
│ ├── │ │ ├── NH49E001013_2.tif
│ ├── │ ├── lbl
│ ├── │ │ ├── NH49E001013_2.tif
│ ├── ├── test
│ ├── │ ├── sar
│ ├── │ │ ├── NH49E001013_3.tif
│ ├── │ ├── opt
│ ├── │ │ ├── NH49E001013_3.tif
│ ├── │ ├── lbl
│ ├── │ │ ├── NH49E001013_3.tif
├── libs // 工具
├── models // 模型
├── tools // 预处理
├── dataset.py
├── class_names.py
├── palette.py
├── sync_transforms.py
├── train.py
├── _test.py / predict.py
2022-06-02 更新
- 发布Deeplabv3+代码 (sar + opt, 5通道输入)
- 发布学习策略代码 (步长, gamma)
- 发布训练Torch-Parser代码
- 发布VGG19代码 (基于官方实现) 权重
2022-06-03 更新
- 发布MCANet代码 (非官方实现, 基于deeplabv3+)
- 发布FCNs代码 (FCN8s, 16s 和 32s)
- 发布Resnet-50 权重 , Resnet-101 权重, 和 Restnet-152 权重 代码
- 发布Unet代码
- 发布Segnet代码
- 发布PSPnet代码
- 发布SOLC代码 (我们的方法)
2022-06-04 更新 SOLC (我们的方法)
- 发布SOLC V1代码 (基于RGB-D和双重resnet 50)
- 发布SOLC V2代码 (基于双流deeplabv3+)
- 发布Deeplabv3+性能 (训练7小时)
- 发布训练代码
- 发布预测/测试代码
2022-06-05 更新 SOLC (我们的方法)
- 发布SOLC V1代码性能
- 发布SOLC V2代码性能
- 发布SOLC V3代码 (基于双流deeplabv3+和SAGate)
- 发布SOLC V4代码 (基于双流到单流deeplabv3+)
- 发布SOLC V5代码 (基于双流到单流deeplabv3+, SAGate和RFB)
- 发布SOLC V6代码 (基于双流到单流deeplabv3+和两个增强模块)
2022-06-06 更新 SOLC (我们的方法)
- 发布SOLC V7代码 (基于双流deeplabv3+, SAGate和ERFB) (成功版本, 恭喜!)
- 重新训练Unet, Segnet和MCANet
- 重新测试性能
- 发布我们的SOLC V7权重 solcv7: 百度网盘 密码:solc
- 发布其他模型权重 others: 百度网盘 密码:solc
2022-06-07 更新
- 发布像素统计
[0, '背景', 11824154.0, 1.0](忽略)
[1, '农田', 708762053.0, 0.016682825992096393]
[2, '城市', 96237141.0, 0.12286476797975535]
[3, '村庄', 119738993.0, 0.09874940237721894]
[4, '水体', 292127191.0, 0.04047604729817842]
[5, '森林', 774385740.0, 0.015269075073618998]
[6, '道路', 19661970.0, 0.6013717852280317]
[7, '其他', 35164414.0, 0.3362534066400197]
标准中的权重:[1.0, 0.016682825992096393, 0.12286476797975535, 0.09874940237721894, 0.04047604729817842, 0.015269075073618998, 0.6013717852280317, 0.3362534066400197]
2022-06-08 新闻
- 发布更多结果
- 发布绘图代码
SOLC V7 框架
其他策略
- 设置合适的空洞卷积膨胀率atrous_rates
- 余弦退火重启动学习率策略warm up
- 使用更多的数据增强
- 使用更强的损失函数(focal loss)或者为类别赋予权重(见tools/class_weight.py)来解决类别不平衡问题
性能
策略 | 模型 | 总体性能 |
---|---|---|
轮数=40, 批次大小=16, 随机翻转, 学习率=1e-3, 权重衰减=1e-4 | deeplabv3+(未预训练) | 总体准确率=0.8096,平均交并比=0.4118,kappa系数=0.7261 |
轮数=40, 批次大小=16, 随机翻转, 学习率=1e-3, 权重衰减=1e-4 | unet(未预训练) | 总体准确率=0.7846,平均交并比=0.3847,kappa系数=0.6826 |
轮数=40, 批次大小=16, 随机翻转, 学习率=1e-3, 权重衰减=1e-4 | segnet(未预训练) | 总体准确率=0.7370,平均交并比=0.3139,kappa系数=0.6148 |
轮数=40, 批次大小=16, 随机翻转, 学习率=1e-3, 权重衰减=1e-4 | mcanet(未预训练) | 总体准确率=0.8179,平均交并比=0.4296,kappa系数=0.7352 |
轮数=40, 批次大小=16, 随机翻转, 学习率=1e-3, 权重衰减=1e-4 | solcv7(未预训练) | 总体准确率=0.8222,平均交并比=0.4382,kappa系数=0.7428 |
模型 | 耕地 | 城市 |
:--------: | :------: | :--: |
deeplabv3+ | 0.7951/0.6314 | 0.9414/0.6578 |
unet | 0.7970/0.6081 | 0.5671/0.5174 |
segnet | 0.7248/0.6122 | 0.0083/0.0083 |
mcanet | 0.8320/0.6499 | 0.8394/0.6575 |
dcn(我们的) | 0.8392/0.6505 | 0.9051/0.6880 |
模型 | OA | mIOU | kappa |
---|---|---|---|
deeplabv3 | 0.8096 | 0.4118 | 0.7261 |
unet | 0.7846 | 0.3847 | 0.6826 |
segnet | 0.7370 | 0.3139 | 0.6148 |
mcanet | 0.8179 | 0.4296 | 0.7352 |
dcn(我们的) | 0.8222 | 0.4382 | 0.7428 |
左侧为各类别的平均精度OA,右侧为各类别的平均mIou
注意:0->背景,10->耕地,20->城市,30->村庄,40->水体,50->森林,60->道路,70->其他
安装
- 克隆此仓库。
$ git clone https://github.com/yisun98/SOLC.git
$ cd SOLC
- 安装环境
$ pip install -r requirements.txt
$ source activate
- 数据集
$ python tools/crop_sar.py
$ python tools/crop_opt.py
$ python tools/convert_lbl.py
$ python tools/crop_lbl.py
$ python tools/split_data.py
- 训练
nohup python train.py >> train_<模型名称>.out 2>&1 &
详情请参见train.py。
tensorboard --logdir=<你的日志目录> --bind_all
- 测试/预测
nohup python train.py --model solcv7 --num_classes 8 >> train_<模型名称>.out 2>&1 &
详情请参见train.py。
python predict.py --model solcv7 --model-path <模型路径>
结果
更多结果请看这里 密码:solc。
classification_25_21
classification_82_10
classification_94_2
classification_137_15
参考文献
引用 (同等贡献度,排名不分先后)
如有任何问题,欢迎联系我们!
贡献者1:yisun98 - 1957240687@qq.com
贡献者2:yiruzzz - 992371522@qq.com
贡献者3:Bismarckwzc - 1558908027@qq.com
贡献者4:917596622 - 917596622@qq.com
如果本项目对您有帮助,请考虑引用我们。
@misc{SOLC2022,
author = {Y. Sun, Y. Zhao, Z. Wang, Y. Fan},
title = {SOLC},
year = {2022},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/yisun98/SOLC}},
}