Kaggle图表内容识别大赛TOP方案汇总

news2024/11/29 12:42:01

赛题名称:Benetech - Making Graphs Accessible

赛题链接:https://www.kaggle.com/competitions/benetech-making-graphs-accessible

赛题背景

数以百万计的学生有学习、身体或视力障碍,导致人们无法阅读传统印刷品。这些学生无法访问科学、技术、工程和数学 (STEM) 领域的大多数教育材料。存在使书面文字易于访问的技术。但是,对于图形等教育视觉对象执行此操作仍然很复杂且需要大量资源。因此,只有一小部分教育材料可供具有这种学习差异的学习者使用——除非机器学习可以帮助弥合这一差距。

赛题方向

计算机视觉、图文描述

赛题任务

本次竞赛的目标是提取由STEM教科书中常见的四种图表表示的数据。参赛者将开发一个在图形数据集上训练的自动解决方案。

参赛者的工作将有助于数百万有学习差异或残疾的学生能够阅读图表。

评价指标

单个图形的数据系列包含两个用于评估的实例:沿 x 轴的一系列值和沿 y 轴的相应值系列。每个数据系列可以是数字类型,也可以是分类类型,具体取决于图表类型。

图形约定参阅:https://www.kaggle.com/competitions/benetech-making-graphs-accessible/overview/graph-conventions

预测数据系列通过两个指标的组合进行评估:分类(即字符串)数据类型的 Levenshtein 距离和数值数据类型的 RMSE,图表类型和序列中的值数具有初始完全匹配标准。这些距离中的每一个都通过 S 形变换重新缩放并映射到公共相似性尺度,其最佳值为 1:

  • 提交文件

提交文件中的每一行都应该包含测试集中图形的一个轴的预测序列。例如,abc123 x将给出图abc123中x轴的预测。系列的值应该在单个字符串内,并由;分隔。参赛者还必须为轴所属的图表提供适当的类型。

该文件应包含标头并具有以下格式:

id,data_series,chart_type
abc123_x,2;3;4;5,horizontal_bar
abc123_y,a;b;c;d,horizontal_bar

数据描述

本次比赛的数据集包括约65,000个综合注释的科学图形,分为垂直条形图、水平条形图、点图、折线图和散点图五种。

文件和字段说明:

  • train/annotations/ 描述图形的JSON图像注释集合

  • train/images/ JPG格式的数字集合,用作训练数据

  • test/images/ 收集用作测试数据的数据

  • sample_submission.csv 格式正确的提交文件

时间安排

  • 2023.3.21 - 开始报名

  • 2023.6.5 - 报名截止

  • 2023.6.5 - 团队报名截止

  • 2023.6.12 - 最终提交截止

赛题奖金

  • 第一名 - 15,000 美元

  • 第二名 - 10,000 美元

  • 第三名 - 8,000 美元

  • 第四名 - 7,000 美元

  • 第五名 - 5,000 美元

  • 第六名 - 5,000 美元

金牌方案

第一名

https://www.kaggle.com/competitions/benetech-making-graphs-accessible/discussion/418786

我的解决方案由两步组成:第一步使用分类模型对图表类型进行分类,第二步对数据系列进行推断。

在数据系列推断阶段,条形图、折线图和散点图通过为每个图表类型单独训练的Deplot进行端到端预测,而散点图则通过基于目标检测的方法预测。

最终得分如下:

数据集

1.比赛数据集(comp_extracted_dataset/comp_generated_dataset)

  • 使用了提取数据集(comp_extracted_dataset)和生成数据集(comp_generated_dataset)。

  • 对生成的数据,通过简单检查去除了注释中存在噪声的数据(约100张图片)。

2.ICDAR数据集(ICDAR_dataset/ICDAR_manualannot_dataset)

  • 我使用了提供了注释的数据1406件(ICDAR_dataset)和没有提供注释的数据1903件(ICDAR_manualannot_dataset)。

  • 对于提供了注释的数据,我视觉重新检查了注释内容,并手动修正了所有没有遵循比赛注释规则(例如%表示法)或包含噪声的数据。

  • 对于没有提供注释的数据,我首先视觉检查了所有数据的外观,选择了可以在本次比赛中使用的数据。接下来,我使用Deplot模型推断并赋予伪标签,再次视觉检查所有结果,并手动修正所有不正确的注释。

