Kaggle: Humpback Whale Identification

鲸鱼识别挑战赛

在这里插入图片描述

Humpback Whale Identification

奖金区的 solution 和 code 整理:

首次 Kaggle 竞赛,收货一个铜牌

在这里插入图片描述

数据分析

训练数据有 25,361 张,测试集有 7,960 张,共有 5004 + 1 (new_whale) 类的鲸鱼,未知身份的鲸鱼统一标记为 new_whale。在训练集中,属于 new_whale 的图像有 9,664 张,只有一张图像的类别有 2,073 类,数据的类别分布极不均衡,仅有单一图像的类别太多,这是一个 one-shot 的识别问题,使用分类来做不会得到较好的结果,需要使用度量学习,不过也有例外,第三名就是使用分类的方法,使用了 ArcFace,加上关键点,得到了 0.97113 的准确率。

在这里插入图片描述

鲸鱼尾部图像样例

评价指标

Mean Average Precision @ 5 (MAP@5):
在这里插入图片描述
具体的指标介绍,可以看这个 kaggle kernel:https://www.kaggle.com/pestipeti/explanation-of-map5-scoring-metric

建立本地验证集

保留仅有一张图像的类别,剩下的抽取 512 个 ID,每个 ID 随机抽取 1 张,new_whale 中抽取 230 张 (根据测试集中的 new_whale 比例),共 742 张作为本地验证机,与 LB 分数相差不多

我的方法

  • 分类
    使用分类的方法来做,首先 new_whale 不能算为一类,应该去掉 new_whale 类,使用剩下的 5004 类进行训练,在测试集上设置一个阈值,当模型预测该张图像类别的概率低于阈值时,加入 new_whale 类。但是分类的方法无法将 new_whale 的 9664 张图像加入训练,这是巨大的浪费,另外图像数量过少的类别,即使使用了 weightSampler 和 data augmentatipn 也无法得到较好的结果。我使用这种方法仅得到了 LB/PB:0.56911/0.56356 的分数;
  • Siamese network
    这是一个识别的问题,所以使用 Siamese 网络来进行识别,使用 kaggle kernel 训练 300 个epoch 后可以得到0.90 左右的分数,但是训练时间要 一周以上。使用 Siamese 网络的关键是进行 hard negative example mining,即挖掘难以识别的样本进行着重训练,这个 baseline 中使用 lap 库进行线性规划,挖掘 hard example,我想转化到 pytorch,但是hard negative example mining 部分没有复现成功,网络输入的图像配对策略仅为随机选取,分数仅能达到 0.7 左右;
  • ReID
    这题的关键是将 new_whale 部分的数据加入训练,所以可以考虑使用 ReID 的方法,使用 ReID baseline 可以达到 0.87 左右的分数;
  • 二分类
    还是那句话,这题的关键是将 new_whale 部分的数据加入训练,所以也可以使用分类的方法,但是将直接分成 5004 类转化为构建 5004 个二分类的分类器,每一个分类器判断改张图像是否属于该类,这样转化后可以将 new_whale 类加入训练,训练图像的数量增加很多,分数可以达到0.96 左右(第一名与第二名的大佬所说),但是我用这种方法仅得到了 0.9 的分数,看来还是调参不行,任重而道远;

通用的 trick

可视化

kaggle kernel

在这里插入图片描述

我的 code

github: pytorch https://github.com/xungeer29/Humpback-Whale-Identification

参赛感受

Kaggler 就是一群追求极致的人,kaggle 上的比赛就是一堆人一起将一个项目做到极致,真的是极致,每个细节都追求极致!!!

希望今年能拿个金牌

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值