返回列表

4th place solution

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

开始: 2023-03-21 结束: 2023-06-19 教育内容生成 数据算法赛

祝贺所有获奖者,并感谢主办方举办这场有趣的竞赛。
我也想感谢我的队友@fuumin621与我一起完成这项挑战性任务。

解决方案概要

与其他解决方案类似,我们的流程也包含散点图的物体检测和其他图表的端到端图表预测。
散点图:使用YOLOX进行图表边界框检测 + 使用YOLOX进行散点检测 + 使用matcha进行最大/最小轴标签的OCR识别
其他图表:使用原始合成数据训练的deplot模型

散点检测

我们采用以下两步物体检测方法检测散点,并通过matcha读取的轴标签确定散点坐标:

步骤1. 使用YOLOX进行图表边界框检测(模型大小:x,图像尺寸:640)
步骤2. 使用YOLOX在"图表边界框裁剪"图像上进行散点检测(模型大小:x,图像尺寸:960)

步骤2的训练数据包括竞赛数据(生成的、提取的)以及来自ICDAR数据集的538个散点图。

公开榜分数 : 私有榜分数 = 0.09 : 0.29

条形图、折线图、点图

我们使用多种图表数据源训练deplot模型:

  1. 生成的图表(竞赛数据)
  2. 提取的图表(竞赛数据)
  3. ICDAR数据集(1185个单序列 + 2992个多序列)
  4. @brendanartley的50万数据集(不含散点图)
  5. 原始合成数据集(垂直条形图:40000,水平条形图:40000,折线图:40000)
  6. 原始合成数据集(直方图:10000)

原始数据集(由matplotlib生成)

本次竞赛的核心重点是数据生成。
我们生成具有各种模式的图表,使模型对未知的私有数据集具有鲁棒性。
生成的图表使用竞赛数据集(提取的)和ICDAR数据集进行评估。
持续的图表修改和错误分析反馈使我们能够处理困难数据。
我们的数据在提高折线图精度方面特别有帮助(因此线条是否在刻度标签上非常重要!)。

针对常见错误的改进尝试:

  • 某些刻度标签上没有数值的折线图
  • 降低JPG压缩质量(模拟低分辨率和模糊字符)
  • 添加符号($ % , .)区分数字和符号(如8和$)
  • 扩展小数值的预测位数(如< 0.0001)
  • 将标签分隔成多行
  • 等...

以下是生成图表的示例:

训练配置(deplot)

训练数据配置

数据源 每轮样本数 总图表数
生成的 1000 50000
提取的 953 953
ICDAR 1000 4177
50万数据集 1000 400000
原始合成数据 2000 120000
原始合成数据(直方图) 100 10000

每轮训练按上述比例随机采样各数据源的图表。

训练条件

训练轮数:50
学习率:2e-4
调度器:余弦退火
批大小(累积):64

最终结果

图表类型 公开榜 私有榜
全部 0.86 0.69
垂直条形图 0.39 0.26
水平条形图 0.04 0.01
折线图 0.32 0.12
散点图 0.09 0.29
点图 0 0
同比赛其他方案