3.生成的合成数据集(synthetic_dataset)

  • 在检查了比赛数据集中的图像后,确定comp_generated_dataset本身的变化不足以实现鲁棒性,因此我又自行生成了约65k个合成数据。

  • 我主要生成了comp_generated_dataset没有的特征的合成数据。
    • 直方图

    • 标签包含换行

    • 带误差棒的条形图

    • 包含数据系列中没有的x标签的折线图

第二名

https://www.kaggle.com/competitions/benetech-making-graphs-accessible/discussion/418430

我的解决方案完全基于从google/matcha-base骨干微调得到的图像文本模型。如下图所示,训练流程包含两个阶段。在第一阶段,我利用大量合成图表来适配当前任务的骨干模型。在第二阶段,我使用过采样的提取/非生成图表来使流水线专门适应真实世界的图表。在这个阶段,我为散点图和非散点图创建了独立的模型,主要是为了缓解预测散点数据点的难度。

第一阶段使用合成数据对骨干模型进行预训练,第二阶段使用真实数据进行微调,最终获得一个适合真实世界图表的图像文本模型。两阶段训练使模型既能从合成数据中获取概括能力,也能从真实数据中获取针对真实图表的拟合能力。独立处理散点图也是提高性能的一个关键决策。

1.模型

所有模型共享相同的架构(图像到文本的transformer)和输入输出模式。模型输入直接是图表图像本身,没有任何提示。输出文本遵循以下模板:

{chart_type} {n_x} | {n_y} {x0} | {x1} | {x2} | … | {xn} {y0} | {y1} | {y2} | … | {ym}  

一些细节:

  • 数值被转换为科学计数法,使用 val = "{:.2e}".format(float(val))。

  • 增加了直方图作为额外的图表类型,在后处理中将其转换为垂直条形图。

2.数据

合成数据集

我花费了大部分时间来创建合成数据集。合成图表中的基础数据,我使用了:

  • 维基表格数据,即来自维基百科的表格(25%)

  • 合成XY数据(75%)

合成数据集包括:

  • 10万个横向条形图

  • 10万个垂直条形图+直方图

  • 10万个散点图

  • 20万个折线图

  • 20万个散点图

合成数据集 - Bartley

  • 从@brendanartley分享的合成数据集中随机选择了2.5万个数据点:https://www.kaggle.com/datasets/brendanartley/benetech-extra-generated-data

  • 伪标记(Pseudo Labelling):我从维基共享资源(wikimedia commons)截取了大约700张图片。我使用了伪标记,并进行了手动修正,以生成注释。

  • ICDAR数据集:我使用了约1100张来自ICDAR的图片,只使用那些有1个XY系列的(250条水平条形图 + 450条垂直条形图 + 250条折线图 + 150个散点图)。我还进行了后处理,以确保注释与比赛图表惯例匹配(例如处理百分比、插值线图数据以匹配刻度标签等)。

3.数据混合(Datamix)

  • 数据混合1:用于域适应

  • 数据混合2:散点图专用

  • 数据混合3:非散点图专用

4.训练

训练的主要超参数是max_patchesmax_length。我在不同的训练阶段使用了以下设置:

第一阶段训练

  • max_patches: 2048

  • max length: 1024

  • lr: 5e-5

  • batch size: 2

  • gradient accumulation: 16

第二阶段训练 - 非散点图

  • max_patches: 4096

  • max length: 512

  • lr: 2e-5

  • batch size: 4

  • gradient accumulation: 2

第二阶段训练 - 散点图

  • max_patches: 3072

  • max length: 1024

  • lr: 2e-5

  • batch size: 8

  • gradient accumulation: 1

  • AWP

作为小细节,我在训练过程中使用了模型权重的指数移动平均(EMA)、梯度截断和线性热身的余弦调度器。

