返回列表

7th place solution - no external data

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

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

第7名解决方案 - 无外部数据

作者:Thanh Hau Nguyen (GRANDMASTER)
发布日期:2023-06-21

在本次竞赛中,我选择使用多模型流水线方案而非端到端模型(如Donut、Deplot或Matcha)。做出此选择的原因是:仅使用Kaggle数据测试的端到端基线模型表现不佳,且需要高性能设备训练并耗费大量数据生成时间。

模型组成

  • 图像分类:用于识别图表类型
  • 文本检测:检测X/Y轴标签
  • 文本识别:读取检测区域文本(仅使用预训练模型,未微调)
  • 目标检测:识别X/Y轴刻度、散点及垂直/水平条形
  • 目标分割:分割折线图的线条及垂直条形(用于判断是否为直方图)
  • 预训练Deplot模型:作为流水线失效时的备用方案(559个CV文件中仅使用1次)

数据处理

  • 仅使用Kaggle官方数据
  • 将`extracted`数据按50%训练集/50%验证集划分
  • 所有`generated`数据用于训练集
  • 最终使用全部数据训练各模型的最终权重

结果

  • 最佳CV分数 - 公开榜分数(仅训练数据):0.871 - 0.86
  • 私有榜分数:0.67
  • 最佳公开榜 - 私有榜分数:0.86 - 0.69

流水线细节

步骤0:图表类型分类

使用v2s骨干网络进行分类,交叉验证准确率达99.2%。

通用处理流程(适用于所有图表类型)

通用流程图

步骤1:检测并读取X/Y轴标签

  • 使用文本检测模型识别标签多边形区域
  • 通过文本识别模型读取多边形内文本
  • 后处理:
    • 对X标签:从图像顶部到底部绘制水平线,选择与最多X标签多边形相交的直线(因文本检测模型存在误差)
    • 对Y标签重复相同处理

步骤2:检测X/Y轴刻度

  • 使用目标检测模型识别刻度
  • 后处理:通过绘制水平线过滤X刻度,垂直线过滤Y刻度

步骤3:映射标签与刻度

  • 基于标签与刻度的相对位置,在X轴方向使用IOU建立1对1映射,忽略无法配对的标签/刻度
  • 针对非直线型X标签的优化:
    • 从多边形提取X标签矩形区域
    • 以矩形各边中心为顶点绘制菱形
    • 在菱形最高点创建新矩形作为映射基准

垂直条形图处理

垂直条形图

步骤4:检测条形顶部数值点

使用目标检测识别条形顶部点(称为"数值框",因预测为矩形框而非点)

步骤5:映射X刻度与数值框

采用与标签-刻度映射相同的方法

步骤6:计算条形数值

  • 将数值框中心投影到Y轴
  • 根据最近两个Y刻度的值计算最终数值:
    数值框值 = Y1值 - abs((Y2值 - Y1值) / (Y2像素 - Y1像素) * (数值Y像素 - Y1像素))

直方图判断方法:

  • 基于直方图各柱状条紧密相邻无间隙的特征
  • 使用条形分割模型检测区域
  • 计算X轴方向占比:若分割区域宽度超过首末条形间距的95%,则判定为直方图

水平条形图处理

水平条形图

  • 将图表顺时针旋转90度后水平翻转,转换为垂直条形图结构
  • 应用相同的垂直条形图处理流程

折线图处理

折线图1
折线图2

步骤4:线条分割

使用分割模型识别线条,对虚线进行连接处理形成连续线条

步骤5:投影筛选

  • 将线条投影到X轴,保留可在X维度投影到线条的X标签与刻度
  • 获取对应剩余X标签的数值框

步骤6:计算数值点

  • 将数值框中心投影到Y轴
  • 与最近两个Y刻度的值比较计算最终数值

散点图处理

散点图

步骤4:散点检测

通过目标检测识别散点,计算包含散点的最大连通矩形区域,取所有图表框尺寸的平均值作为统一框大小

步骤5:映射刻度与数值框

在Y轴维度采用与垂直条形图相同的映射方法

步骤6:计算散点数值

  • 将数值框中心投影到X/Y轴
  • 分别与最近两个X/Y刻度的值比较计算最终坐标值

点图处理

处理方式与垂直条形图相似,但当X标签为数值型时,采用散点图的后处理方法

其他计算机视觉后处理亮点

  • 为避免文本识别错误,保留Y标签值为最长递增序列
  • 因预训练文本识别模型不含空格,使用额外文字检测模型分割多边形内单词,并按几何位置排序提升准确性

详细实现参见公开推理笔记本:https://www.kaggle.com/code/thanhhau097a/bmga-submission-0-86

同比赛其他方案