Kaggle 经典比赛 Bristol-Myers Squibb – Molecular Translation 高分方案解析

90 阅读2分钟

本篇文章为比赛第三名方案解析,该比赛涉及到CV-图像分割-医疗方向

介绍:在本次比赛中,参赛者将解释旧的化学图像。通过访问百时美施贵宝生成的大量合成图像数据,将图像转换回注释为 InChI 文本的基础化学结构

网址:www.kaggle.com/competition…

概述

我们的解决方案包括三个阶段:

  • 第一阶段:图像标题训练
  • 第二阶段:生成 InChI 候选物
  • 第三阶段:InChI 候选者重新排序

第一阶段:图像标题训练

这一比赛的一个重要方面是训练数据和测试数据之间的数据趋势差异。起初,我挣扎于 CV 和 LB 之间的差异,但后来我们注意到测试数据中盐和胡椒噪声较多。因此,我们通过在训练过程中添加盐和胡椒噪声的增强来解决 CV 和 LB 之间的差距。

第二阶段:生成 InChI 候选物

在第三阶段,通过多个模型估计图像与 InChI 候选对的似然性,并使用似然性最高的 InChI 候选作为最终输出。因此,在这一阶段,有必要生成各种高质量的 InChI 候选。
我们通过使用各种模型(如下所示)和光束搜索生成了大量的 InChI 候选者:

  • Swin Transformer + BERT 解码器(由 KF & lyakaap 提供)
  • Transformer 在 Transformer + BERT 解码器(由 KF 提供)
  • EfficientNet-v2 后接 ViT + BERT 解码器(由 lyakaap 提供)
  • EfficientNet-B4 + Transformer 解码器(图像大小:416x736)(由 camaro 提供)
  • EfficientNet-B4 + Transformer 编码器/解码器(图像大小:300x600)(由 camaro 提供)

第三阶段:InChI 候选者重新排序

我们的解决方案的关键部分之一是重新排序。事实上,大多数单一模型的结果都在 LB0.9~0.8 左右,但通过使用以下逻辑对多个模型生成的结果进行重新排序,我们能够达到最终结果(LB0.54)。

  • rdkit.Chem.MolFromInchi 函数用于验证每个 InChI 候选者。(is_valid)
  • 对于每个 InChI 候选物,计算用于多个模型训练的损失(交叉熵/焦点损失),并在模型间平均。 (损失)
  • 按“is_valid”降序、“loss”升序排序候选人,得分最高的 InChI 为最终输出。

什么不起作用

  • 原子和键的目标检测(使用 yolov5)

    • 重构类似于 Dacon.ai 的冠军解决方案
    • 使用检测结果作为额外的输入通道
  • MLM 预训练使用 extra_approved_InChIs.csv

  • InChI 候选物的排名学习(点对点)

    • 执行真实/虚假分类和 Levenshtein 距离预测,使用由 beam search 生成的虚假样本作为负例。