5.数据增强

由于我重复使用了多次提取的图像,所以我决定包括以下增强:

transforms = A.Compose(
        [
            A.OneOf(
                [
                    A.RandomToneCurve(scale=0.3),
                    A.RandomBrightnessContrast(
                        brightness_limit=(-0.1, 0.2),
                        contrast_limit=(-0.4, 0.5),
                        brightness_by_max=True,
                    ),
                    A.HueSaturationValue(
                        hue_shift_limit=(-20, 20),
                        sat_shift_limit=(-30, 30),
                        val_shift_limit=(-20, 20)
                    )


                ],
                p=0.5,
            ),

            A.OneOf(
                [
                    A.MotionBlur(blur_limit=3),
                    A.MedianBlur(blur_limit=3),
                    A.GaussianBlur(blur_limit=3),
                    A.GaussNoise(var_limit=(3.0, 9.0)),
                ],
                p=0.5,
            ),

            A.Downscale(always_apply=False, p=0.1, scale_min=0.90, scale_max=0.99),
        ],

        p=0.5,
    )

第三名

https://www.kaggle.com/competitions/benetech-making-graphs-accessible/discussion/418420

我们的解决方案是一个两步流水线,第一步是一个简单的分类任务,第二步针对不同的图表类型解决任务。对于散点图,我们使用了检测方法。对于折线图和条形图,Matcha的表现非常强劲。下面是我们的LB分数:

验证与见解

  • 第一步 - 分类:在这一步中没有太多花哨的东西,我们在(benetech + theo + crodoc)生成的数据上训练模型。

主要参数:

  • 2个周期对88k张图像进行训练。

  • 学习率3e-4或5e-4(混合使用2个学习率,我们也用了2个随机种子))。

  • 使用Mixup和一些颜色增强。

  • 图像尺寸为256x384。

  • NfNet-l2并添加0.2的dropout。

  • 第二步.a - 散点图

对于散点图,我们依赖于YoloX来检测所有标记。Cached被用来处理其他有用的元素。如果所有点都被正确检测,推断目标并不复杂:检测刻度线和标签,读取标签值,并插值。

更多细节:

  • 集成YoloX-m和YoloX-l,使用NMS,有助于减少假阴性。

  • 模型在散点图和点图的benetech生成数据上训练了10个epoch,以及我生成并伪标注的一堆绘图。

  • 内部验证集0.67,公开LB约0.09,私有LB 0.29 - 性能下降几乎完全来自重叠/难以检测的标记。

  • 大量后处理来使流水线更具鲁棒性,抵御OCR错误和检测错误。

  • 我们最初使用Yolo-v7,但由于第一次规则更改,不得不切换到YoloX。我们花了一个星期的时间用YoloX匹配Yolo-v7的性能。

  • 第二步.b - 点图

点图流水线类似于散点图,但更简单一些。我们检测点并进行聚类,然后将它们映射到检测到的x轴标签。没有分配簇的标签被赋值为目标0,其他的给定检测到的点数。由于点数对检测错误不太稳健,我们改为使用最高点的高度并进行插值。

  • 第二步.c - 条形图和折线图

Matcha在这里非常强大。我们使用了matcha-base,并将is_vqa设置为False,以避免将文本作为输入给模型。

我们训练Matcha为一张图像预测图表类型、x轴和y轴。ground truth看起来与@nbroad用于他的donut方法相同(除了我们删除了提示符号)。我们尝试了其他方法,但这个效果最好:

x_str = X_START + ";".join(list(map(str, xs))) + X_END
y_str = Y_START + ";

".join(list(map(str, ys))) + Y_END
ground_truth = '<' + chart_type + '>' + x_str + y_str

我们获得的最有价值的提升是使用matplotlib生成额外的图表。我们重用了训练集的数据值和文本来生成刻度线和值,使用不同的样式/模式/字体/颜色来增加多样性。生成额外图像的代码有大约1000行,基本上覆盖了模型在“提取”数据集上验证时的大多数失败情况(例如负值、线条边缘、缺失的条形、多行文本、文本旋转等)。

