2023-12-14 ML勉強会
TrOCR: Transformer-based Optical Character Recognition with Pre-trained ModelsAbstract by ClaudeIntoroductionTrOCREncoderDecoderModel InitializationPre trainingFine-tuningData Augmentation実験DatasetベンチマークSettingsMetricsResultsRandom Thoughts
TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models
Minghao Li, Tengchao Lv, Jingye Chen, Lei Cui, Yijuan Lu, Dinei Florencio, Cha Zhang, Zhoujun Li, Furu Wei
AAAI 2023, CVPR 2022
Beihang UniversityとMicrosoftの研究
Abstract by Claude
- 論文の概要: この論文では、事前学習された画像TransformerとテキストTransformerを組み合わせたTrOCRと呼ばれるエンドツーエンドのTransformerベースのOCRモデルが提案されています。入力画像はパッチに分割され、画像Transformerによって特徴量が抽出されます。抽出された特徴量を用いて、テキストTransformerによってwordpieceの列が生成されます。TrOCRは大規模な合成データや人手ラベルデータで事前学習でき、下流のOCRタスクに微調整できる柔軟性があります。
- 先行研究にどのようなものがあったか: 従来のアプローチの多くが、画像理解のためにCNNベースのエンコーダと、文字レベルのテキスト生成のためにRNNベースのデコーダを使用していました。しかしながら、言語モデリング能力が十分でないため、多くの研究が外部言語モデルを後処理ステップとして必要としていました。
- 先行研究に比べた優位性: TrOCRは大規模な事前学習済み画像TransformerとテキストTransformerモデルを活用できるため、外部言語モデルを必要とせず、単一のエンコーダデコーダフレームワークで高精度な認識が可能です。文字ベースではなくwordpieceベースであるため計算コストも削減できます。
- 優位性をどのようにして検証したか: 印刷文字、手書き文字、現場のテキスト認識といった複数のOCRベンチマークデータセットを用いて、従来の最先端手法と比較実験を行い、精度と効率の両面で優位性を検証しました。
Intoroduction
- OCRはテキスト検出モジュールとテキスト認識モジュールの二つに分かれる
- 前者はObject Detection、後者はImage to textの問題として捉えられる
- 前者はCNN、後者はRNNのEncoder-Decoder問題として組み立てられることが多い。
- 本論文では後者に焦点を当てて議論を行う
- 既存手法のモデルの重みは人工データセットで一から学習するため、事前学習済みモデルを使った手法は未検証。
- 近年はTransformerベースの画像変換器も多く提案されており、OCRのCNN部分を置き換えることは容易
- そこで以下のようなTransformerを用いたEncoder-DecoderモデルであるTrOCRを提案した
- 384 x 384にリサイズ → 16x16のシーケンスに分割
- VitベースのEncoderとBERTベースのDecoder
- 利点が3つある
- 教師なし画像やテキストで事前学習を行なったmodelを使用するので、さらに言語モデルを繋げる必要がない。
- CNNを使わないことで、画像特有のinductive biasを排除できる
- 複雑な前処理・後処理なしに印刷文字や手書き文字、シーンテキスト認識でSoTAを達成した。
- 論文の貢献
- 事前に学習したCVとNLPモデルを用いて、テキスト認識のためのエンドツーエンドのTransformerベースのOCRモデルであるTrOCRを提案。これはOCRのテキスト認識タスクのために、事前に学習された画像とテキストのTransformerを共同で活用した最初の論文である。
- TrOCRは標準的なTransformerベースのエンコーダ・デコーダモデルで最先端の結果を達成し、これは畳み込みがなく、複雑な前/後処理ステップに依存しない。
TrOCR
Encoder
- ViTと同じ
- 画像 → パッチ分割 → D次元ベクトルに線型射影
- CNNのようなネットワークによって抽出された特徴とは異なり、Transformerモデルは画像固有のInductive biasを持たず、画像をパッチのシーケンスとして処理するため、画像全体と独立したパッチのどちらにも異なる注意を払いやすくなる。
Decoder
- 一般的なTransformer Decoderを使用
- Key-ValueはEncoderからQueryはDecoderからのCross Attention
- 未来の情報を見えなくするMASK
- 最終的にはVocabごとの確率を出力し、ビームサーチで最終的な生成結果を得る。
Model Initialization
- EncoderはDeiT or BEiTで初期化
- DeiTはImageNetのみで事前学習しているが、data augmentationや蒸留などの工夫が行われている。
- BEiTはMasked Image Modelingで事前学習している。
- 離散VAEでvisual tokenを作成している
- https://github.com/microsoft/unilm/blob/master/beit/README.md
- DecoderはRoBERTa or MiniLMで初期化
- MiniLMはでかいTransformerモデルを圧縮したもの (99%の性能を維持)
- Transformer層の最後のSelf-Attention層を蒸留した
- 元々のモデルはEncoderモデルなので、Cross-Attention部分はrandomに初期化する
Pre training
- テキスト認識を事前学習で行う
- 2段階に分けられる
- 数億枚の印刷されたテキストライン画像からデータセットを合成させる
- 印刷されたテキストと手書きに対するタスクの比較的小さなデータセットを構築する。(数百万枚)
- シーンテキスト認識に関しては、既存の合成シーンテキストデータセットを使用
Fine-tuning
- シーンテキスト認識以外は、下流のテキスト認識タスクでFine-tuningをする
Data Augmentation
- printed and handwriten datasetに対して
- Random rotation (-10 to 10 degrees)
- Gaussian blurring
- image dilation
- image erosion
- downscaling
- underlining
- シーンテキスト認識に対して
- RandAug
- inversion
- curving
- blur
- noise
- distortion
- rotation
- etc
実験
Dataset
事前学習データセット
- インターネットの公開PDFファイルから200万件の文書ページをサンプリング
- ページごとに画像に変換し、それらからcropした画像とテキスト行を抽出する。
- 最終的に684Mのテキスト行を取得した
- 5427の手書きフォントとTRDGというツールを使って手書き画像を生成した
- https://github.com/Belval/TextRecognitionDataGenerator/tree/master
- Stage-1ではWikipediaからランダムにクロールしたものを利用
- Stage-2の事前学習用手書きデータセットはIIIT-HWSデータセットから17.9Mのテキスト行で構成。
- 実世界の53kのレシートに市販のOCRをかけたデータセットも作成
- TRDGとレシートに使われる二つのフォントを使って、1Mの合成画像も作成
- シーンテキスト認識のためのStage-2のデータはMJSynthとSynthTextを使用。合計で16Mのテキスト画像。
ベンチマーク
- SROIE
- レシート画像
- テキスト検出は本論文ではスコープにしてないので、テキスト行を切り出した画像を用いて評価
- IAM Handwriting Database
- 6161行の訓練テキスト、966行の検証テキスト、2915行のテストテキスト
- シーンテキスト認識は以下の幅広いデータセットで検証
- IIIT5K-3000 (Mishra, Alahari, and Jawahar 2012)
- SVT-647(Wang, Babenko, and Belongie 2011)
- IC13-857, IC13-1015 (Karatzas et al. 2013),
- IC15-1811, IC15-2077 (Karatzas et al. 2015)
- SVTP-645 (Phan et al. 2013)
- CT80-288 (Risnumawan et al. 2014)
Settings
- DeiTはtimmで初期化
- BEiTとMiniLMはUniLMレポジトリから使用
- V100 GPU 32個使用してbatch_size 2048 lr 5e-5とした
- tokenizer
- FairseqのBPEとsentence pieceを使用
- Image Encoder
- 画像サイズ:384x384
- パッチサイズ:16 x 16
- Text Decoder
- RoBERTa baseの最後の6層
- RoBERTa largeの最後の12層
- ビームサイズ: 10
- CRNNと比較を行った
Metrics
- SROIEでは単語レベルのPrecision, Recall, F1
- IAMデータセットでは大文字小文字を区別した上で文字誤り率 (Character Error Rate)
- シーンテキスト認識ではWord Accuracy
- 公平に比較するためにこのタスクで一般的な36文字の英数字に最終的な出力をフィルターする。
Results
- Encoder-Decoderの組み合わせによる比較
- DeiTよりBEiTの方が精度が高く、Decoderも大きい方が精度が高い
- ResNet50 → TransformerベースのEncoderにすることでも精度は向上している
- 各要素がどの程度影響を及ぼしているか。First-Stageである程度の性能は達成できていそう。
- (Data AugmentaionがFirst-Stage + Data Augmentaionなのか明記されていなかった)
- SROIEタスクでの結果
- MSOLabとCLOVA OCRはDecoderにLSTMを使っている
- H&HLablはGRU
- Transformer層が既存のSoTAモデルより優れている (と書いてるが割とH&H Labと逼迫してる)
- IAM Handwritten dataset
- Synthetic + IAMの中では最も低いCERを達成
- CTC Decoderについてはこちら
- シーンテキスト認識
- 合成データのみを使うかベンチマークデータセットの訓練データでfine tuningを行うかで比較
- 8つのうち5つではSoTAを達成
- 一部のデータセットでは画像にシンボルが含まれていても正解にシンボルが含まれていないことが多く、事前学習データとは作り方が違うためTrOCRではシンボルを出力してしまう傾向があるらしい
Random Thoughts
- 思ったよりやってみた感の強い論文だった
- 多言語モデルも公開予定らしいが、2022.02から進捗がない
- 割と我々でも頑張ったら作れそうだなという気がした