返回列表

8th Place Solution /w Code (minimal ver.)

363. Bengali.AI Handwritten Grapheme Classification | bengaliai-cv19

开始: 2019-12-19 结束: 2020-03-16 计算机视觉 数据算法赛
第8名解决方案(含代码 - 最小版本)

第8名解决方案(含代码 - 最小版本)

作者: Qishen Ha (Grandmaster) | 排名: 第8名

大家好,

首先,我要感谢 Kaggle 和主办方举办这次比赛。

祝贺所有的获胜者!

Pipeline Illustration

我的流程示意图。它包含2个模型:已见模型和未见模型。

摘要

  • 未使用外部数据
  • 我在流程中使用了2阶段预测,如上图所示,它包含一组2个模型(已见模型 和 未见模型)。
  • 我使用 Arcface 来区分未见的字素。就像区分未见过的人脸一样 ;)
  • 如果检测到图像是“已见”的,我直接使用已见模型的输出作为预测结果。如果检测到图像是“未见”的,我会将其传递给未见模型以获得预测结果。
  • 已见模型和未见模型之间的不同点如下:
    • 已见模型仅使用非常少的数据增强,以确保它能“过拟合”已见字素;而未见模型使用大量数据增强,使其泛化到未见字素。
    • 已见模型有5个输出头,包括 Arcface 输出。而未见模型有正常的4个输出头。
    • 除了输出头的数量外,顶部的架构也略有不同。
    • 当预测由已见模型做出时,我将预测的字素分解为3个组件;而当预测由未见模型做出时,我直接使用预测的3个组件。

代码

我已经在 Kaggle Kernel 上发布了我的训练和测试流程的最小版本,如下所示:

这个最小版本使用了两个 EfficientNet-b1,在 128x128 分辨率下训练 30 个 epochs,可以在 Public LB 上获得 0.985+ 或在 Private LB 上获得 0.935+ 的成绩。
如果您觉得我的笔记本有帮助,请点赞支持!


要在 Public 或 Private LB 上获得超过 0.993+ 或 0.950+ 的成绩,您只需要简单地:

  • 将主干网络更改为 EfficientNet-b5 / b6 / b7 / b8
  • 在 224x224 分辨率下训练
  • 训练 60~90 个 epochs
  • 集成更多的已见和未见模型

如果您有任何问题,请随时给我留言。
谢谢!

同比赛其他方案