第四名: https://www.kaggle.com/competitions/benetech-making-graphs-accessible/discussion/418604

第五名: https://www.kaggle.com/competitions/benetech-making-graphs-accessible/discussion/418477

第六名: https://www.kaggle.com/competitions/benetech-making-graphs-accessible/discussion/418466

第七名: https://www.kaggle.com/competitions/benetech-making-graphs-accessible/discussion/418510

关注下方【学姐带你玩AI】🚀🚀🚀

回复“图表识别”获取完整金牌方案baseline代码

码字不易,欢迎大家点赞评论收藏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/792921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人机合一Linux

未来云系统成为主流&#xff0c;维护电脑这种充满时代特性的技术&#xff0c;完全不重要了。 无论是学习还是工作&#xff0c;电脑都是IT人必不可少的重要武器&#xff0c;一台好电脑除了自身配置要经得起考验&#xff0c;后期主人对它的维护也是决定它寿命的重要因素&#xff…

【01trie】CF1851F

Problem - F - Codeforces 题意&#xff1a; 思路&#xff1a; 首先最大异或对可以用01trie解决 trie树入门_lamentropetion的博客-CSDN博客 ai xor x 和 aj xor x 都必须为1 因此可以转换为 ai 和 aj 最小异或对问题 改一下01trie的板子即可 主要修改部分在query上 p…

如何把视频中的背景删掉,AI抠像,瞬间换背景!

不用绿幕也能快速抠除视频背景。一个可以去除视频背景的AI智能抠像工具&#xff0c;上传视频后会自动去除背景&#xff0c;支持单人、多人等各类场景&#xff0c;智能扫描识别&#xff0c;发丝级细节处理&#xff0c;快捷高效。 随着AI 抠像技术的不断成熟和普及&#xff0c;我…

5-7月大更新!EasyOps®全平台34+新特性齐上线~

为了提供更好的产品使用体验&#xff0c;优维从未停止更新升级的脚步。在5-7月份&#xff0c;EasyOps全平台更新上线34新功能&#xff0c;涉及Hyperlnsight超融合监控、CMDB、DevOps、AutoOps、ITSM、公共服务&#xff0c;在不断的技术创新过程中&#xff0c;进一步加速IT运维效…

存算一体化(Processing in Memory, PIM)入门

一、 存算一体化 概念&#xff1a; 简单来说就是将存储资源中嵌入计算能力&#xff0c;以新的运算架构进行二维和三维矩阵乘法/加法运算。这样减少了数据频繁移动带来的延迟和能耗方面的开销。 背景&#xff1a; 虽然多核&#xff08;例如CPU&#xff09;/众核&#xff08;例…

视频监控综合管理平台EasyCVR多分屏默认播放协议的配置优化

视频监控综合管理平台EasyCVR具备视频融合汇聚能力&#xff0c;TSINGSEE青犀视频平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;包括&#xff1a;NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。国标GB28181视频平台Ea…

Mysql执行计划字段解释

文章目录 一、前言二、如何查看执行计划三、执行计划各字段解释四、select_type4.1、SIMPLE&#xff08;简单查询&#xff09;4.1.1、简单的单表查询4.1.2、多表连接查询 4.2、PRIMARY&#xff08;主查询&#xff09;4.2.1、包含复杂子查询的外层查询4.2.2、UNION语句中的第一个…

55寸透明屏有哪些主要特点?

55寸透明屏是一种新型的显示技术&#xff0c;它具有透明度高、色彩鲜艳、清晰度高等特点&#xff0c;可以广泛应用于商业展示、户外广告、智能家居等领域。 首先&#xff0c;55寸透明屏的透明度非常高&#xff0c;可以达到80%以上&#xff0c;这意味着即使屏幕开启&#xff0c;…

裁员 10%,暴跌 14%,这家 IT 独角兽正在被抛弃!

流量一跌再跌&#xff0c;Stack Overflow 简直被狠狠地上了一课&#xff01; 3 月份 Stack Overflow 的流量下降了近 14%。该公司的 CEO 压力空前&#xff0c;甚至昨天决定裁员 10%&#xff01; 平均每月下降6%&#xff0c;上月直接跌了近14% 开发人员越来越多地从 AI 聊天机器…

