多模態:Nougat詳解

文章目錄

  • 前言
  • 一、模型結構
    • 1. encoder
    • 2. decoder
    • 3. set
  • 二、數據增強
  • 三、數據
    • splitting the pages
  • 四、實驗評估
    • repetitions during inference
  • 五、代碼
    • 1. 環境安裝
    • 2. Dataset(dataset.py)
    • 3. Model(model.py)
  • 總結


前言

科學知識主要存儲在書籍和科學期刊中,通常以PDF的形式。然而PDF格式會導致語義信息的損失,特別是對于數學表達式。文章提出Nougat,一種視覺transformer模型,它執行OCR任務,用于將科學文檔處理成標記語言

paper:https://arxiv.org/pdf/2308.13418
github:https://github.com/facebookresearch/nougat/tree/main

一、模型結構

模型是一個encoder-decoder模型,允許端到端的訓練。請添加圖片描述

1. encoder

視覺encoder首先接受一張文檔圖像,裁剪邊距并調整圖像大小成固定的尺寸(H,W);如果圖像小于矩形,那么增加額外的填充以確保每個圖像具有相同的維度。encoder使用了Swin Transformer,將圖像分為不重疊的固定大小的窗口,然后應用一系列的自注意力層來聚集跨窗口的信息。該模型輸出一個embedding patch(d*N),其中d是隱層維度,N是patch的數目。

2. decoder

使用帶有cross-attention的mBART解碼器解碼(d*N),生成一系列tokens,tokens以自回歸方式生成,使用自注意力和交叉注意力分別關注輸入序列和編碼器輸出的不同部分,最后tokens被投影到vocabulary的大小,產生logits。

3. set

以 96 DPI 的分辨率渲染文檔圖像。由于 Swin Transformer 的限制性可能輸入維度,選擇輸入大小 (H, W ) = (896, 672)。使用預訓練的權重初始化模型。Transformer decoder的最大序列長度為 S = 4096。這種相對較大的尺寸是由于學術研究論文的文本可能是密集的,尤其是表格的語法是token密集型的。BART 解碼器是一個具有 10 層的僅解碼器Transformer。整個架構共有 350M 參數。此外還使用較小的模型 (250M 參數) 進行實驗,序列長度略小 S = 3584,只有 4 個解碼器層。

訓練:使用AdamW優化器訓練3個epoch,batch_size是192;由于訓練的不穩定性,選擇lr init = 5·10?5的學習率,每15次更新減少0.9996倍,直到達到lrend = 7.5·10?6

二、數據增強

在圖像識別任務中,使用數據增強來提高泛化性是有效的。文章應用一系列的transformation來模擬掃描文檔的缺陷和可變性。這些變換包括:腐蝕,膨脹,高斯噪聲,高斯模糊,位圖轉換,圖像壓縮,網格失真和彈性變換(這些變換可以借鑒一下,幾乎包括了所有圖像領域常用的變換)每個都有一個固定的概率來應用給給定圖像(這一步在訓練前完成)。轉換效果如下
請添加圖片描述
在訓練過程中,會用隨機替換token的方式給groud truth增加擾動

三、數據

目前沒有pdf頁面和其對應的source code的成對數據集。
根據arxiv上的開源文章,建立了自己的數據集。對于layout多樣性,我們引入了PMC開源非商業數據集的子集。在預訓練過程中,也引入了一部分行業文檔庫數據。

ARXIV
我們從arxiv上收集了174w+的pape,收集其源代碼并編譯pdf。為了保證格式的一致性,首先用latex2html處理源文件,并將他們轉為html文件。然后解析html文件,并將他們轉換為輕量級標記語言,支持標題,粗體和斜體文本、公式,表等各種元素。這樣,我們能保證源代碼格式是正確的,方便后續處理。整個過程如圖
請添加圖片描述

PMC
我們還處理了來自PMC的文章,其中除了PDF文件之外,還可以獲得具有語義信息的XML文件。我們將這些文件解析為與arxiv文章相同的標記語言格式,我們選擇使用PMC少得多的文章,因為XML文件并不總是具有豐富的語義信息。通常,方程和表格存儲為圖像,這些情況檢測起來并非易事,這導致我們決定將PMC文字的使用限制在預訓練階段。

