CV之Nougat:Nougat(一種基于神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)OCR功能的視覺轉(zhuǎn)換器模型)的簡介、安裝和使用方法、案例應(yīng)用之詳細(xì)攻略
相關(guān)論文
《Nougat: Neural Optical Understanding for Academic Documents》的翻譯與解讀
| 地址 | 論文地址:https:///abs/2308.13418 |
| 時間 | 2023年8月25日 |
| 作者 | Meta AI |
| 摘要 | 科學(xué)知識主要存儲在書籍和科學(xué)期刊中,通常以PDF格式存在。然而,PDF格式會導(dǎo)致語義信息的丟失,特別是對于數(shù)學(xué)表達(dá)式。我們提出了Nougat(Neural Optical Understanding for Academic Documents),這是一種視覺轉(zhuǎn)換器模型,用于執(zhí)行光學(xué)字符識別(OCR)任務(wù),將科學(xué)文檔處理成標(biāo)記語言,并在新的科學(xué)文檔數(shù)據(jù)集上展示了我們模型的有效性。所提出的方法為增強(qiáng)數(shù)字時代科學(xué)知識的可訪問性提供了一個有前景的解決方案,通過彌合人類可讀文檔與機(jī)器可讀文本之間的差距。我們發(fā)布了模型和代碼,以加速未來對科學(xué)文本識別的工作。 |
| 總結(jié) | 這篇文章提出了一種新的神經(jīng)網(wǎng)絡(luò)模型Nougat,它可以將學(xué)術(shù)論文轉(zhuǎn)換為結(jié)構(gòu)化標(biāo)記文本。 背景:目前大多數(shù)科學(xué)知識都是以PDF格式存儲在書籍或?qū)W術(shù)期刊中,但PDF格式會喪失一定的語義信息,尤其是數(shù)學(xué)表達(dá)式。 現(xiàn)有的OCR識別引擎,如Tesseract,可以識別和分類個別字符和詞語,但因?yàn)樗捎玫氖切凶R別的方式,因此無法理解字符之間的關(guān)系,對數(shù)學(xué)表達(dá)式識別效果不佳。 解決方案: >> Nougat模型采用視覺變換器架構(gòu),可以直接從論文頁面圖像輸入進(jìn)行識別,無需依賴OCR預(yù)處理。 >> 它使用Swin Transformer編碼器提取論文圖像特征,再通過解碼器在自回歸方式生成標(biāo)記文本序列。 >> 訓(xùn)練時采用各種數(shù)據(jù)增強(qiáng)技術(shù)來提升泛化能力,如模糊、噪聲等。 核心特點(diǎn): >> 端到端學(xué)習(xí),不需要任何OCR輸入,直接使用論文頁面圖像進(jìn)行識別。 >> 可以識別數(shù)字出版物以外的掃描書刊和教材。 >> 與現(xiàn)有方法相比,可以更好地還原數(shù)學(xué)表達(dá)式及其語義關(guān)系。 優(yōu)勢: >> 公開了預(yù)訓(xùn)練模型和代碼,可促進(jìn)相關(guān)領(lǐng)域未來工作。 >> 能夠有效提升科學(xué)知識在數(shù)字時代的可訪問性。 總之,Nougat提出了一種新的端到端神經(jīng)網(wǎng)絡(luò)方法來將學(xué)術(shù)論文轉(zhuǎn)化為結(jié)構(gòu)化標(biāo)記文本,它直接使用論文圖像作為輸入,通過視覺變換器架構(gòu)實(shí)現(xiàn)自動識別,解決了現(xiàn)有OCR方法在數(shù)學(xué)表達(dá)式識別上的不足,同時也提升了泛化能力。 |
Nougat的簡介

