返回列表

5th place solution

560. Benetech - Making Graphs Accessible | benetech-making-graphs-accessible

开始: 2023-03-21 结束: 2023-06-19 教育内容生成 数据算法赛
第五名解决方案

第五名解决方案

排名: 第5名

作者: qdv206 (Anh Pham, Pham Van Linh, NguyenThanhNhan)

发布时间: 2023-06-29

创建时间: 2023-06-20

非常感谢Kaggle和Benetech举办这场有趣的竞赛,这里可以使用多种不同的方法,创意无穷无尽。考虑到私有测试集中存在强烈的分布偏移,我们对最终的成绩感到相当满意。

摘要

我们的解决方案包含三个主要组成部分:

  • 合成数据生成
  • 三阶段训练matcha模型
  • 单独处理散点图

1. 合成数据生成

早期我们就意识到这场竞赛的独特之处:我们不受限于现有数据集。如果模型在处理某些图表模式时遇到困难,我们可以生成大量具有这些模式的图表,而matcha模型非常强大,能够从中学习。

我们开始基于这个出色的仓库进行开发:https://github.com/rakutentech/chart-synthesizer。我们使用竞赛提取的数据和ICDAR数据作为验证,并尝试模拟其中的各种模式。例如:

  • 不同的字体、刻度方向、刻度样式、背景颜色、网格样式等
  • 为条形图和线图添加误差线
  • 将直方图作为独立的图表类型生成
  • 困难的线图模式,例如当线条起始点非常靠近刻度标记但未接触时,如果没有额外的训练数据,模型很可能会将该刻度值包含在预测中
  • 添加模糊和噪声效果,以还原提取图表的外观

我们生成数据的一些示例:
生成的线图示例
生成的条形图示例

在每一轮训练中,我们都会分析验证集,找出得分较低的模式,并将这些模式添加到图表生成代码中。通过重复这一过程,我们的公共排行榜得分从0.74提升到了0.82。

借助我们的生成代码,可以为每个训练阶段创建所需数量的条形图、线图和散点图。对于点图,我们从@brendanartley提供的优秀数据集中采样了10,000张图像。

2. matcha模型的三阶段训练

感谢@nbroad的慷慨分享,我们使用`matcha-base`模型参赛并迅速取得了不错的成绩。

训练分为三个阶段:

  • 从`matcha-base`检查点开始,将模型作为图表分类器进行训练。该模型训练5个epoch,使用少量合成数据并对提取的数据进行过采样
  • 使用第一阶段的权重,继续训练10个epoch以从所有图表类型中提取数据序列。在此步骤中,我们添加了大量自行生成的合成数据(约150,000张图像)与原始数据集结合
  • 使用第二阶段的权重,针对每个图表类型组分别微调模型5个epoch:
    • 垂直条形图/点图(添加50,000张合成垂直条形图、5,000张直方图、5,000张点图)
    • 水平条形图(添加50,000张合成图)
    • 线图(添加200,000张合成图)
    • 散点图(添加30,000张合成图)

在推理时,首先运行图表分类器,然后每组图表将由各自的专用模型处理。

最初我们的流程只有第2步和第3步,并使用第2步的模型作为分类器。但后来我们观察到,添加大量合成数据会降低分类任务的性能。因此,我们将分类器的训练单独分离出来。

也可以使用简单的CNN进行分类任务,但从早期实验来看,使用matcha能获得略好的性能,因此我们坚持使用它。

部分训练细节:

  • 第一阶段和第二阶段的学率为3e-5,第三阶段为2e-5,使用带预热的余弦调度
  • Adafactor优化器
  • 最大patch数2048,最大长度512
  • 冻结编码器的前4层
  • 预测字符串:<chart_type><start>x1|y1;…;xn|yn<end>
  • 直方图在训练时被视为独立的图表类型,在推理时映射回垂直条形图
  • 基于数据系列范围进行动态舍入

3. 散点图处理

虽然上述方法帮助我们在线图、点图和条形图中取得了良好效果,但我们发现散点图对matcha来说更难处理。因此,我们为散点图开发了独立的方案:

  • 绘图区域和刻度标签检测:使用CACHED的输出
  • 文本行旋转:使用MobilenetV2骨干网络训练角度分类任务
  • 文本行OCR:使用vietocr的seq2seq模型训练文本行读取任务。我们修改了编码器,使用带空洞卷积的ResNeXt50
  • 散点标记检测:使用CoaT骨干网络的Mask-RCNN完成此任务。我们使用detectron2训练了该模型
  • 每个标记的最终值通过标记位置、刻度标签位置和刻度值推导得出

这一流程帮助我们在散点图的公共榜上获得0.09分,私有榜上获得0.28分,这也是我们能够在私有测试集中存活的关键。

感谢您的阅读,如有任何问题请随时联系我们。

更新:我们的解决方案推理笔记本现已发布:https://www.kaggle.com/code/qdv206/benetech-5th-place-inference

同比赛其他方案