有限数据下的图像分类挑战是一项含有13个类别的自然图像分类任务。
本文中,Venturebeat的作者Kayo Yin介绍了kaggle的一项挑战——有限数据下的图像分类,最终提交分数为0.97115,在最终排行榜上排名第二。
挑战的第一个难点是缺乏可用的数据:仅有3859张可用于训练的图像。挑战的规则是在训练期间不使用外部数据。
由于数据量少,模型更容易过度拟合而无需学习泛化。
此外,由于这些图像是灰度图像,因此与诸如ImageNet数据集之类的彩色图像相比,它们包含的信息更少,因此,彩色图像上的预训练模型无法直接应用于此任务。
进一步检查数据集后,研究者发现,许多类别的图像在视觉上都包含相似或相同的元素。当这些类别被混淆时,模型将失去了准确性。
首先,数据集的图像尺寸并不相同,因此在将所有图像输入模型之前,要调整它们的大小。超过一半的训练图像的尺寸是256 x 256,所以要将其他图像调整或裁剪到这个尺寸。
研究者还将运用归一化方法。最初,图像表示为像素值从0到255的张量。将每个值简单除以255,得到0到1之间的值。
此外,将对比度拉伸应用于所有图像的图像增强,这将有助于模型更清晰地“查看”图像中的细节。
这些类别也是不平衡的,这意味着每个类别之间的数据量不相等。这将使模型或多或少地都会偏向某些类。
为了解决这个问题,研究者人为地添加了许多的图像,以便不同类别具有相同的图像数量。
为了重新采样,研究者在图像中随机裁剪一个区域来创建新的样本。这是基于“裁剪后的图像将包含与类特征相同元素”的假设。
最后,当深度网络使用大量训练数据很好地执行和泛化时,研究者将对数据进行扩充。其目标是人为地创建包含同类特征的新图像。
研究者使用的方法
迁移学习
因为数据集包含的图像与ImageNet中的图像相似,所以研究者从在ImageNet上预先训练过的CNN模型开始。
其目的是冻结可以捕获通用特征的较低层次的预训练模型,同时对特定领域的较高层次进行微调。
研究者还将最后一层重新定义以输出13个值,每个类一个。
通过对不同数量的冻结层进行试验,发现7个是最好的。研究者还使用了SGD优化器来减轻重量,以防止过度拟合。
学习率调整
为了进一步改善结果并使模型收敛到全局最小值,需要调整学习率。研究者没有通过实验确定最佳学习率,而是选择使用循环调整学习率。
这种方法使学习率呈周期性变化,从而使模型收敛到几个局部最小值,同时也避免了“手工”寻找最佳学习率的需要。
快照集成
集成方法在提高模型整体性能方面非常有效。然而,在计算上,为集成学习分别训练几个不同的模型可能花费较大。这就是研究者选择在循环LR调度中使用快照集成的原因。
快照集成在训练期间定期保存模型的参数。其思想是在循环LR调度过程中,将模型收敛到不同的局部最小值。
因此,通过将模型参数保存在不同的局部最小值处,研究者可以获得了一组为预测提供不同见解的模型。可以在单个训练周期中收集集成的模型。
对于每幅图像,研究者将每个“快照”模型的类别概率预测串联起来,以形成一个新的数据点。然后,将这些新数据输入到XGBoost模型中,以基于快照模型进行预测。
子类决策
在检查单个模型验证集上的混淆矩阵后,研究者发现,它们经常将不同的类别混淆。
例如,研究者发现经常混淆在一起的三个子类:
“房间”:卧室,厨房,客厅,办公室
“自然”:海岸,森林,山脉,野外,高速公路
“城市”:市区,街道,高层建筑
该模型已经非常擅长区分这些子类,但是要想获得良好的性能,模型还需要准确识别子类中的分类。
为此,研究者使用与前面相同的方法,在每个子类上训练三个独立的新模型。
有些类的训练数据很少,因此研究者增加了数据扩充量。研究者还发现了针对每个子类调整的新参数。
在预测过程中,研究者首先使用在整个数据集上训练的模型,然后,对于得到的预测,如果某一类的概率低于某一阈值,就使用相关子类模型预测的类。
抗锯齿处理方法
大多数现代卷积网络,例如ResNet18,都不是位移不变的。
网络输出可能会发生巨大变化,只需对输入进行很小的移动或平移即可。这是因为卷积网络中的跨步操作忽略了Nyquist采样定理和别名,从而打破了位移等方差。
研究者决定采用抗锯齿处理方法。只需在网络的卷积层之后添加一个“ BlurPool”层即可,这是一个模糊滤镜和一个子采样层。
实验结果表明,该方法不仅提高了图像不同移位之间的分类一致性,而且由于具有较好的泛化能力,提高了分类精度。使用经过预训练的抗锯齿ResNet18模型来对挑战的数据集进行微调。
借助抗锯齿处理方法,研究者希望通过将模型推广到图像转换和平移,来克服因数据稀缺而导致的过度拟合。
结果总结
对于所使用的方法可以总结如下:对ResNet18模型进行5个epoch的微调,除了调整大小外不需要任何处理,其测试精度已经达到0.91442。
由于数据和计算量很少,在相关任务上,该模型已经显示出良好的性能,这显示了迁移学习的显著效率。
增加10个epoch的数据扩充和训练,得到了0.93076的测试精度。
这证实了拥有一个大型训练数据集的重要性,它可以以更高的精度来预测没有代表性的的类。这也说明了学习率是模型收敛的一个重要参数。
其次,快照集成在所有数据上训练模型,其测试精度提高到0.95000。
这说明循环LR调度能使研究者通过不同行为的单个训练周期模型获得数据,而XGBoost元学习者可以从预测中提取有用信息。
通过对比拉伸所有图像和特定子类的训练模型,并结合它们的预测,测试精度提高到0.95865。
在对子类的准确分类中,混淆矩阵有了明显改进,尤其是对于“城市”子类。
开发某些类的“expert”模型,并将其与擅长区分子类的模型一起使用,被证明是非常有效的。
最后,在对ResNet18网络进行抗锯齿处理后,将训练集和验证集结合起来,使用所有可用于训练的注释数据,其测试精度提高到0.97115。
抗锯齿是提高泛化能力的有效方法,当图像数据有限时,抗锯齿处理方法尤为重要。
研究者的其他思考
单通道图像
这些图像是灰度的,尽管加载时它们被编码成三个通道,但它们可以表示为单通道矩阵。研究者的想法是,这样的数据降维可以加快训练速度,同时保留所有必要的东西。
研究者还尝试通过其他方式获取集成的模型,例如使用不同处理方法(使用/不使用类平衡,使用不同的图像增强技术,使用不同的数据增强方法)在图像上训练模型,但是这些方法更加昂贵,且没有显著的准确性。
生成对抗网络
如上所述,数据增强和类平衡在模型性能中起着关键作用。除了经典的图像处理之外,生成的模型只能用于合成带注释的数据。例如,DAGAN模型可用于数据扩充,而BAGAN可用于平衡。
灰度ImageNet预训练
提供的数据集图像与ImageNet数据集的自然图像具有相似性,不同之处在于研究者的图像是黑白的。因此,在灰度图像上进行预训练的模型更为重要。
人工图像着色
如果无法获得灰度图像的预训练模型,那么下一个想法就是对图像进行人为着色,希望可以获得更多信息。
GitHub:
https://github.com/kayoyin/GreyClassifier
原文链接:
https://towardsdatascience.com/latest-winning-techniques-for-kaggle-image-classification-with-limited-data-5259e7736327
福利:关注本公众号(ID:turingtopia)
特别推荐
如果您对工业互联网、数据中台、精准营销、智能推荐、人脸识别等业务经验和AI应用感兴趣,就来@派小僧 吧!
一线专家给你:
最全面的趟坑总结;
最前沿的实践经验;
最新落地的行业应用案例。
立即关注,一网打尽!
(ID:python_daydayup)
閱讀更多 圖靈聯邦 的文章