IDL
IDL是行業產生的文檔集合。這個僅用在預訓練階段,用于教模型基本的OCR;

splitting the pages

我們根據pdf的頁中斷來分割markdown標記,然后將每個pdf頁面轉為圖像,來獲得圖像-標記pair。在編譯過程中,Latex會自動確定pdf的頁面中斷。由于我們沒有重新編譯每篇論文的Latex源,我們必須啟發式地將源文件拆分為對應不同頁面的部分。為了實現這一點,我們使用PDF頁面上的嵌入文本和源文本進行匹配。

然而,PDF中的圖像和表格可能不對應他們在源代碼中的位置。為了解決這個問題,我們在預處理階段去掉了這些元素。然后將識別的標題和XML文件中的標題進行比較,并根據他們的Levenshtein距離進行匹配。一旦源文檔被分成單個頁面,刪除的圖形和表格就會在每個頁面的末尾重新插入。

四、實驗評估

請添加圖片描述

在一篇科研文章中,存在三種不同類型的文本:1) 純文本,占文檔的大部分;2) 數學表達式;3) 表格。在評估過程中,檢查這三個部分中的每一個都很重要。這是因為在LaTeX中,表達同一個數學表達式有多種方式。盡管在LaTeXML預處理步驟中消除了一些可變性,但仍然存在大量歧義,這種歧義降低了數學和純文本的得分。數學表達式的預期得分低于純文本

repetitions during inference

我們觀察到模型會退化為一遍又一遍地重復相同的句子。模型無法自行從這種狀態中恢復過來。在最簡單的情況下,最后一個句子或段落被不斷地重復(在大模型中也經常出現)。我們在測試集中的1.5%頁面觀察到了這種行為,但領域外文檔的頻率會增加。陷入重復循環是使用貪婪解碼采樣時基于Transformer模型的一個已知問題。模型也可能在兩個句子之間交替,但有時會改變一些單詞,因此嚴格的重復檢測是不夠的。作者提出在訓練過程中引入隨機擾動以增強模型對錯誤預測標記的處理能力,以及在推理時檢測和處理重復的方法,但是仍然無法根本解決這類問題,這也讓模型的實用性受到限制

個人認為有兩種方法可以降低重復和幻覺

1. 輸出添加位置信息的預測,比如TextMonkey和mPlug-DocOwl1.5都把text grounding任務做為下游任務進行微調,在消融實驗里也提到了增加文本位置預測可以顯著降低模型輸出的幻覺;2. 降低圖像里文本的數量,在圖片中文本數量較少時,一般不容易出現重復和幻覺,所以可以按上篇文章提到的辦法,將圖片劃分為多個block,再對單個block訓練對應的端到端識別模型,這樣也可以解決模型輸出的重復問題

五、代碼

1. 環境安裝

按照github教程安裝即可,但注意transformer庫的版本, 如果transformer版本可能會報錯:
TypeError: BARTDecoder.prepare_inputs_for_inference() got an unexpected keyword argument ‘cache_position’

由于Nougat自己寫了“prepare_inputs_for_generation”,而與最新版本的transformers實現不同。因此應該在Nougat中安裝舊版本的transformers,例如transformers==4.38.2是沒有問題的。

2. Dataset(dataset.py)

主要函數:NougatDataset —— return input_tensor, input_ids, attention_mask

input_tensor: 圖像經過預處理后的輸入編碼
input_ids: 文本信息經過tokenizer處理后的id
attention_mask: input_ids對應的mask

依賴函數:SciPDFDataset——return {“image”: img, “ground_truth”: data.pop(“markdown”), “meta”: data}

數據格式
請添加圖片描述

簡單來說,SciPDFDataset輸出一個樣本的基本信息,NougatDatase則輸出模型可直接訓練的信息

3. Model(model.py)

Swintransformer基于timm構建,Bart基于transformer構建。有個小技巧,如果訓練顯存太大,可以嘗試在編碼器解碼器中添加一個參數

