遥感图像自然场景识别,准确率99.89%,竞赛经验分享
图像分类 CNN PyTorch
最后更新 2022-06-29 13:05 阅读 6477
最后更新 2022-06-29 13:05
阅读 6477
图像分类 CNN PyTorch
1. 赛题分析
本赛题主要进行典型场景智能识别,场景类型包括海滩、圆形农田、云、荒漠、林地、山脉、矩形农田、建筑区、河流和雪山共10类,在国土资源、海洋及海岸带、内陆水体、生态环境、农业、林业等各个领域具有重要的应用潜力。要求参赛选手利用机器学习等智能算法自动识别出所规定的测试集图像对应的场景类型。因此,本次比赛的数据集一共包括了10个类别,其中训练集有14400张图片,测试集有3600张图片。由于参赛数据集并不对外开放,仅提供调试数据,因此,我们需要利用好这些调试数据。本地调试数据分布如图表所示,共计2880张,各类别数据量接近,因此无需考虑类别不平衡问题。此外,样例图像的尺寸大小为128×128.
2. 基本解题思路
- 首先,尝试多种不同的模型,我使用torchvision内置的模型结构进行模型选择,其中包括各种resnet,resnext模型,vgg16,vgg19模型,inception模型,googlenet模型等,其他的比如mobilenet等轻量化模型侧重点在性能,可能不利于本赛题指标,因此不考虑使用这些轻量级模型.
- 选择了合适的模型之后,需要对模型进一步调优,比如使用数据增强等技巧,提高模型表现.
- 随后通过训练,参数调优来选择几种表现较好的模型,进行模型集成,
- 最后再进一步应用TTA等一些tricks来提升表现.需要注意的是,为了节约平台的积分资源,这些流程都要在提供的本地样例上进行调试.而不是提交到服务器上调试.
3. 优化技巧
- 大batchsize:64,根据batchsize和10G显存调整image size。
- 数据增强:数据增强并非越多越好.需要根据训练、验证的效果来选择合适的数据增强方法,我通过多次的实验,发现随机水平垂直翻转(p=0.5),随机擦出,随机旋转(15°)这几种数据增强方法组合在一起能够提升模型泛化能力。
- 使用labelsmoothcrossentropy(0.1)损失函数。标签平滑是解决这两个问题的正则化技术。通过对 label 进行 weighted sum,让模型略微关注到低概率分布的权重,输出的置信度会稍微低一些,来避免过度自信的情况.实验证明它能够取得比 one hot label 更好的效果。
- 使用warmup+cosine学习率衰减策略,使用warm up有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳,其次也有助于保持模型深层的稳定性。
- 使用TTA的方法,也就是测试增强技巧,在测试时,如果只对测试原图进行一次测试,那么就只能获得唯一的结果,我们通过对一张图片多次变换,分别进行测试,再对测试结果求和取最终预测结果.我们使用的TTA方法是tencrop方法。
- 模型集成可以结合不同的优秀模型的预测结果,类似投票的方式对结果进行预测.具体实现为将不同模型预测结果求和,取最高概率为最终预测结果。集成的模型包括:resnext101_32_8d、Inception_v3、efficientnet_b3
4. 平台测试
通过本地调试样例选择\调优模型,得到了比较好的模型集成等tircks方法,此时我们将算法提交平台进行训练和测试.由于平台上完整数据集中,训练集有14400张图片,因此根据经验按照8:2的比例划分总训练集为训练集和验证集.通过验证集防止模型过拟合于训练集,最后的测试准确率达到了99.89%,也就是只识别错了4张图片.
5. 展望
- 可以通过增大图像尺寸以学习更多的特征信息,使用梯度累加技术,以缓解GPU显存容量有限的问题。
- 使用k折交叉验证,来选择验证集表现更好的模型。
- 通过冻结网络层(前几层)进行模型调优来提高模型的性能.或者选择更优的模型进行集成,比如swin-transformer等(作者在线下使用过swin-transformer,可能因调参尚未调好而模型效果一般,且考虑显存容量问题所以没有采用).