560. Benetech - Making Graphs Accessible | benetech-making-graphs-accessible
首先,我们要感谢Kaggle和Benetech举办了这场非常有趣的比赛。参与其中非常有趣,我们从中学习到了大量知识。😀
我们结合了图像分类、目标检测、Donut、PaddleOCR、TrOCR以及大量的后处理!😅
我们针对以下任务训练了模型:
'naver-clova-ix/donut-base'此外,我们按原样使用了以下模型(即,未进行任何微调):
'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 |