編碼器中添加 —— use_checkpoint=True
請添加圖片描述
解碼器中添加 —— gradient_checkpointing=True
請添加圖片描述


總結

Nougat嘗試用一個端到端的方式來實現過去無數小模型+策略配合的結果。確實效果很驚艷,但其缺點也十分明顯:

推理速度慢。雖然過去的pipeline設計多個模型,但每個模型都非常輕量化,組合起來的參數量甚至不到Nougat的1/10。
定制化難。
數據集構建成本高。(但是nougat的數據工程確實也很驚艷,非常值得學習!!!)
訓練成本高。主要體現在機器成本,需要更多的GPU,更長的訓練時間。
優化成本高。Nougat作為一種端到端的解決方法無法針對特定的badcase進行優化。比如在傳統方案中,如果表格OCR這個模塊效果較差單獨優化即可,不會影響到其它模塊。但用端到端的方案,當構建傾向表格的數據時,可能會導致其它場景出現新的badcase。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43717.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43717.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43717.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一網統管/視頻匯聚/安防監控平臺EasyCVR啟動后無法訪問是什么原因?

智慧城市/一網統管/視頻匯聚/安防監控平臺EasyCVR兼容性強,支持多協議接入,包括國標GB/T 28181協議、GA/T 1400協議、部標JT808協議、RTMP、RTSP/Onvif協議、海康Ehome、海康SDK、大華SDK、華為SDK、宇視SDK、樂橙SDK、螢石云SDK等,并能對外分…

接口測試課程結構

