作者:Earhian (乔健), YourVenn (王乙衡)

识别座头鲸,Kaggle竞赛第一名解决方案解读

不久之前,Kaggle座头鲸识别挑战赛结束,Earhian(乔健) YourVenn(王乙衡)、Tom 57、A.L.四位选手组成的团队夺得了第一名。本文主要介绍了冠军团队的解决方案。

图注:Kaggle座头鲸识别挑战赛 leaderboard

为了帮助鲸鱼保护,科学家们使用照片监视系统 (Photo Surveillance Systems) 来监视海洋活动。他们使用鲸鱼尾巴这一独一无二的标记来在连续的图像中识别鲸鱼,并对它们的活动进行细致地分析。在过去的四十年里,大部分工作基于科学家们的手工作业,这也使得大量的数据未被充分利用。

在这一竞赛中,我们是要构建算法来识别图像中的鲸鱼个体,而难点在于训练样本的严重不均衡以及存在近三分之一的无标注(new whale)数据。

1.概述

这是一个few shot learning和细粒度分类的问题。比赛初期,我们使用了softmax + 固定阈值的方法,仅对有标注的样本进行训练并通过阈值插入new whale的预测,但是没有取得很好的效果(MAP@5 < 0.9)。为了将new whale加入网络中训练,我们针对每一类鲸鱼进行二分类(如下图所示),并且使用triplet loss来做特征度量。通过大量实验,SE-resneXt154被作为最优的backbone,取得了单模型0.96的baseline,在追加了一系列tricks之后,单fold模型达到了0.969 (private LB: 0.97+ 榜上第三名)。最后,借助4 fold cross validation,以及类别平衡后处理,得到了最终public & private两榜第一名的0.973。

2.网络输入

我们使用RGB + Mask的四信道输入(Mask来源于我们训练的分割模型,通过论坛中开源的450张标注数据训练即取得了很好的效果: MAP for local cross validation: 0.96+ )。

3.鲸鱼水平翻转,并赋予新的id(+0.006~0.007)

论坛中,选手Heng CherKeng 提出“根据鲸鱼尾部不对称的特性(见下图),将其翻转可以得到新的类别”这一假设。这个假设没有得到很多的赞同票,但在我们的实验中取得了非常好的效果。赛后我们也获悉,第三名Pudae使用了同样的技巧亦提高了分数。

4. 伪标签(+0.002)

在模型得到public 0.96+的分数时,我们做了一次伪标签:将预测置信度为1的测试样本加入到训练集中。

5. 类间平衡(+0.001~0.002)

我们发现随着模型性能的提升,预测结果中top1对应的不同类别数也在增加(见下图)。所以我们用了以下策略:

假设五个预测为:class_1 class_2 class_3 class_4 class_5

如果1) class_1的置信度减去class_2的置信度 < 0.3, 2) 并且class_2没在top1中出现过,3) 而class_1在top2中多次出现,则交换class_1与class_2的位置。

最后,感谢队友们的努力:@Yiheng Wang, @Peiyuan Liao and @Thomas Tilli。感谢@ Heng CherKeng,祝贺3位新的Grandmaster!@SeuTao, @David, @Weimin Wang。


我们已经将方案代码进行了整理并开源:

  • https://github.com/earhian/Humpback-Whale-Identification-1st-


英文版本可从Kaggle论坛查看:

  • https://www.kaggle.com/c/humpback-whale-identification/discussion/82366

工程图像分类细粒度识别Kaggle
3
相关数据
few shot learning技术

在标注数据量比较少时,试图让算法学习好的特征,并可以泛化这些罕见的类别,而不需要额外的训练。few shot learning包括基于Finetune、基于metric、基于graph neural network、基于元学习meta learning等方向。如果只有一个标注样本,称为one shot learning。

推荐文章
暂无评论
暂无评论~