Closed3

[論文] mPLUG-DocOwl2: High-resolution Compressing for OCR-free Multi-page Document Understanding

kun432kun432

ここで知った

https://twitter.com/sei_shinagawa/status/1858533512762294327

論文

https://arxiv.org/abs/2409.03420

Claude-3.5-sonnetによる落合プロンプトの結果

mPLUG-DocOwl2: OCRフリーな複数ページ文書理解のための高解像度圧縮

1. どんなもの?

高解像度文書画像を効率的に処理できるマルチモーダル大規模言語モデル「mPLUG-DocOwl2」を提案。従来のOCRを使用しない文書理解モデルでは、1つのA4サイズの文書に対して1000以上のビジュアルトークンを生成していたが、本モデルは324トークンまで圧縮しながら、同等の性能を実現。さらに、複数ページの文書理解やビデオ理解にも対応し、First Token Latencyを50%以上削減することに成功している。

2. 先行研究と比べてどこがすごい?

従来研究では、高解像度文書画像を処理する際に以下の3つのアプローチが取られていた:

  • 各クロップ画像を独立に圧縮(トークン数が多くなる問題)
  • 学習可能なクエリによる圧縮(レイアウト情報を考慮できない問題)
  • グローバル特徴を用いた圧縮(従来手法より効率的)

本研究では、低解像度のグローバル特徴をガイダンスとして使用し、レイアウトを考慮した効率的な圧縮を実現。同等の学習データで訓練された既存モデルと比較して、20%以下のビジュアルトークンで同等の性能を達成している。

3. 技術や手法の肝はどこ?

High-resolution DocCompressorと呼ばれる新しい圧縮アーキテクチャを提案。具体的には:

  • 低解像度のグローバル特徴をクエリとして使用
  • クロップ画像の特徴をキーと値として使用
  • クロスアテンションによる効率的な情報圧縮

さらに、vision-to-textモジュールの後に圧縮を適用することで、テキスト意味情報の保持を実現。3段階の学習フレームワーク(Single-image Pretraining、Multi-image Continue-pretraining、Multi-task Finetuning)により、単一画像と複数画像の両方の理解能力を獲得。

4. どうやって有効だと検証した?

以下の評価実験を実施:

  • 単一画像文書理解ベンチマーク10個での評価(DocVQA、InfoVQA、DeepFormなど)
  • 複数ページ文書理解ベンチマーク2個での評価(MP-DocVQA、DUDE)
  • テキストリッチなビデオ理解ベンチマーク(NewsVideoQA)での評価

実験結果から、提案手法は従来手法と比較して、少ないビジュアルトークン数で同等以上の性能を達成し、First Token Latencyも50%以上削減できることを確認。

5. 議論はある?

アブレーション実験により、以下の知見を得ている:

  • vision-to-textモジュールの後に圧縮を適用することの有効性
  • グローバル特徴とクロップ画像特徴の位置対応の重要性
  • クロスアテンションのレイヤー数は2層程度で十分

また、一般的なA4サイズの文書ページに対して、324トークンで十分な文書理解性能が得られることを実証。これにより、複数ページやビデオフレームの効率的な処理が可能になることを示している。

6. 次に読むべき論文は?

以下の関連研究を参照することを推奨:

  • UReader(Ye et al., 2023b):高解像度画像処理のための形状適応型クロッピング
  • TextMonkey(Liu et al., 2024):視覚トークンのフィルタリングと集約
  • DocOwl 1.5(Hu et al., 2024):構造認識学習の基礎となる研究
  • Mini-Gemini(Li et al., 2024c):一般的な視覚特徴の圧縮に関する研究

GitHubレポジトリ

https://github.com/X-PLUG/mPLUG-DocOwl/tree/main/DocOwl2

kun432kun432

ちょっとQA

Q
例えばgpt-4oやclaude-3.5-sonnetなどのvlmと比較して、どういうところに優位性がある?gpt-4oやclaude-3.5-sonnetなどもOCRは使用しませんが。

この比較について、重要な点をいくつか説明させていただきます:

  1. メモリ効率とレイテンシー:

    • GPT-4V、Claude 3などの一般的なVLMは、高解像度の文書画像を処理する際に、内部的に多数のビジュアルトークンを生成します。これは特に複数ページの文書を処理する際にメモリ使用量とレイテンシーの問題を引き起こす可能性があります。
    • 一方、mPLUG-DocOwl2は324トークンという固定長の圧縮表現を使用することで、効率的な処理を実現しています。
  2. 文書特化型の設計:

    • GPT-4VやClaude 3は汎用的なビジョン言語モデルとして設計されており、文書理解は多くのタスクの一つに過ぎません。
    • mPLUG-DocOwl2は文書理解に特化して設計されており、特にレイアウトを考慮した圧縮やテキスト意味情報の保持に重点を置いています。
  3. 複数ページ処理:

    • GPT-4VやClaude 3では、複数ページの文書を同時に処理する際の効率性や性能について明確な報告がありません。
    • mPLUG-DocOwl2は複数ページの文書理解に特化した学習フレームワークを持ち、MP-DocVQAやDUDEなどのベンチマークで評価されています。

ただし、以下の点に注意が必要です:

  • この論文ではGPT-4VやClaude 3との直接的な性能比較は行われていません
  • GPT-4VやClaude 3は非公開のアーキテクチャであり、内部的な実装の詳細は不明です
  • 文書理解以外のタスクにおいては、汎用的なVLMの方が優れている可能性があります

したがって、mPLUG-DocOwl2の主な優位性は、文書理解に特化した効率的な処理と複数ページ処理の能力にあると言えますが、総合的な性能比較については更なる研究が必要かもしれません。

