なぜ小さく作ったか
マンガのセリフを読む用途は、1コマずつ大量に処理することが多い。1枚あたりのコストが効いてきます。そこで、巨大な汎用モデルを積むのではなく、吹き出しという狭い入力に絞った小さなモデルを作りました。画像を理解する部分は学習済みのDINOv2をそのまま使い、文字を書き出すデコーダだけをゼロから学習させています。見る力は借りて、書く力だけ自分で育てる。この分担なら、115Mでも必要な精度が出せると考えました。
結果として、日本語のベンチマークでは蒸留のもとにした教師モデルを上回り、英語と中国語でも、8倍の大きさのモデルと吹き出し単位では互角のところまで来ています。学習はA100を1枚、3日ほど。評価は学習に使っていない人手注釈で行いました。
しくみ
吹き出しを224×224で切り出し、凍結したDINOv2-ViT-B/14に通します。出てきた256個の視覚トークンを小さなMLPで512次元に変換し、6層のデコーダに渡す。デコーダは文字を1つずつ予測します。語彙は文字単位で14,630種類。日中英の漢字とかな、アルファベットを1つの表にまとめました。学習は2段階で、まずデコーダだけを回し、あとから微調整しています。
- 視覚エンコーダ
- DINOv2-ViT-B/14(86M・凍結して再利用)
- デコーダ
- 6層 GQA(8q / 2kv)・約26M・ゼロから学習
- デコーダ構成
- hidden 512 · FFN 1536 · RoPE · SwiGLU · tied embeddings
- 語彙
- 14,630(文字単位)
- 対応言語
- 日中英(3言語)
- 配布形式
- PyTorch / ONNX(121MB・242MB)
- 量子化
- fp16 / int8 / int4
- ライセンス
- Apache-2.0
精度
| 言語 | Baberu 115M | PaddleOCR-VL 0.9B | For-Manga 0.9B | manga-ocr 110M |
|---|---|---|---|---|
| 日本語 | 3.5 | 3.7 | — | 4.2 |
| 英語 | 6.2 | 8.1 | 19.2 | 39.2 |
| 中国語 | 5.2 | 7.7 | 8.8 | 37.1 |
吹き出し単位の緩和CER(%、低いほど良い)。評価はManga109-v2026(日 n=2000)と、人手注釈のホールドアウト(英 n=237、中 n=246)。なお、長文を文字重みで測るCERでは、英語と中国語でPaddleOCR-VLが優位です。For-Mangaは日本語をManga109で学習しているため、日本語の比較からは外しています。
苦手なところ
- 入力は吹き出し1つが前提です。ページ全体をそのまま渡す使い方には向きません(検出は別の工程で)。
- 濁点と半濁点をたまに取り違えます。
- 学習データから外れた、古い西洋コミックのフォントには弱いです。