CV之Nougat:Nougat(一种基于神经网络实现OCR功能的视觉转换器模型)的简介、安装和使用方法、案例应用之详细攻略

news2024/11/24 0:36:51

CV之Nougat:Nougat(一种基于神经网络实现OCR功能的视觉转换器模型)的简介、安装和使用方法、案例应用之详细攻略

目录

相关论文

《Nougat: Neural Optical Understanding for Academic Documents》的翻译与解读

Nougat的简介

Nougat的安装和使用方法

1、安装

2、使用方法

(1)、获取PDF的预测

T1、命令行接口(CLI)

T2、API

(2)、数据集

生成数据集

然后运行:

其他参数包括:

最后,创建一个包含所有图像路径、markdown文本和元信息的jsonl文件:

生成的目录结构可以如下所示:

(3)、训练

(4)、评估

3、常见问题

为什么我只得到[MISSING_PAGE]?

我可以从哪里下载模型检查点?

Nougat的案例应用


相关论文

《Nougat: Neural Optical Understanding for Academic Documents》的翻译与解读

地址

论文地址:https://arxiv.org/abs/2308.13418

时间

2023年8月25日

作者

Meta AI

摘要

科学知识主要存储在书籍和科学期刊中,通常以PDF格式存在。然而,PDF格式会导致语义信息的丢失,特别是对于数学表达式。我们提出了Nougat(Neural Optical Understanding for Academic Documents),这是一种视觉转换器模型,用于执行光学字符识别(OCR)任务,将科学文档处理成标记语言,并在新的科学文档数据集上展示了我们模型的有效性。所提出的方法为增强数字时代科学知识的可访问性提供了一个有前景的解决方案,通过弥合人类可读文档与机器可读文本之间的差距。我们发布了模型和代码,以加速未来对科学文本识别的工作。

总结

这篇文章提出了一种新的神经网络模型Nougat,它可以将学术论文转换为结构化标记文本。

背景:目前大多数科学知识都是以PDF格式存储在书籍或学术期刊中,但PDF格式会丧失一定的语义信息,尤其是数学表达式。

现有的OCR识别引擎,如Tesseract,可以识别和分类个别字符和词语,但因为它采用的是行识别的方式,因此无法理解字符之间的关系,对数学表达式识别效果不佳。

解决方案

>> Nougat模型采用视觉变换器架构,可以直接从论文页面图像输入进行识别,无需依赖OCR预处理。

>> 它使用Swin Transformer编码器提取论文图像特征,再通过解码器在自回归方式生成标记文本序列。

>> 训练时采用各种数据增强技术来提升泛化能力,如模糊、噪声等。

核心特点

>> 端到端学习,不需要任何OCR输入,直接使用论文页面图像进行识别。

>> 可以识别数字出版物以外的扫描书刊和教材。

>> 与现有方法相比,可以更好地还原数学表达式及其语义关系。

优势

>> 公开了预训练模型和代码,可促进相关领域未来工作。

>> 能够有效提升科学知识在数字时代的可访问性。

总之,Nougat提出了一种新的端到端神经网络方法来将学术论文转化为结构化标记文本,它直接使用论文图像作为输入,通过视觉变换器架构实现自动识别,解决了现有OCR方法在数学表达式识别上的不足,同时也提升了泛化能力。

Nougat的简介

Nougat是学术文档的神经光学理解。这是Nougat的官方仓库,一个能够理解LaTeX数学和表格的学术文档PDF解析器

GitHub地址:https://github.com/facebookresearch/nougat

项目页面: Nougat

Nougat的安装和使用方法

1、安装

通过pip安装:
pip install nougat-ocr

通过仓库安装:
pip install git+https://github.com/facebookresearch/nougat
注意,在Windows上:如果你想使用GPU,确保首先安装正确版本的PyTorch。按照此处的说明进行操作。




如果你想从API调用模型或生成数据集,需要额外的依赖项。通过以下方式安装:
pip install "nougat-ocr[api]" 或 pip install "nougat-ocr[dataset]"

2、使用方法

(1)、获取PDF的预测

T1、命令行接口(CLI)
要获取PDF的预测,请运行:
$ nougat path/to/file.pdf -o output_directory