Hive数据仓库

数据仓库概念与起源发展由来 数仓概念 数据仓库&#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;&#xff0c;是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面相分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持…

结构化思维:高效能项目经理人的底层能力

大家好&#xff0c;我是老原。 我们经常会说「高效能」&#xff0c;那怎么成为高效能人士&#xff1f;其实除了拼体力和心力以外&#xff0c;高效能更重要的是脑力&#xff0c;这里的脑力不是指智力&#xff0c;而是结构化思维。 随着你在职场中不断成长和进阶&#xff0c;级…

springboot 整合tx-mybaits 实现crud操作

一 操作案例 1.1 工程结构 1.2 pom文件的配置 <!--spring boot的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId…

【防火墙】iptables防火墙(一)

防火墙具有隔离功能 主要部署在网络边缘或者主机边缘&#xff0c;防火墙的主要作用是决定哪些数据可以被外网访问&#xff0c;哪些数据可以进入内网访问 网络层&#xff08;路由器&#xff09;&#xff1a;数据的转发 安全技术 1.入侵监测系统&#xff1a;在检测到威胁&…

导出为PDF加封面且分页处理dom元素分割

文章目录 正常展示页面导出后效果代码 正常展示页面 导出后效果 代码 组件内 <template><div><div class"content" id"content" style"padding: 0px 20px"><div class"item"><divstyle"height: 160…

电压放大器在管道缺陷检测中应用有哪些

管道是一种重要的输送工业介质的设施&#xff0c;广泛应用于石油、化工、水利等领域。然而&#xff0c;由于长期使用和外界环境因素等原因&#xff0c;管道内部常会出现各种缺陷和损伤&#xff0c;如腐蚀、裂纹、磨损等&#xff0c;这些问题如果得不到及时发现和修复&#xff0…

基于vue实现权限控制,动态渲染菜单栏

Vue菜单权限动态路由 实现原理&#xff1a;用户登录&#xff0c;服务端返回相关权限&#xff0c;进行持久化存储&#xff0c;筛选动态路由&#xff0c;同时菜单栏也需动态渲染 静态路由 静态路由&#xff0c;也叫常量路由&#xff0c;即所有角色都可以访问到的路由界面。如:…

手把手移植 simpleFOC (二)

目录 前言 1、建立 arduino文件夹&#xff0c;如图&#xff1a; 2、提取必要的文件 二、修改源码 1.屏蔽arduino.h、wiring.h里代码 2.修改Print.cpp文件 三&#xff0c;编译 总结 一、前言 本章主要实现 simpleFoc 里的 Serial.print功能&#xff0c;建立setup、loop函…

Games101学习笔记 - 变换矩阵基础

二维空间下的变换 缩放矩阵 缩放变换: 假如一个点&#xff08;X,Y&#xff09;。x经过n倍缩放&#xff0c;y经过m倍缩放&#xff0c;得到的新点&#xff08;X1&#xff0c;Y1&#xff09;&#xff1b;那么新点和远点有如下关系&#xff0c;X1 n*X, Y1 m*Y写成矩阵就是如下…

Matlab----下载和安装教程

Matlab----下载 文件中有以下文件 Matlab----安装 步骤1&#xff1a;打开安装软件 步骤2&#xff1a;运行安装软件 在matlab 2018的文件夹下找到setup&#xff0c;选中右键以管理员身份运行。 步骤3 选择使用文件安装密钥&#xff0c;然后点击下一步。 步骤4 是否接收…

C语言---动态内存管理

C语言—动态内存管理 文章目录 C语言---动态内存管理1. 为什么要进行动态内存分配1.1 动态内存管理所在的区域 2. 动态内存函数的介绍2.1 malloc2.1.1 malloc语法2.1.2 malloc具体实例 2.2 free2.2.1 free语法2.2.2 free具体实例 2.3 calloc2.3.1 calloc语法2.3.2 calloc具体实…