【要約】VLMのOCRはデモが映える。本番で壊れる。 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がVLMを用いてOCRを実装する際、デモは成功しても本番で座標がずれる問題に直面する。VLMはテキストの意味理解には長けているが、ピクセル単位の正確な座標出力には設計上向いていない。具体的には以下の課題がある。
- ・VLMが「それっぽい座標」を出力する幻覚(Hallucination)が発生する。
- ・RPAでのクリック操作やKYCでのハイライト表示において、座標の不一致が致命的なエラーとなる。
- ・ファインチューニングを行っても、座標の幻覚をゼロにすることは困難である。
// Approach
開発者は、VLMに座標を任せるのではなく、テキスト抽出と座標取得の役割を分離するアプローチを採用した。VLMにはテキストの意味理解のみを担わせ、座標はVision APIの実測値を使用する。具体的な手順は以下の通りである。
- ・Google Cloud Vision APIの
DOCUMENT_TEXT_DETECTIONを用い、実測のシンボル座標を取得する。 - ・「CharMatcher」を用いて、VLMの出力テキストをVision APIのシンボルに再アンカリングする。
- ・マッチングは、
difflib.SequenceMatcherによる段落レベルの特定と、adaptive y-bandフィルタを用いた文字単位の精密なマッチングの2段階で行う。 - ・coverageやorderなどの要素を用いたスコアリングにより、座標の信頼性を算出する。
// Result
この手法により、VLMの柔軟性とVision APIの幾何学的な正確性を両立したOCR処理が可能となった。誰がどのような成果を得たのか、以下の通り整理する。
- ・開発者は、VLMの出力に対し、正確な4点ポリゴン座標(vertices)を紐付けられるようになった。
- ・利用者は、
match_ratioやbbox_sourceにより、座標の信頼性を判断できる。 - ・現在は、同一文字列の重複発生時における精度向上や、信頼度が低い場合の制御といった課題に取り組んでいる。
Senior Engineer Insight
> 非常に実践的で、AIの限界を正しく理解した設計である。VLMの意味理解と、従来のビジョンの正確性を分離・統合する設計は、実戦におけるAI実装の定石だ。ただし、同一文字列の重複や座標の重なりといったエッジケースへの対応は、実運用における信頼性を左右する。スケーラビリティの観点では、Vision APIのコストとVLMのレイテンシのトレードオフを考慮する必要がある。