課程大綱 如圖,接下來的階段課程,依次專項講解如下專題,能力級別為中級,進階后基本為中高級: 1.接口基礎知識; 2.抓包工具; 3.接口工具; 4.mock服務搭建(數據模擬服務&am…

虛擬化技術的標準化

虛擬化技術的標準化是一個復雜而系統的過程,它旨在通過制定統一的接口、協議和規范來確保不同虛擬化產品之間的兼容性和互操作性。以下是虛擬化技術標準化的一些具體步驟: 1. 需求分析與標準制定 需求收集:首先,需要廣泛收集來自…

Git使用——首次創建本地倉庫、配置、初始化、關聯遠程倉庫

1、安裝 Git軟件 官網:git-scm.com 有時候官網打不開,這里留存個之前下載過的安裝包: https://download.csdn.net/download/weixin_43908355/89502977 2、配置本地倉庫 在準備建倉庫的文件夾里,右鍵點擊:Git Bash …

鴻蒙系統創建簽名文件及使用創建簽名文件打包并安裝

* 第一步 第二步:創建.p12文件,點擊New如果有的話就Choose Existing 填好下面信息 點擊Next進入到下面界面 開始生成csr文件如下圖 點擊OK–>Finish 文件保存在了下面目錄 第三步 1.訪問華為開發者平臺,登錄開發者賬號,進…

【linux服務器篇】-Redis-RDM遠程連接redis

redis desktop manager 使用遠程連接工具RDM連接redis 市面上比較常見的其中一款工具redis desktop manager 簡單的說: Redis Desktop Manager 簡單的來講就是Redis可視化工具,可以讓我們看到Redis中存儲的內容。 redis desktop manager是一款功能強…

環境構建大師:精通Conda中的conda create命令

環境構建大師:精通Conda中的conda create命令 引言 Conda是一個開源的包管理系統和環境管理系統,廣泛用于Python和其他科學計算語言的依賴管理。conda create命令是Conda中最核心的命令之一,它允許用戶快速創建新的隔離環境,確保…

金絲雀部署的藝術:在Eureka中實現漸進式服務更新

金絲雀部署的藝術:在Eureka中實現漸進式服務更新 引言 在微服務架構中,金絲雀部署是一種逐漸將新版本的服務引入生產環境的策略,以測試新版本在小規模用戶群中的表現,并減少更新風險。Eureka作為Netflix開源的服務發現框架&…

【面試八股總結】面向對象三大特性、虛函數、純虛函數、虛繼承

參考資料:阿秀 一、面向對象三大特性 封裝:將數據和代碼捆綁在一起,避免外界干擾和不確定性訪問 繼承:讓某種類型對象獲得另一個類型對象的屬性和方法 多態:同一種事務表現出不同事務的能力,即&#xf…

紅黑樹,B+樹,B樹的結構原理及對比

紅黑樹 結構原理: 紅黑樹是一種自平衡的二叉搜索樹,它通過在每個節點上增加一個顏色屬性(紅色或黑色)來確保樹的平衡性。紅黑樹的平衡是通過一系列旋轉和重新著色操作來實現的,這些操作在插入、刪除節點時進行&#…

數據庫課設---學生宿舍管理系統(sql server+C#)

1.引言 1.1 內容及要求 設計內容:設計學生宿舍管理系統。 設計要求: (1)數據庫應用系統開發的需求分析,寫出比較完善系統功能。 (2)數據庫概念模型設計、邏輯模型設計以及物理模型設計。 …

yolov8 人體姿態識別

引言 在計算機視覺的各種應用中,人體姿態檢測是一項極具挑戰性的任務,它能夠幫助我們理解人體各部位的空間位置。本文將詳細介紹如何使用 YOLOv8 和 Python 實現一個人體姿態檢測系統,涵蓋模型加載、圖像預處理、姿態預測到結果可視化的全流…

Echarts水球圖(liquidFill)添加文字

效果 代碼 {type: liquidFill,shape: shapes[0].value,radius: 90%,data: [{name: 獨立百貨,value: 0}],center: [50%, 50%],color: [{type: linear,x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0,color: #446bf5},{offset: 1,color: #2ca3e2}],globalCoord: false}],backgro…

JSP實現簡單的登錄和注冊

JSP實現登錄和注冊(Map集合模擬數據庫) 1、login.jsp2、 loginSelect.jsp3、register.jsp4、 RegisterSelect.jsp5、 index.jsp 1、login.jsp login.jsp中username和password在LoginSelect.jsp驗證是否一致使用session.setAttribute("login_msg&quo…

RTOS系統 -- ARM Cortex-M4 RPMSG之通道初始化函數

RPMsg Lite 在 ARM Cortex-M4 RTOS 中的使用 簡介 在ARM Cortex-M4處理器上使用的RTOS(實時操作系統)中,rpmsg_lite是一個輕量級的遠程處理消息傳遞框架,通常用于多核處理器或多核系統中不同處理器之間的通信。本文檔將介紹 rpm…

ffmpeg轉換MP4為gif命令

這里記錄一下使用 ffmpeg去轉化 gif 的一些快捷命令 # 直接轉換 ffmpeg -i 222.mp4 -r 12 222.gif# 調色板優化處理 ffmpeg -i 222.mp4 -r 12 -vf "split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" 222.gif第二條命令的解釋如下: split[s0][s1]&am…

nginx設置代理解決跨域問題

vue工程 npm run build 后把dist包放到 nginx代理服務器的html目錄,在conf/nginx.conf配置文件中增加配置,這樣就可以正常方位后端接口了,配置如下: server {listen 8193;server_name localhost 127.0.0.1;location / {root D:…

【RHCE】dns實驗0707

題目: 做法: 1.創建兩個虛擬機 張三:且有加密 李四: 設置zhangsan/lisi對應的html網頁 主服務器測試: 證書驗證 2.配置dns 主服務器: 區域文件(zs/lisi) 從服務器: 且dns為主服務…

OZON生活家居用品爆款新品

OZON生活家居用品爆款新品涵蓋了多個方面,這些產品不僅滿足了消費者對生活品質的追求,也反映了當前市場的熱門趨勢。以下是一些在OZON平臺上備受關注的生活家居用品爆款新品: OZON生活家居用品爆款新品工具:D。DDqbt。COm/74rD T…

Midway Serverless 發布 2

可以看看優化后的開發情況,不僅和應用一樣,速度還比較快,也不會生成臨時目錄,修改實時生效。 這是 v2.0 和 v1.0 的根本性變化,也是整體架構升級帶來的巨大優勢。 當然,這一塊并不是功能的新增&#xff0c…