なるほど、ドキュメント理解に特化していてリソース効率が良いというところがポイントかな。

kun432kun432

モデルはこれみたい

https://huggingface.co/mPLUG/DocOwl2

Colaboratoryでデモコードを試してみる。ランタイムはL4。

デモ用の画像データをダウンロード。DocOWL2の論文のP1〜6を画像化したものになっている。

!mkdir -p examples
!wget -O examples/docowl2_page0.png https://huggingface.co/mPLUG/DocOwl2/resolve/main/examples/docowl2_page0.png?download=true
!wget -O examples/docowl2_page1.png https://huggingface.co/mPLUG/DocOwl2/resolve/main/examples/docowl2_page1.png?download=true
!wget -O examples/docowl2_page2.png https://huggingface.co/mPLUG/DocOwl2/resolve/main/examples/docowl2_page2.png?download=true
!wget -O examples/docowl2_page3.png https://huggingface.co/mPLUG/DocOwl2/resolve/main/examples/docowl2_page3.png?download=true
!wget -O examples/docowl2_page4.png https://huggingface.co/mPLUG/DocOwl2/resolve/main/examples/docowl2_page4.png?download=true
!wget -O examples/docowl2_page5.png https://huggingface.co/mPLUG/DocOwl2/resolve/main/examples/docowl2_page5.png?download=true

Colaboratory標準である程度パッケージは揃っているので足りないものだけ。

デバッグ出力用

!pip install icecream

flash-attention-2が必要なので、自分で事前ビルドしたものをインストール

!wget https://github.com/kun432/flash-attention-prebuild-wheels/releases/download/v0.0.0-test/flash_attn-2.6.3+cu121torch2.5-cp310-cp310-linux_x86_64.whl
!pip install --no-dependencies --upgrade flash_attn-2.6.3+cu121torch2.5-cp310-cp310-linux_x86_64.whl

モデルのロード

import torch
import os
from transformers import AutoTokenizer, AutoModel
from icecream import ic
import time

class DocOwlInfer():
    def __init__(self, ckpt_path):
        self.tokenizer = AutoTokenizer.from_pretrained(ckpt_path, use_fast=False)
        self.model = AutoModel.from_pretrained(ckpt_path, trust_remote_code=True, low_cpu_mem_usage=True, torch_dtype=torch.float16, device_map='auto')
        self.model.init_processor(tokenizer=self.tokenizer, basic_image_size=504, crop_anchors='grid_12')
        
    def inference(self, images, query):
        messages = [{'role': 'USER', 'content': '<|image|>'*len(images)+query}]
        answer = self.model.chat(messages=messages, images=images, tokenizer=self.tokenizer)
        return answer


docowl = DocOwlInfer(ckpt_path='mPLUG/DocOwl2')

この時点でVRAM16GBぐらい使用。

では推論。全部読み込むにはVRAMが足りなさそうなので3ページ分だけ。

images = [
        './examples/docowl2_page0.png',
        './examples/docowl2_page1.png',
        './examples/docowl2_page2.png',
#        './examples/docowl2_page3.png',
#        './examples/docowl2_page4.png',
#        './examples/docowl2_page5.png',
    ]

answer = docowl.inference(images, query='what is this paper about? provide detailed information.')
出力
ic| prompt: ('USER: <img 1><|image|><img 2><|image|><img 3><|image|>what is this paper '
             'about? provide detailed information. ASSISTANT:')
This paper is about OCR-free multi-page document understanding for derstanding.
As shown in the first image, The paper discusses the problem of OCR-free multi-page document understanding, which is the ability to process and extract meaningful information from multi-page documents without relying on optical character recognition (OCR) software. The authors present a high-resolution compression method called MPLUG-DocOwl2 that achieves promising OCR-free Document Understanding performance by considering the cost of generating thorough sands of visual tokens for a single document image, leading to excessive GPU computation time. The paper also provides a detailed explanation of the overall structure parsing of the document.

特定のページについて聞いてみる。

answer = docowl.inference(images, query='what is the third page about? provide detailed information.')
出力
ic| prompt: ('USER: <img 1><|image|><img 2><|image|><img 3><|image|>what is the third page '
             'about? provide detailed information. ASSISTANT:')
The third page is about related work.
In the third section of the text, the authors discuss related work in the field of OCR-free document understanding. They begin by defining OCR-free document understanding as comprehending images with rich text information, including scans of document pages. They then go on to discuss previous work in this area, including methods for compressing and decompressing text in images, methods for understanding text in images, and methods for recognizing handwritten text. The authors conclude by highlighting their own contributions to this field, specifically their work on compressing and decompressing text in images using neural networks.

日本語の場合

answer = docowl.inference(images, query='この論文は何について書かれたものですか?詳細な情報を提供してください。')
出力
ic| prompt: ('USER: <img 1><|image|><img 2><|image|><img '
             '3><|image|>この論文は何について書かれたものですか?詳細な情報を提供してください。 ASSISTANT:')
 OCR-free Multi-page Document Understanding
answer = docowl.inference(images, query='3ページ目はどのような内容ですか?詳細な情報を提供してください。')
出力
ic| prompt: ('USER: <img 1><|image|><img 2><|image|><img '
             '3><|image|>こ3ページ目はどのような内容ですか?詳細な情報を提供してください。 ASSISTANT:')
 3ページ目は単純な図や図解を掲載しているから質問がありますが詳細を教えていただけますか?

うーん、日本語は全くわかってないわけではなさそうだけど、ダメっぽい。

少し追いかけてみたけどベースモデルがよくわからない。ベースモデルの派生にはマルチリンガルもあるように思えるのだけども。。。

このスクラップは3日前にクローズされました