2021全国数字生态创新大赛-智能算法-不落星光组
时间 | 得分 | 排名 |
---|---|---|
2021/3/3 | 0.3994 | 43/3927 |
本赛题基于不同地形地貌的高分辨率遥感影像资料,希望参赛者能够利用遥感影像智能解译技术识别提取土地覆盖和利用类型,实现生态资产盘点、土地利用动态监测、水环境监测与评估、耕地数量与监测等应用。结合现有的地物分类实际需求,参照地理国情监测、“三调”等既有地物分类标准,设计陆域土地覆盖与利用类目体系,包括:林地、草地、耕地、水域、道路、城镇建设用地、农村建设用地,工业用地、构筑物、裸地。
名称 | 大小 | Link | md5 |
---|---|---|---|
suichang_round1_train_210120.zip | 2.83GB | https://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531860/suichang_round1_train_210120.zip | 384ffa280672b04726e9ef00ced0e273 |
suichang_round1_test_partA_210120.zip | 530.17MB | https://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531860/suichang_round1_test_partA_210120.zip | 155394c28002f77fe9ba13ccbe19167a |
我们采用Unet++进行实验。
库 | 版本 |
---|---|
GDAL | 3.1.4 |
segmentation-models-pytorch | 0.1.3 |
torch | 1.7.0+cu110 |
pytorch-toolbelt | 0.4.1 |
我们需要了解一下我们的数据中每个类的像素占比情况,对我们后续处理和分析有一定的帮助,运行程序为"code\count_classes.py"。 我们可以发现,各类别非常不均衡,所以我们需要进行少类别上采样以及选择合适的损失函数。
最初为了更加充分利用数据,采用五折交叉验证方式对模型进行训练。在分隔训练集和验证集时,我们在连续五个数据中取其中四份做训练数据,其中一份做验证数据。我们使用dataProcess.py文件中的split_train_val_old函数进行分隔。实验发现线上分数和线下分数差别很大,推测应该是测试集和训练集不同域,光谱差异较大。
为了模拟不同域,我们使用全部数据作为训练集,全部数据作为验证集,只不过训练集和验证集的增强方式不同。
我们对类别像素占比很少的类别进行上采样处理,抵抗不均衡现象。若图像包含类别5、6、7则上采样2份,类别3、8、10因为得分太低,采取放弃策略,类别4几乎每张影像都有,亦采取放弃策略。
我们使用了比赛提供的R/G/B/Nir波段。我们实验过增加归一化植被指数NDVI作为image的第5通道输入到网络中,但是效果不佳,故舍弃这一策略。
为增强模型泛化性,我们对训练数据增强策略采用了随机水平翻转、垂直翻转、对角翻转以及5%百分比线性拉伸。为模拟变域,我们对验证集数据进行了随机0.8%、1%、2%线性拉伸。
我们选择Adamw优化器,初始学习率lr=1e-4,权重衰减weight_decay=1e-3。
在训练时梯度下降算法可能陷入局部最小值,此时可以通过突然提高学习率,来“跳出”局部最小值并找到通向全局最小值的路径。所以我们采用余弦退火策略调整学习率。T_0=2,T_mult=2,eta_min=1e-5。
软交叉熵函数是对标签值进行标签平滑之后再与预测值做交叉熵计算,可以在一定程度上提高泛化性。diceloss在一定程度上可以缓解类别不平衡,但是训练容易不稳定。我们采用软交叉熵函数和diceloss的联合函数作为实验的损失函数。
我们测试了用LovaszLoss进行fine tune,但是最终结果变差了,故放弃。
我们测试了SWA随机权重平均策略来增强模型泛化性,但是最终结果也变差了,故放弃。
测试时对原图像、水平翻转图像、垂直翻转图像以及百分比截断增强图像的预测结果进行平均,得到TTA结果。
我们训练了不同backbone的unet++,对预测结果取平均,得到最终结果。