专栏首页相约机器人数据受限的Kaggle图像分类的最新获奖技术

数据受限的Kaggle图像分类的最新获奖技术

作者 | Kayo Yin

来源 | Medium

编辑 | 代码医生团队

在本文中,将介绍用于课堂内Kaggle挑战的方法。花了大约两个星期的时间在挑战赛上,最终提交分数为0.97115,使在最终排行榜上排名第二。

https://www.kaggle.com/c/cs-ioc5008-hw1/overview

挑战介绍

提出的挑战是具有13个 类的自然图像分类任务。这项挑战的第一个困难是缺乏可用的数据:仅3 859张用于训练的图像。挑战的规则是在训练期间也不要使用外部数据。如果数据很少,该模型将更容易过度拟合而无需学习概括。

而且,由于这些图像是灰度图像,因此与诸如ImageNet数据集之类的彩色图像相比,它们包含的信息更少,因此,彩色图像上的预训练模型无法直接应用于此任务。在进一步检查数据集后,许多类都包含视觉上非常相似或包含相同元素的图像。当混淆此类时,模型将失去准确性。

图片分类的一些例子0

数据处理

首先,数据集中的图像并非都具有相同的尺寸,因此在将所有图像输入模型之前都要调整其大小。一半以上的训练图像的尺寸为256 x 256,因此将其他图像调整大小或裁剪为该尺寸。

还将应用归一化。最初,图像表示为张量,像素值的范围为0到255。将每个值简单地除以255即可重新缩放并获得0到1之间的值,这些值是神经网络首选的。此外,将对比度拉伸应用于所有图像以增强图像。这将有助于模型更清楚地“查看”图像中的细节。

这些类也不平衡,这意味着每个类之间的数据量不相等。这将使模型或多或少地偏向某些类别。为了解决此问题,人为地添加了更多图像,以使每个类别具有与最大类别一样多的图像。要从小类中重新采样,会在图像中随机裁剪一个区域以创建一个新样本。这是基于这样的假设,即裁剪后的图像将包含该类特征相同的元素。

最后,随着深层网络在大量训练数据上的表现并得到更好的概括,将执行数据扩充。目标是人为地创建包含同类特征的新图像。为此,使用的技术总结如下:

在开始训练之前,将数据集分为一个训练集(80%)和一个验证集(20%)。将以上讨论的所有处理技术都应用于这两个集合,除了仅在训练集合上使用的图像增强。

迁移学习

由于数据集包含与ImageNet中相似的图像,因此将从在ImageNet上进行了预训练的CNN模型开始。想法是冻结可以捕获通用特征的预训练模型的较低层,同时将较高层微调到特定域。还重新定义了最后一层以输出13个值,每个类一个。

ImageNet数据集样本

PyTorch提供了几种具有不同架构的预训练模型。其中,ResNet18是我采用的体系结构,因为它在运行5个时期后运行各种体系结构后,在对数据进行训练后可提供最佳的验证准确性。在尝试了不同数量的冷冻层后,发现7个是最好的。还使用了SGD优化器来减轻重量,以防止过度拟合。

学习率调度

为了进一步改善结果并使模型收敛到全局最小值,要调整学习率。不是通过实验确定最佳学习率,而是选择使用循环学习率调度。这种方法使学习率周期性变化,从而使模型收敛到几个局部最小值。它还消除了“手工”寻找最佳学习率的需要。

快照集成

集成方法在改善模型的整体性能方面非常强大。但是,单独训练几个不同的模型进行集成学习在计算上也很昂贵。这就是为什么选择将快照集成与循环LR调度结合使用的原因。

快照集成可在训练期间定期保存模型的参数。这个想法是在循环LR调度期间,模型收敛到不同的局部最小值。因此,通过将模型参数保存在不同的局部最小值处,获得了一组可以为预测提供不同见解的模型。这使可以在单个训练周期中收集模型的整体。

对于每幅图像,将每个“快照”模型的类别概率预测串联起来,以形成一个新的数据点。然后,将这些新数据输入到XGBoost模型中,以基于快照模型进行预测。

子类决策

在检查单个模型的验证集上的混淆矩阵后,发现它常常使一类混淆同一类。实际上,发现三个经常混淆在一起的子类:

  • “房间”:卧室,厨房,客厅,办公室
  • “自然”:海岸,森林,山脉,野外,高速公路
  • “城市”:市区,街道,高层建筑

而且,该模型已经非常擅长区分这些子类(并查找郊区)。要获得出色的性能,剩下的就是模型可以准确地识别子类中的分类。

为此,使用与以前相同的方法在每个子类上训练三个新的单独模型。有些班级的训练数据很少,因此增加了数据扩充的数量。还发现了针对每个子类调整的新参数。

在预测期间,首先使用在整个数据集上训练的模型。然后,对于获得的每个预测,如果类别概率低于某个阈值,则取而代之以相关子类别模型预测的类别。

抗锯齿

大多数现代卷积网络,例如ResNet18,都不是位移不变的。网络输出可能会发生巨大变化,只需对输入进行很小的移动或平移即可。这是因为卷积网络中的跨步操作忽略了Nyquist采样定理和别名,从而打破了移位等方差。

决定采用最近在2019年4月的论文中提出的抗锯齿方法。只需在网络的卷积层之后添加一个“ BlurPool”层即可,这是一个模糊滤波器和一个子采样层。事实表明,这种方法不仅可以改善图像不同移位之间的分类一致性,而且可以提高归纳的准确性,从而提高分类精度。

使用了经过预训练的抗锯齿ResNet18模型来对挑战的数据集进行微调。借助抗锯齿功能,希望通过将模型推广到图像转换和平移来克服因数据稀缺而造成的过度拟合。

结果汇总

所使用的方法可以总结如下:

在没有任何处理的情况下,对ResNet18模型的数据进行5个时期的微调,除了调整大小外,测试精度为0.91442。这显示了转移学习的显着效率-只需很少的数据和计算,该模型就已经可以在相关任务上显示出良好的性能。

添加数据增强和训练10个纪元以上,获得0.93076的测试精度。这证实了拥有大量训练数据集的重要性以及增强技术的可扩展性。

加上班级平衡和学习率安排,测试准确性达到0.94230。此外,混淆矩阵表明,平衡后,该模型可以更准确地预测代表性不足的类别。这也表明学习率是模型收敛的重要参数。

然后,在对所有数据进行训练的模型上集成快照,测试精度提高到0.95000。这说明了循环LR调度如何使我们能够通过具有不同行为的单个训练周期模型来获得数据,并且XGBoost元学习者可以从其预测中提取有用的信息。

通过对比拉伸所有图像以及特定子类上的训练模型并将其预测结合起来,测试精度提高到0.95865。混淆矩阵显示出在子类中准确分类的改进,尤其是对于“城市”子类。开发在某些类上是“专家”的模型并将其与擅长区分子类的模型一起使用是非常有效的。

最后,在对ResNet18网络进行抗锯齿并组合训练和验证集以使用所有可用于训练的带注释数据之后,测试精度将提高到0.97115。抗锯齿是提高泛化能力的强大方法,当图像数据有限时,抗锯齿至关重要。

其他想法

这是必须解决的其他一些想法,这些想法要么效果不好,要么没有尝试的方法。

单通道图像

图像是灰度的,因此尽管在加载图像时将它们编码为三个通道,但它们可以表示为单通道矩阵。这种降维可以在保留所有必要信息的同时加快训练速度,但是通过实验,这种方法显示出在不显着加快训练速度的情况下会失去准确性。

其他合奏方法

还尝试过对通过其他方式检索的模型进行整合,例如在使用不同处理方法(使用/不使用类平衡,使用不同的图像增强技术,使用不同的数据增强方法)后在图像上训练的模型,但是这些方法在计算上更加昂贵,并且无法提供明显的效果更好的准确性。

生成对抗网络

如前所述,数据增强和类平衡在模型性能中起着关键作用。除了经典的图像处理之外,生成模型只能用于合成带注释的数据。例如,DAGAN模型可用于数据扩充,而BAGAN可用于平衡。

灰度ImageNet预训练

提供的数据集中的图像与组成ImageNet数据集的自然图像具有相似的内容,不同之处在于图像是黑白的。因此,在灰度图像上进行预训练的模型对于该任务将更加重要。

人工图像着色

如果无法获得灰度图像的预训练模型,那么下一个想法就是对图像进行人为着色,以期添加更多信息。确实存在针对人工图像着色的经过预先训练的模型,并且可以公开获得。

感谢阅读,希望喜欢这篇文章!可以在GitHub上找到方法的完整代码。

https://github.com/kayoyin/GreyClassifier

本文分享自微信公众号 - 相约机器人(xiangyuejiqiren),作者:代码医生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在自己的数据集上训练TensorFlow更快的R-CNN对象检测模型

    计算机视觉正在彻底改变医学成像。算法正在帮助医生识别可能错过的十分之一的癌症患者。甚至有早期迹象表明胸部扫描可有助于COVID-19的识别,这可能有助于确定哪些...

    代码医生工作室
  • 机器学习的十大图像分类数据集

    为了帮助构建对象识别模型,场景识别模型等,编制了最佳图像分类数据集的列表。这些数据集的范围和大小各不相同,可以适应各种用例。此外数据集已分为以下几类:医学成像,...

    代码医生工作室
  • 机器学习中踩过的坑,如何让你变得更专业?

    数据科学家Archy de Berker 在本文中详述了他和周围同伴在机器学习探索中踩过的坑,这也都是大家经常性遇到的问题。他 希望通过这一篇文章,带大家了解机...

    代码医生工作室
  • 大会 | 智能感知与计算研究中心11篇论文被CVPR接收

    AI 科技评论按:本文作者郭瑞娥,首发于中科院自动化所「智能感知与计算研究中心」微信公众号,AI 科技评论获授权转载。 CVPR 是计算机视觉、模式识别和人工智...

    AI科技评论
  • 【Jetson开发项目展示】用Jetson NANO检测植物病害

    该项目可用于帮助小社区的农民建立知识和教育他们种植的作物,并帮助早期识别和预防常见的植物/作物疾病的传播。

    GPUS Lady
  • HAWQ技术解析(一) —— HAWQ简介

    一、SQL on Hadoop 过去五年里,许多企业已慢慢开始接受Hadoop生态系统,将它用作其大数据分析堆栈的核心组件。尽管Hadoop生...

    用户1148526
  • 这个AI正在解码我们的大脑,它比人类更适合当“科学家”

    原作:Roger Highfield @《连线》 李杉 李林 编译整理 量子位 出品 | 公众号 QbitAI ? - 壹 - 罗米(Romy Lorenz)是...

    量子位
  • HDU 1509

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot...

    csxiaoyao
  • 详述车道检测的艰难探索:从透视变换到深度图像分割(附代码)

    王小新 编译自 Medium 量子位 出品 | 公众号 QbitAI 找到马路上的车道线,对于人类来说非常容易,但对计算机来说,一点阴影、反光、道路颜色的微小变...

    量子位
  • 图片里的人在干嘛?让深度学习来告诉你 |谷歌CVPR2016论文详解

    明确对象描述的生成与解读 摘要 本文提出了一个可以生成针对图片中特定目标或区域明确描述(指代表达)的方法,这个方法也能理解或解释这一指代表达,进而推断出正确的被...

    AI科技评论

扫码关注云+社区

领取腾讯云代金券