Nougat是學(xué)術(shù)文檔的神經(jīng)光學(xué)理解。這是Nougat的官方倉庫,一個能夠理解LaTeX數(shù)學(xué)和表格的學(xué)術(shù)文檔PDF解析器。
GitHub地址:https://github.com/facebookresearch/nougat
項(xiàng)目頁面: Nougat
Nougat的安裝和使用方法
1、安裝
通過pip安裝:
pip install nougat-ocr
通過倉庫安裝:
pip install git+https://github.com/facebookresearch/nougat
注意,在Windows上:如果你想使用GPU,確保首先安裝正確版本的PyTorch。按照此處的說明進(jìn)行操作。
如果你想從API調(diào)用模型或生成數(shù)據(jù)集,需要額外的依賴項(xiàng)。通過以下方式安裝:
pip install "nougat-ocr[api]" 或 pip install "nougat-ocr[dataset]"
2、使用方法
(1)、獲取PDF的預(yù)測
T1、命令行接口(CLI)
要獲取PDF的預(yù)測,請運(yùn)行:
$ nougat path/to/file.pdf -o output_directory
也可以傳遞一個目錄的路徑或每行是PDF路徑的文件路徑作為位置參數(shù):
$ nougat path/to/directory -o output_directory
使用方法
nougat [-h] [--batchsize BATCHSIZE] [--checkpoint CHECKPOINT] [--model MODEL] [--out OUT]
[--recompute] [--markdown] [--no-skipping] pdf [pdf ...]
位置參數(shù):
選項(xiàng):
- -h, --help:顯示幫助信息并退出
- --batchsize BATCHSIZE, -b BATCHSIZE:使用的批處理大小。
- --checkpoint CHECKPOINT, -c CHECKPOINT:檢查點(diǎn)目錄的路徑。
- --model MODEL_TAG, -m MODEL_TAG:使用的模型標(biāo)簽。
- --out OUT, -o OUT:輸出目錄。
- --recompute:重新計(jì)算已計(jì)算的PDF,丟棄以前的預(yù)測。
- --full-precision:使用float32而不是bfloat16。在某些設(shè)置中可以加速CPU轉(zhuǎn)換。
- --no-markdown:不添加markdown兼容性的后處理步驟。
- --markdown:添加markdown兼容性的后處理步驟(默認(rèn))。
- --no-skipping:不應(yīng)用失敗檢測啟發(fā)式方法。
- --pages PAGES, -p PAGES:提供頁碼,例如'1-4,7'表示第1到4頁和第7頁。僅適用于單個PDF。
默認(rèn)的模型標(biāo)簽是0.1.0-small。如果你想使用基礎(chǔ)模型,請使用0.1.0-base。
$ nougat path/to/file.pdf -o output_directory -m 0.1.0-base
在輸出目錄中,每個PDF將保存為.mmd文件,這是一種輕量級標(biāo)記語言,大部分兼容Mathpix Markdown(我們使用LaTeX表格)。
注意:在某些設(shè)備上,失敗檢測啟發(fā)式方法工作不正常。如果你遇到大量的[MISSING_PAGE]響應(yīng),嘗試使用--no-skipping標(biāo)志運(yùn)行。相關(guān)問題:#11, #67
T2、API
使用額外的依賴項(xiàng),你可以使用app.py啟動一個API。調(diào)用:
$ nougat_api
通過向http://127.0.0.1:8503/predict/發(fā)送POST請求來獲取PDF文件的預(yù)測。它還接受start和stop參數(shù)來限制計(jì)算的頁碼(包含邊界)。
響應(yīng)是文檔的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'
要將轉(zhuǎn)換限制在第1到5頁,請?jiān)谡埱骍RL中使用start/stop參數(shù):http://127.0.0.1:8503/predict/?start=1&stop=5
(2)、數(shù)據(jù)集
生成數(shù)據(jù)集
要生成數(shù)據(jù)集,你需要:
>> 包含PDF的目錄
>> 包含.html文件(由LaTeXML處理的.tex文件)的目錄,具有相同的文件夾結(jié)構(gòu)
>> pdffigures2的二進(jìn)制文件和相應(yīng)的環(huán)境變量 export PDFFIGURES_PATH="/path/to/binary.jar"
然后運(yùn)行:
python -m nougat.dataset.split_htmls_to_pages --html path/html/root --pdfs path/pdf/root --out path/paired/output --figure path/pdffigures/outputs
其他參數(shù)包括:
| 參數(shù) | 描述 |
|---|
| --recompute | 重新計(jì)算所有拆分 |
| --markdown | MARKDOWN 輸出目錄 |
| --workers | WORKERS 使用的進(jìn)程數(shù) |
| --dpi | DPI 保存頁面的分辨率 |
| --timeout | TIMEOUT 每篇論文的最大時間 |
| --tesseract | Tesseract 每頁的OCR預(yù)測 |
最后,創(chuàng)建一個包含所有圖像路徑、markdown文本和元信息的jsonl文件:
python -m nougat.dataset.create_index --dir path/paired/output --out index.jsonl
對于每個jsonl文件,你還需要生成一個快速數(shù)據(jù)加載的索引映射:
python -m nougat.dataset.gen_seek file.jsonl
生成的目錄結(jié)構(gòu)可以如下所示:
root/
├── images
├── train.jsonl
├── train.seek.map
├── test.jsonl
├── test.seek.map
├── validation.jsonl
└── validation.seek.map
注意,路徑/配對/輸出中的.mmd和.json文件(此處為images)不再需要。這對于通過減少一半文件數(shù)量推送到S3存儲桶很有用。
(3)、訓(xùn)練
要訓(xùn)練或微調(diào)Nougat模型,運(yùn)行:
python train.py --config config/train_nougat.yaml
(4)、評估
運(yùn)行:
python test.py --checkpoint path/to/checkpoint --dataset path/to/test.jsonl --save_path path/to/results.json
要獲取不同文本模式的結(jié)果,運(yùn)行:
python -m nougat.metrics path/to/results.json
3、常見問題
為什么我只得到[MISSING_PAGE]?
Nougat是在arXiv和PMC上找到的科學(xué)論文上訓(xùn)練的。你正在處理的文檔是否與此相似?文檔的語言是什么?Nougat對英文論文效果最佳,其他拉丁語系語言可能也有效。中文、俄文、日文等則無效。如果這些要求都滿足,可能是由于CPU或較舊的GPU上失敗檢測的誤報(bào)(#11)。目前嘗試傳遞--no-skipping標(biāo)志。
我可以從哪里下載模型檢查點(diǎn)?
它們已上傳到GitHub的發(fā)布部分。你也可以在程序第一次執(zhí)行時下載它們。通過傳遞--model 0.1.0-{base,small}選擇首選模型。
Nougat的案例應(yīng)用
持續(xù)更新中……