比赛官网:http://rscup.bjxintong.com.cn/#/theme/3/
代码主要基于我的另外一个仓库:https://github.com/huiyiygy/pytorch-deeplab-xception/tree/huiyiygy 修改而来。
最终提交kappa系数最高得分为0.37187
Deeplab 部分的实验我直接基于上面仓库的代码,修改了一些内容进行训练的,所以没放在这个目录里面,有兴趣可以自行去看。
序号 | 实验序号 | 实验更改内容 | 结果 |
---|---|---|---|
1 | Deeplab 0 | SGD --lr 0.01 --out-stride 16 --epochs 200 --batch-size 8 --out-stride 16 | 0.25705 |
2 | Deeplab 1 / 2 | 改变数据集分布,将原始train/val打散,重新组合成新的train/val batch-size 10 --out-stride 16 | 0.25024 |
3 | Deeplab 3 / 4 | --out-stride 8 --epochs 100 --batch-size 4 | 0.12774 |
4 | Deeplab 5 | 在训练阶段取train数据时,重新添加随机尺度裁剪步骤 混合数据集 --out-stride 16 --epochs 200 --batch-size 10 | 0.19396 |
5 | Deeplab 6 | 使用自带的预训练模型进行训练 混合数据集 | 0.20624 |
6 | Deeplab 7 | 使用随机尺度裁剪对原始数据集进行增强,扩展图片至1W张, 使用重新生成的数据集进行训练 --weight-decay 0.001 --out-stride 16 --epochs 100 --batch-size 14 | 精简后的模型依旧严重过拟合 |
7 | UNet 0 | SGD --lr 0.01 --weight-decay 0.001 --epochs 200 --batch-size 32 | 0.19 |
8 | UNet 1 | using Adam no weight-decay --learn-rate 0.001 --weight-decay 0 --epochs 1000 --batch-size 32 | 0.28297 |
9 | UNet 2 | 将编码器模块中每块增加一层卷积层,并在下采样层最后添加dropout=0.5, RandomGammaTransform, RandomBilateralFilter, RandomNoise --batch-size 20 | 0.36428 |
10 | UNet 3 | 在实验2的基础上add weight-decay amsgrad, 当epoch为总数的50%,80%时,将学习率缩小10倍 --weight-decay 1e-4 | 0.3582 |
11 | UNet 4 | 实验3 L2系数过大导致精度过低,将其继续缩小10倍。学习率更新改为每次0.3倍,增加epoch数量 | 0.29755 |
12 | UNet++ | 使用UNet++网络训练 --learn-rate 0.001 --weight-decay 0 --epochs 1000 --batch-size 12 | 0.35381 |
13 | CombineNet 1 | 单Unet模型,四个角度、上下水平翻转,6张图预测 | 0.37187 |
14 | CombineNet 2 | Unet与Unet++ ,多角度预测 | 没来得及提交 |
- (请先容我抱怨几句)官方提供的数据标注质量太差了,数据存在严重不均衡、错标、漏标现象。同时提供的数据量也较少(一共10张图片,我能训练出花来?)。
- 使用Deeplab训练,普遍存在严重的过拟合现象。原因:模型复杂度太高,样本数据太少。就算加入正则化项和数据增强,效果也没有提升。
- 原生UNet网络可以很好的避免过拟合问题,可以以此为baseline,逐步添加更多的层以及其他训练技巧,提高精度。
- LovaszSoftmax Loss
- Test阶段小图预测后拼接回大图时的拼接方法可以进一步优化,目前我用的是400大小,200步长去裁剪,使得每张图片有一半是重合的,这样做一定程度上减轻了边界黑边的问题,不过还是存在。
- 有遥感图像专业知识背景的同学,可以尝试用envi对原始标注图片进行修改,我和某位大佬沟通过,他只通过改原始标注图片,然后用相同的方法训练,分数就提高了10个点。