返回列表

28th Place Solution

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

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

第28名解决方案

首先,我们要感谢Kaggle和Benetech举办了这场非常有趣的比赛。参与其中非常有趣,我们从中学习到了大量知识。😀

我们结合了图像分类、目标检测、Donut、PaddleOCR、TrOCR以及大量的后处理!😅


模型

我们针对以下任务训练了模型:

  1. 图表类型分类 - ResNet34
  2. X轴刻度标签旋转与非旋转分类 - ResNet34
  3. 水平条形检测 - 使用ResNet50-FPN骨干网络的FasterRCNN
  4. 垂直条形检测(在直方图流程中也使用)- 使用ResNet50-FPN骨干网络的FasterRCNN
  5. 折线点检测 - 使用ResNet50-FPN骨干网络的FasterRCNN
  6. 散点与圆点检测(使用单个模型处理两者)- 使用ResNet50-FPN骨干网络的FasterRCNN
  7. 刻度线检测 - 使用ResNet50-FPN骨干网络的FasterRCNN
  8. X轴刻度标签检测(仅用于检测非旋转的X轴刻度标签)- 使用ResNet50-FPN骨干网络的FasterRCNN
  9. Y轴刻度标签检测 - 使用ResNet50-FPN骨干网络的FasterRCNN
  10. Donut(仅用于识别旋转的X轴刻度标签)- 'naver-clova-ix/donut-base'

此外,我们按原样使用了以下模型(即,未进行任何微调):

  1. 用于多行文本检测并转换为单行文本的PaddleOCR - PP-OCRv3
  2. 用于单行文本OCR识别的TrOCR - 'microsoft/trocr-base-printed'

注意:我们使用PaddleOCR是因为TrOCR只能读取单行文本。对于单行文本,我们发现TrOCR非常准确。


推理示例

以下图像是使用上述每个模型的推理示例:

图表类型分类:

X轴刻度标签旋转与非旋转分类:

水平条形检测:

垂直条形检测(在直方图流程中也使用):

折线点检测:

散点与圆点检测(使用单个模型处理两者):

刻度线检测:

X轴刻度标签检测(仅用于检测非旋转的X轴刻度标签):

Y轴刻度标签检测:

Donut(仅用于识别旋转的X轴刻度标签):

注意:我们仅在包含旋转文本的X轴下方图像块上训练Donut模型。

PaddleOCR(用于多行文本检测并转换为单行文本):

TrOCR(用于单行文本OCR识别):

图像片段:

输出:"A. Total Genotoxic Potency"


深度学习框架

我们使用了:


数据

除了比赛数据集外,我们还使用了来自ICPR 2022 CHART数据集的一些额外图像,该数据集可在以下网址获取:https://chartinfo.github.io/toolsanddata.html

图表元素的边界框注释是通过以下方式添加的:(i)自定义Python脚本或(ii)手动注释工具,即Make Sense(https://www.makesense.ai/)和Roboflow。注释以PASCAL VOC格式创建。

对于折线点检测、散点检测和刻度线检测,我们不得不将原始点注释转换为边界框注释。我们注意到边界框大小的选择对性能有很大影响。因此,我们尝试了几种边界框大小,发现以下尺寸效果良好:

折线点 散点 刻度线
18像素 16像素 16像素

对于X轴刻度标签检测和Y轴刻度标签检测,我们发现给提供的边界框添加2像素边距能提高性能。

最后,我们发现极少数图像中,一个或多个边界框超出了图像边界。我们从数据集中删除了这些图像。


模型验证方案

图表类型分类:

X轴刻度标签旋转与非旋转分类:

水平条形检测:

垂直条形检测(在直方图流程中也使用):

折线点检测:

散点与圆点检测(使用单个模型处理两者):

刻度线检测:

X轴刻度标签检测(仅用于检测非旋转的X轴刻度标签):

Y轴刻度标签检测:

Donut(仅用于识别旋转的X轴刻度标签):


处理流程

图像分类

水平条形流程

垂直条形流程

直方图流程

折线流程

散点流程

圆点流程


结果

总体 散点图 点图 折线图 垂直条形图 水平条形图
公共榜 0.66 0.06 0.00 0.26 0.33 0.01
私有榜 0.49 0.19 0.01 0.08 0.20 0.01

同比赛其他方案