也可以传递一个目录的路径或每行是PDF路径的文件路径作为位置参数:
$ nougat path/to/directory -o output_directory


使用方法
nougat [-h] [--batchsize BATCHSIZE] [--checkpoint CHECKPOINT] [--model MODEL] [--out OUT]
       [--recompute] [--markdown] [--no-skipping] pdf [pdf ...]

位置参数:

  • pdf:要处理的PDF文件。

选项:

  • -h, --help:显示帮助信息并退出
  • --batchsize BATCHSIZE, -b BATCHSIZE:使用的批处理大小。
  • --checkpoint CHECKPOINT, -c CHECKPOINT:检查点目录的路径。
  • --model MODEL_TAG, -m MODEL_TAG:使用的模型标签。
  • --out OUT, -o OUT:输出目录。
  • --recompute:重新计算已计算的PDF,丢弃以前的预测。
  • --full-precision:使用float32而不是bfloat16。在某些设置中可以加速CPU转换。
  • --no-markdown:不添加markdown兼容性的后处理步骤。
  • --markdown:添加markdown兼容性的后处理步骤(默认)。
  • --no-skipping:不应用失败检测启发式方法。
  • --pages PAGES, -p PAGES:提供页码,例如'1-4,7'表示第1到4页和第7页。仅适用于单个PDF。

默认的模型标签是0.1.0-small。如果你想使用基础模型,请使用0.1.0-base。

$ nougat path/to/file.pdf -o output_directory -m 0.1.0-base

在输出目录中,每个PDF将保存为.mmd文件,这是一种轻量级标记语言,大部分兼容Mathpix Markdown(我们使用LaTeX表格)。
注意:在某些设备上,失败检测启发式方法工作不正常。如果你遇到大量的[MISSING_PAGE]响应,尝试使用--no-skipping标志运行。相关问题:#11, #67

T2、API

使用额外的依赖项,你可以使用app.py启动一个API。调用:

$ nougat_api

通过向http://127.0.0.1:8503/predict/发送POST请求来获取PDF文件的预测。它还接受start和stop参数来限制计算的页码(包含边界)。

响应是文档的markdown文本字符串。

curl -X 'POST' \
  'http://127.0.0.1:8503/predict/' \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F 'file=@<PDFFILE.pdf>;type=application/pdf'

要将转换限制在第1到5页,请在请求URL中使用start/stop参数:http://127.0.0.1:8503/predict/?start=1&stop=5

(2)、数据集

生成数据集

要生成数据集,你需要:
>> 包含PDF的目录
>> 包含.html文件(由LaTeXML处理的.tex文件)的目录,具有相同的文件夹结构
>> pdffigures2的二进制文件和相应的环境变量 export PDFFIGURES_PATH="/path/to/binary.jar"

然后运行:
python -m nougat.dataset.split_htmls_to_pages --html path/html/root --pdfs path/pdf/root --out path/paired/output --figure path/pdffigures/outputs

其他参数包括:
参数描述
--recompute重新计算所有拆分
--markdownMARKDOWN 输出目录
--workersWORKERS 使用的进程数
--dpiDPI 保存页面的分辨率
--timeoutTIMEOUT 每篇论文的最大时间
--tesseractTesseract 每页的OCR预测

最后,创建一个包含所有图像路径、markdown文本和元信息的jsonl文件:
python -m nougat.dataset.create_index --dir path/paired/output --out index.jsonl

对于每个jsonl文件,你还需要生成一个快速数据加载的索引映射:
python -m nougat.dataset.gen_seek file.jsonl

生成的目录结构可以如下所示:
root/
├── images
├── train.jsonl
├── train.seek.map
├── test.jsonl
├── test.seek.map
├── validation.jsonl
└── validation.seek.map

注意,路径/配对/输出中的.mmd和.json文件(此处为images)不再需要。这对于通过减少一半文件数量推送到S3存储桶很有用。

(3)、训练

要训练或微调Nougat模型,运行:

python train.py --config config/train_nougat.yaml

(4)、评估

运行:
python test.py --checkpoint path/to/checkpoint --dataset path/to/test.jsonl --save_path path/to/results.json

