图像分类比赛中你可以用如下方案举一反三

2026-04-29 18:47:00
aiadmin
原创
1

雷锋网 AI 研习社按,正在本文中,作家将向行家先容其正在 Kaggle 植物小苗分类大赛()中所行使的办理计划。本文作家也曾位列该项赛事排行榜榜首达数月之久,并最终斩获第五名。作家行使的要领普适性额外强,能够用于其它的图像识别使命。雷锋网 AI 研习社将原文编译料理如下。

有目共睹,Kaggle 是一个举行预测筑模及数据解析的竞赛平台。正在这个平台上,统计学家和数据科学家竞相修筑最佳的模子,这些模子被用于预测、刻画公司和用户上传的数据集。这种众包的形式之以是被广为接纳,是由于对待统一个预测筑模使命来说,恐怕存正在众数种办理议略,然则念要事先清晰哪种技巧或解析要领是最有用的险些不恐怕。[1]

Aarhus 大学信号惩罚磋商小组与南丹麦大学合营,宣告了一个用于该使命的数据包,此中搜罗处于分歧孕育阶段的 12 个物种(共计 960 种植物)的图像。[1][2]

为了对行使该数据库获得的分类结果举行准绳化评估,构制者供应了基于 F1 值的对照基准,你能够通过如下链接获取这个数据集:。[13]

正在大无数呆板进修使命中,咱们最先要做的(也是最要紧的使命)便是正在行使算法之前解析数据集。这一办法之以是要紧,是由于它可能让咱们对数据集的丰富度有深切的解析,这最终将有助于算法的策画。

正如文中所提到的,该数据集共蕴涵 4750 张附属于 12 个种别的植物图片。然而,如上图所示,这种散布是不匀称的,各品种其余植物散布从最众 654 张图像到起码 221 张图像。很昭着数据是不均衡的,咱们必要对数据举行均衡惩罚,以便获取最佳的分类后果。本文将正在第三步中商酌这个题目。

为了更好地剖释数据,对图像举行可视化惩罚异常要紧。所以,咱们将每类植物的示例图片浮现了出来,以便看到图像之间的分歧。

上面这些图片看上去实正在太像了,乃至于咱们不行直接看出什么新闻。所以,我确定行使 t 散布随机邻域嵌入(

t 散布随机邻域嵌入(t—SNE)是一种非常适合对高维数据集举行可视化的降维技巧。这种技巧能够通过「Barnes-Hut」近似算法来告终,这使得它可能被行使于大型的线]

把稳窥察之后,咱们险些看不出种别之间的区别。所以,清晰仅仅是人类难以区别这个数据,照样呆板进修模子也很难区别这个数据很要紧。以是,咱们将为此做一个根基的对照基准。

正在出手创造模子的对照基准前,咱们必要将数据划分为熬炼数据集和验证数据集。正在原始测试集上测试模子之前,验证集起到了测试数据集的功用。以是,一个模子根基上是正在熬炼数据集进取行熬炼,正在验证集进取行测试,跟着年光的推移,模子正在验证集上的职能将会擢升。

一朝咱们对验证集上的测试结果感觉合意,咱们就能够正在确实的测试集上行使该模子。通过这种形式,能够看出模子是否正在验证集上产生欠拟合或过拟合气象,这能够助助咱们更好地拟合模子。

当获取了熬炼集和验证集之后,咱们将出手行使数据集的对照基准。正如所睹,这是一个分类题目:给定测试集,咱们必要将图片归类到 12 个种别中的某一类。咱们将行使卷积神经汇集(CNN)来完结这项使命。

实情上,有很众要领能够创筑卷积神经汇集(CNN)模子,咱们将行使 Keras 深度进修顺序库来告终第一个对照基准。咱们还将行使 Keras 中供应的预熬炼好的模子,这些模子仍旧诈欺 ImageNet 数据集熬炼过,咱们将对其举行调优以满意使命需求。

重新出手熬炼一个卷积神经汇集(CNN)的功用相当低下,咱们将诈欺正在蕴涵 1000 类图像的 ImageNet 上预熬炼好的卷积神经汇集(CNN)的权重,然后通过将某些层仍旧为「冻结」状况,再将少少层解冻并举行熬炼,从而举行调优。这是由于,最上面的层进修到纯洁的根基特质,而咱们不必要对其举行熬炼,能够直接将它们行使到咱们的使命中。必要留意的一点是,咱们要检讨数据集是否与 ImageNet 相像,以及咱们的数据集领域有众大。这两个特质将确定咱们怎样举行调优。倘若你念解析更众的细节,请参阅 Andrej Karpathy 的博客()。

正在植物小苗检测竞争的处境下,数据集领域很小,然则与 ImageNet 有些雷同之处。所以,咱们能够最先直接行使 ImageNet 的权重,仅仅正在对照基准的根柢上增添一个可能对 12 个类举行分类的最终输出层。接着,咱们将逐步解冻少少模子底部的层,并仅仅对这些解冻的层举行熬炼。

因为 Keras 库供应了豪爽预熬炼好的模子,咱们采用 Keras 为对照基准举行初始化。的确而言,咱们将行使 ResNet50 和 InceptionResNetV2 这两个模子。很要紧的是,咱们必要用一个纯洁模子和一个额外高端的模子对数据集举行基准测试,以便察觉给定模子是否出现了欠拟合和过拟合。

别的,咱们还能够检测这些模子正在 ImageNet 数据集上的职能,查看 Keras 中每个模子()的参数个数,从而拣选对照基准模子。

正在第一个基准测试中,我删除结束果的输出层,并增添了一个可能对 12 个种别举行分类的最终输出层。别的,我将总结出的模子运转结果和参数的个数打印了出来,下图是结果几层汇集的新闻截图:

我共将该模子运转了 10 轮,而实行结果正在第 6 轮之后就饱和了。熬炼的无误率为 88%,验证的无误率则为87%。

为了进一步擢升模子的职能,咱们解冻了少少模子底部的层,而且令其进修率呈指数景象递减,像如许,咱们熬炼了更众的层。这个操作使模子职能提升了 2%。

一朝计算好了对照基准,咱们就必要出手对其举行刷新。最先,咱们能够举行数据加强惩罚,填充数据召集的图像数。

然则正如上文所述,咱们获得的数据集是不均衡的,咱们必要对其举行均衡化惩罚,从而行使于熬炼模子的每一批的数据中都有匀称散布的 12 类图像。

实际生计中的数据集往往都是不均衡的,而模子正在样本数目较少的种别上的职能并不太好。以是,将一个具有少数样本的类误分类为一个样本数目较众的类的本钱凡是要比将数目较众的类误分类高得众。

针对不均衡进修的自合适样本合成要领(ADASYN):ADASYN 为样本较少的类天生合成的数据,这种要领会天生更众较难进修的数据集样本。

ADASYN 的核思念念是,遵照进修的难题水平,对样本数少的种别实例行使加权散布。ADASYN 通过两种要领提升了对数据散布的进修后果:(1)省略种别的不均衡所带来的过失。(2)自合适地将分类的决议界限转换为更难题的样本。[5]

少数类过采样技巧(SMOTE):SMOTE 搜罗对少数类的过采样和无数类的欠采样,从而获得最佳抽样结果。

咱们对少数(相当)类举行过采样并对无数(寻常)类举行欠采样的做法能够获得比仅仅对无数类举行欠采样更好的分类职能(正在 ROC 空间中)。[6]

正在此用例中,能够证据 SMOTE 算法的结果更好,所以 SMOTE 的职能优于 ADASYN 算法。当数据集处于均衡状况后,咱们就能够延续举行数据加强管事。

接下来,咱们将进一步擢升模子结果。正在这里,咱们将对进修率举行优化,这里涉及到周期性进修率(cyclical learning rate)和带热重启的进修率(learning rate with warm restarts)技巧。正在此之前,咱们必要为模子找到恐怕的最佳进修率。这是通过绘制进修率和失掉函数的干系图来告终的,这一图像用来查看失掉函数值从哪里出手降低。

本文刻画了一种设定进修率的新要领——周期性进修率,它现实上让咱们不必再通过豪爽实行找到全体进修率的最优值和最佳进修安排。这种要领并不是枯燥地减小进修率,而是让进修率周期性地正在合理的界限值之间转移。诈欺周期性进修率替代固定的进修率举行熬炼,可能有用地正在不消举行调优的状况下擢升分类无误率,必要的迭代次数往往也更少。[11]

如上图所示,0.1 看上去犹如是一个不错的进修率。然则跟着越来越亲切全体最小值,咱们期望用更小的步长对最佳进修率举行搜索。「进修率退火」是一种告终这种操作的要领,受到这篇论文()的影响,我拣选行使带热重启的进修率。同时,咱们将优化器从 Adam 变为随机梯度降低(SGD),告终了带重启战略的随机梯度降低(SGDR)。

接下来,咱们能够行使上述技巧熬炼少少模子架构,然后将这些模子获得的结果举行兼并。这也便是所谓的模子集成,此刻它仍旧成为一种盛行技巧,然则这种技巧也将带来兴奋的算计开销。

所以,我确定行使一种名为疾照集成(snapshot ensembling)的技巧,通过熬炼一个简单神经汇集来到达集成宗旨,而且沿着优化旅途收敛到几个限制最小值,最终将模子参数保全下来。

右图:疾照集成示图谋。模子阅历了几个进修率退火周期,正在从众个限制最小值中遁离出来后,收敛到某最小值处。咱们为测试时集成的每一个最小值创造了一个疾照。

当进修率被固定下来后,我出手调度图像的巨细。我熬炼了一个针对待 64*64 图像巨细的模子(正在 ImageNet 上对其举行调优),解冻某些层,对其行使周期性进修率和疾照集成技巧,获取该模子的权重。将图像的尺寸改为 299*299,而且再次诈欺图像巨细为 64*64 的权重对其举行调优,并采用疾照集成技巧和带热重启的进修率。

倘若改换图像的巨细,必要再次采用周期性进修率、疾照集成、热重启等技巧寻找进修率和失掉函数之间的干系,获取最佳进修率。

正在结果一步,咱们将对结果举行可视化,看看模子对哪个种别的预测结果最好、对哪个种别的预测结果最差,而且咱们还能够采纳需要的办法进一步刷新结果。

正在呆板进修周围,非常是统计分类题目中,混浊矩阵(也称为差错矩阵)是一个特定的外格,它可能将算法的职能可视化,这种算法凡是是监视进修算法,正在非监视进修周围它凡是被称为成家矩阵。矩阵中的每一行代外预测种别中的一个实例,而每一列则代外确实种别中的一个实例(反之亦然)。这个矩阵之以是被称为「混浊矩阵」,是由于它可能让人很容易地看到体系是否混浊了两个类(即凡是将一个类舛讹象征为另一个类)。

从混浊矩阵中咱们能够看到统统的模子预测种别和确实种别不符的状况,咱们能够采纳办法去刷新模子。比方,能够做更众的数据加强管事,试着让模子更好地进修到分类礼貌。

结果,咱们将验证集与熬炼数据兼并,并通过仍旧获得的超参数,对模子举行结果一次熬炼,正在最终提交结果之前对测试数据集举行评估。

联系我们
联系人: 王先生
电话: 15640228768
微信: 1735252255
地址: 沈阳市铁西区兴华南街58-6号