Press "Enter" to skip to content

[译] 最新 Kaggle 制胜技巧:有限数据下的图像分类

图灵TOPIA

 

作者:Kayo Yin

 

编译:安然

 

图灵联邦编辑部出品

 

有 限数据下的图像分类挑战是一项含有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

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注