要获取不同文本模式的结果,运行:
python -m nougat.metrics path/to/results.json

3、常见问题

为什么我只得到[MISSING_PAGE]?

Nougat是在arXiv和PMC上找到的科学论文上训练的。你正在处理的文档是否与此相似?文档的语言是什么?Nougat对英文论文效果最佳,其他拉丁语系语言可能也有效。中文、俄文、日文等则无效。如果这些要求都满足,可能是由于CPU或较旧的GPU上失败检测的误报(#11)。目前尝试传递--no-skipping标志。

我可以从哪里下载模型检查点?

它们已上传到GitHub的发布部分。你也可以在程序第一次执行时下载它们。通过传递--model 0.1.0-{base,small}选择首选模型。

Nougat的案例应用

持续更新中……

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

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

相关文章

成犬必备!福派斯鲜肉狗粮,亮毛祛泪痕的神奇功效!

对于成犬来说&#xff0c;选择一款合适且高质量的狗粮至关重要。成犬时期的狗狗正处于身体和生理机能逐渐稳定的阶段&#xff0c;因此&#xff0c;需要选择能够满足其日常营养需求、维持健康状态并有助于长寿的狗粮。理想的狗粮应当包含狗狗所需的各种营养物质&#xff0c;如高…

使用CyberRT写第一个代码, test ok

简介 计算框架是自动驾驶系统中的重中之重,也是整个系统得以高效稳定运行的基础。为了实时地完成感知、决策和执行,系统需要一系列的模块相互紧密配合,高效地执行任务流。由于各种原因,这些模块可能位于不同进程,也可能位于不同机器。这就要求计算框架中具有灵活的、高性…

uniapp+canvas实现逐字手写效果

在移动端使用 UniApp 进行逐字手写的功能。用户可以在一个 inputCanvas 上书写单个字&#xff0c;然后在特定时间后将这个字添加到 outputCanvas 上&#xff0c;形成一个逐字的手写效果。用户还可以保存整幅图像或者撤销上一个添加的字。 初始化 Canvas&#xff1a; 使用 uni.c…

SpringCloud系列(29)--准备使用Hystrix的前期工作,创建服务提供者模块

前言&#xff1a;在上一章节中我们简单的介绍了关于Hystrix的相关知识点&#xff0c;而本节内容则是关于如果去使用Hystrix构建一个支付微服务。 1、创建一个服务提供者模块&#xff0c;命名为cloud-provider-hystrix-payment8001 (1)在父工程下新建模块 (2)选择模块的项目类型…

香橙派华为昇腾CANN架构编译opencv4.9

香橙派华为升腾AI盒子 为啥要编译opencv4.9.0&#xff0c; 因为在4.9.0 中增加了华为昇腾CANN的外接开发库&#xff0c;下图为盒子外观&#xff0c;此次一接到这个盒子&#xff0c;立刻开始开箱操作&#xff0c;首先就是要编译opencv4.9&#xff0c;以前在香橙派3588 的盒子中…

台湾省军事演习路径规划:A*算法在复杂地形中的应用

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

PyTorch 错误 RuntimeError: CUDA error: device-side assert triggered

训练数据的时候出现 RuntimeError:CUDA error:device-side assert triggeredCUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.For debugging consider passing CUDA_LAUNCH_BLOCKING1.Compile with …

使用Python探究OpenAI API

谁没听说过OpenAI?这家人工智能研究实验室因其著名的产品ChatGPT而改变了世界。它改变了AI实施领域&#xff0c;许多公司现在急于成为下一大热点。 尽管竞争激烈&#xff0c;OpenAI仍然是任何生成式AI业务需求的首选公司&#xff0c;因为它拥有最好的模型和持续的支持。该公司…

齐护K210系列教程(三十四)_视觉PID巡线小车

视觉PID巡线小车 1.前言2.简介3.代码讲解3.1初始化3.2.色块查找3.3色块分析3.3.1 区域13.3.2 区域2 3.4 侦测关键点部分3.4.1正常巡线3.4.2 右转路口 3.4.3十字路口3.4. PID计算 4.完整代码5.小车端程序6.参考程序联系我们 1.前言 本课程主要讲述如何使用AIstart_k210主板完成…

C语言——free() 和 delete() 怎样处理指针?

一、问题 从字⾯上理解&#xff0c;free() 是释放&#xff0c;给予⾃由的意思&#xff1b;⽽ delete() 的含义⽐较直接&#xff0c;是删除的意思。这两个函数的⽬的就是不想再与这个指针有任何关联&#xff0c;那么它们到底怎样处理了不再使⽤的指针呢&#xff1f; 二、解答 其…

❤Element的使用element

❤Element的使用 1、input输入框 禁止自动补全和下拉提示 input 输入框在输入后浏览器会记录用户输入的值&#xff0c;在下次输入的时候会将记录的值提示在输入框的下面&#xff0c;当输入框是密码的时候&#xff0c;这样可以看见上次输入的密码&#xff0c;这样用户体验不好…

融资融券大揭秘:两融入门操作最新指南!

#引言# 随着中国资本市场日新月异的发展进程&#xff0c;融资融券交易已崭露头角&#xff0c;成为投资者们瞩目的焦点。作为一种颇具影响力的投资方式&#xff0c;它正逐渐吸引越来越多的投资者关注。本文旨在为大家深入剖析融资融券交易的核心概念、详尽的操作步骤以及必须留意…

数据清洗(ETL)案例实操

文章目录 数据清洗&#xff08;ETL&#xff09;概述案例需求和分析代码实现和结果分析 数据清洗&#xff08;ETL&#xff09;概述 “ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;Extract&#xff09;、转换&…

医院挂号就诊系统的设计与实现

前端使用Vue.js 后端使用SpiringBoot MyBatis 数据使用MySQL 需要项目和论文加企鹅&#xff1a;2583550535 医院挂号就诊系统的设计与实现_哔哩哔哩_bilibili 随着社会的发展&#xff0c;医疗资源分布不均&#xff0c;患者就诊难、排队时间长等问题日益突出&#xff0c;传统的…

ABAP Json解析案例

ABAP解析返回的JSON 案例 DATA:LTOKEN TYPE STRING.DATA: LL_LINES(10),"行数LL_TABIX(10),"循环标号LL_PECNT TYPE P LENGTH 6 DECIMALS 2, "百分比LL_PECET(6),"百分数LL_TEXT(40)."消息CLEAR: LL_LINES,LL_TABIX,LL_PECNT,LL_PECET,LL_TEXT.* …

文心智能体【焦虑粉碎机】——帮你赶走“坏”情绪

目录&#xff1a; 引言1.登录 文心智能体平台2.创建智能体3.配置智能体&#x1f337; 头像设置&#x1f337; 名称设置&#x1f337; 简介设置&#x1f337;指令设置&#x1f337; 开场白设置&#x1f337; 引导示例设置 4.使用智能体 引言 随着ChatGPT的爆火&#xff0c;人工智…

32.5k star!!替换 postman?【送源码】

在软件开发过程中&#xff0c;API&#xff08;应用程序接口&#xff09;扮演着至关重要的角色。为了确保 API 的可靠性和性能&#xff0c;开发人员需要一种高效的方式来测试和调试它们。这方面的工具&#xff0c;大家经常用到的应该就是 postman 了。不过&#xff0c;今天了不起…

文章解读与仿真程序复现思路——电力系统保护与控制EI\CSCD\北大核心《基于改进粒子滤波的锂离子电池剩余寿命预测 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

网络编程 一

一、UDP socket api的使用 Java 把系统原生的封装了. 核心的类有两个: 1 -> DatagramSocket 操作系统中,有一类文件,就叫socket文件. socket文件,抽象表示了 " 网卡"这样的硬件设备. 进行网络通信最核心的硬件设备网卡 通过网卡发送数据,就是写…

基于STM32F103和HC-SR04的12路RS485与Modbus通信方案

基于STM32F103和HC-SR04的12路RS485与Modbus通信方案 引言&#xff1a; 随着科技的快速发展&#xff0c;智能汽车技术已成为汽车工业的一个重要发展方向。在智能汽车的众多技术中&#xff0c;环境感知系统扮演着至关重要的角色。超声波雷达作为环境感知系统中的一种低成本、高可…