遥感图像稀疏表征与智能分析竞赛参赛笔记
前俩个月参加了由国家自然科学基金委信息科学部主办的“遥感图像稀疏表征与智能分析竞赛”,在这里分享一下参加比赛的一些感悟。
数据集
我参加的是语义分割主题,数据来源于高分二号MSS影像,分辨率为四米,影像尺寸为7200x6800,包括NIR,R, G, B四个波段。由于原始影像是用ENVI classic做的预处理,所以会导致一些读取错误,所以我都使用了imageio函数进行读取。数据集主要包含16个类别,如下图:
数据集主要包括八张训练图像以及俩张验证图像,最后需要对十张测试图像进行测试。由于原始影像尺寸较大,受服务器GPU内存的限制,需要对图像进行裁切,通过有重叠的裁切,最终得到了22880张256x256大小的训练图像以及5720张验证图像,同时,还对数据集进行了简单的数据增强,比如随机旋转(random rotate)和水平/垂直翻转(Horizontal/Vertiacal Filp)。
值得注意的是,数据中类别不平衡现象较严重,数据多的样本与数据少的样本之间差距悬殊,如下图;
所以解决类别之间的不平衡问题是取得好名次的关键。
模型训练
由于keras简单的操作逻辑,所以使用了keras进行编码。对于语义分割任务,刚开始想到的就是各种比较经典的网络,比如UNet,SegNet,RefineNet,但是进行了几次实验之后,发现直接堆砌网络,效果都不算太好。尤其是对于相似度极高的河流和湖泊,以及坑塘,很容易分类错误,对于数据较少的样本,时常提取不到,最重要的是,精度上不去,损失下不来。后来就尝试了预训练的网络,主要就是在ImageNet上预训练的DenseNet(如下图)网络,以及Inception_ResNet_v2网络,精度一下子就提升上去了,而且收敛也很快&#x