Help us understand the problem. What is going on with this article?

画像の中の文字を見つけるのって今どんな感じなの?まとめてみたんご

AdventCalender論文2日目担当のCurryです!

今回は画像の中の文字を見つける技術の昔と最新をまとめました。
意外と文字検出の論文紹介ってないんじゃね!?っていう

画像は参照サイト(各章の先頭のURL)、論文中から引っ張ってきてます

文字検出

画像の中の文字を見つけるのは 文字検出 と呼ばれます。英語では Text Detection とか Text Localization という。
つまりこんなタスク。オレンジ線が文字を囲めてるので、検出ができたと判断できる。

入力画像 出力

文字検出の難しさは、以下のようによく言われる。(いわゆる論文のイントロの謳い文句)
1. 文字の多様性
2. 文字の色
3. 文字のコントラストや背景との混同
4. 文字の大きさが違う
5. 文字の方向(いわゆるアルファベットが斜めになっていたり)

ちなみに、、、
文字認識 は文字を判別することなので、文字検出とは別タスク。
文字検出、文字認識を同時に行うことは Text Spotting と呼ばれる。

たまに出てくる OCR(Optical Character Recognition は文字検出だったり、文字認識を含んで呼んだりする

ちなみに最近の文字検出は中国が強い感じがします。(文字検出に限らずAI全般で言えるけど)
論文の出どころを見ると、中国の大学機関がよく書かれている。

文字検出のタスク

文字検出は ICDAR Robust Reading Competition と呼ばれるネット上のコンペで競われる。
https://rrc.cvc.uab.es/

ここでは、文字に関わる様々なコンペが開催され、2年に一度カンファレンスが開かれる。
ICCVやCVPR, ECCVなどに投稿される、文字検出に関わるものは、ほとんどがICDARのコンペで他手法と比較した結果を載せるようになっている。

じゃあどんなタスクがあるのかの代表例を紹介

2011-2015 Born-Digital Images

https://rrc.cvc.uab.es/?ch=1

検出の対象となるのは、Web上やEmailの電子的な整った文字。文字の形はある程度固まっているので、検出しやすい

2013-2015 Focused Scene Text

https://rrc.cvc.uab.es/?ch=2

検出対象は、自然な風景の画像(これは情景画像という)の横長の文字
いわゆる水平な文字を検出する

2015 Incidental Scene Text

https://rrc.cvc.uab.es/?ch=4

検出対象は、自然な風景の画像(これは情景画像という)のいろんな方向の文字
いわゆる斜め方向に検出しなければいけない!
しかも文字の大きさもFocused Scene Textより小さくなっている、、

image.png

2017-2019 Multi-lingual scene text detection and recognition

https://rrc.cvc.uab.es/?ch=15&com=tasks

これまでのタスクはアルファベットが対象だったが、ここからついに、いろんな言語が対象になった。
対象の言語は、アラビア語, ラテン語(アルファベット), 中国語, 日本語, 韓国語, バングラデシュ語, ヒンディー語, 記号, いろんな言語の組み合わせ, などになっている。

2019 Arbitrary-Shaped Text

文字がななめとかの話じゃなく、曲がったり、円形なものも見つけるというタスク。結構むちゃぶりな希ガス、、

文字検出のアルゴリズムの歴史

ここから、検出のアルゴリズムの歴史を振り返る。

CNNが流行る前まで ( 〜2012)

現在の手法はディープラーニングの手法が当たり前だが、ディープラーニングの前はいろいろな方法が存在した。

いわゆるスライディングウィンドウをして、それぞれの特徴量で文字かどうか判別する手法がよくあった

CNNを使わないものとしては、MSERなどが流行った

例)

  • K. Wang, B. Babenko, and S. Belongie, “End-to-end scene text recognition,” in Computer Vision (ICCV), 2011 IEEE International Conference on. IEEE, pp. 1457–1464, 2011.

これのアルゴリズムは、それぞれの文字を検出し、文字列につなげるもの。
文字の検出はスライディングウィンドウとRandomFernsを使っている。(だから検出された文字を囲む矩形は同じ大きさになっている?)
文字を繋げる時は Pictorical Structuresという方法で、文字とその文字らしさのスコアを入力にして最適なWordを出力する。

  • S. Milyaev, O. Barinova, T. Novikova, P. Kohli, and V. Lempitsky, “Image binarization for end-to-end text understanding in natural images,” in 2013 12th International Conference on Document Analysis and Recognition, pp. 128–132, Aug 2013.

CNNがはやってから(2012〜)

ここではまだCNNでの検出は確立されてなく、スライディングウィンドウしてCNNするものがはやっていた。

例)

Jaderbergらの手法

https://www.robots.ox.ac.uk/~vgg/publications/2016/Jaderberg16/jaderberg16.pdf

文字検出の論文を見ると、7割くらいの確率でこれが出てくるくらい有名な論文。文字検出から認識までのパイプラインがまとまった手法。

スライディングウィンドウして、Bouding-boxをRegression(文字の位置に合うように調整)する → CNNで文字認識
という王道パターンを確立したような感じ。

  • T. Wang, D. J. Wu, A. Coates, and A. Y. Ng, “End-to-end text recognition with convolutional neural networks,” in Pattern Recognition (ICPR), 2012 21st International Conference on, pp. 3304–3308, 2012.
  • M. Opitz, M. Diem, S. Fiel, F. Kleber, and R. Sablatnig, “End-to-end text recognition using local ternary patterns, mser and deep convolutional nets,” in Document Analysis Systems (DAS), 2014 11th IAPR International Workshop on, pp. 186–190, 2014.

Faster R-CNNが出てから (2014〜)

Faster R-CNNが出てきたのは、とても大きな存在だった。
CNNだけでスライディングウィンドウも行えて、かつそのBoudingBoxの変形も行えるのはかなり大きな進歩だった。

最近はほとんど、FasterR-CNN, SSD, YOLOをベースに行っている。

FasterR-CNNやYOLO, SSDはAnchor(アンカー)ベースとよばれた。
アンカーとは固定サイズの矩形(緑色)でこれを変形させた検出の矩形(オレンジ)に変える。

例)

CTPN

https://arxiv.org/abs/1609.03605

FasterR-CNNを改良した手法で代表される手法。

文字列を検出するのではなく、最初は横幅が固定で縦の大きさが変わる矩形を作成する。それらをBD-LSTMを使って、連結し文字列の矩形を作成している。それがFigure.1, 2になっている。

DeepText

  • Z. Zhong, L. Jin, S. Zhang, and Z. Feng, “Deeptext: A unified framework for text proposal generation and text detection in natural images,” arXiv preprint arXiv:1605.07314, 2016.

Faster R-CNNを文字用に改良した手法。

RPNにGooogLenetでおなじみのIncecptionを組み込んで、文字の特徴を取りやすくしたもの。

Text Boxes

  • M. Liao, B. Shi, X. Bai, X. Wang, and W. Liu, “Textboxes: A fast text detector with a single deep neural network.” in AAAI, pp. 4161–4167, 2017.

SSDを文字検出用にしたもの。

構造は、Figure.1

R2CNN

https://arxiv.org/abs/1706.09579

FasterR-CNNは縦横方向の矩形しかできなかったけど、これは最後の出力で斜め方向にするためのパラメータを作っている。

Rotation RPN

https://arxiv.org/pdf/1703.01086.pdf

これは検出矩形にシンプルに回転の角度のパラメータを加えて、いろんな方向の文字検出に対応させたもの。この時、RoI-Poolingも回転した領域を抜き出すようにしている。

Other

  • Y. Nagaoka, T. Miyazaki, Y. Sugaya and S. Omachi, "Text Detection by Faster R-CNN with Multiple Region Proposal Networks," 2017 14th IAPR International Conference on Document Analysis and Recognition (ICDAR), Kyoto, 2017, pp. 15-20. doi: 10.1109/ICDAR.2017.343

ところで文字認識はどうなったん?

Jaderbergらの手法

https://www.robots.ox.ac.uk/~vgg/publications/2016/Jaderberg16/jaderberg16.pdf

検出でもあったJaderbergさんらの手法では、最後の認識部分でCNNを使って、9000種類の文字を認識する9000クラス分類に落とし込んでいる。そのためにSyntheticデータ(合成データ)を使って学習した。

CRNN

https://arxiv.org/abs/1507.05717

現在の文字認識のCNN手法はこれをベースにしていることが多いくらい。
Conv層での出力を BD-LSTMに入れて横方向の繋がりをNeuralNetworkに学習させる。CTCという方法を使って、出力の連続した文字などを上手く除外し、単語を出力する。これは固定された文字数がなく、様々な文字数を出力できる。

最近はこれを検出のモデルに組み込んで、text spottingを行う手法がおおい。

話を戻して文字検出の最近はどうなったん?

Anchorベースの手法ははAnchorの大きさに依存する傾向があったり、文字の長さによって、有利不利が生まれることが問題視されることもあった。

なので、Anchorを使わず直接的に矩形を作るnon-Anchorベースが流行った。

例)

Deep Direct Regression

  • W. He, X.-Y. Zhang, F. Yin, and C.-L. Liu, “Deep direct regression for multi-oriented scene text detection,” arXiv preprint arXiv:1703.08289, 2017.)

これDirectに回帰という名前だが、要はnon-anchorベースな手法であることを強調した論文。

Figure.1にanchorベースの欠点と、non-anchorベースの違いを書いてあることと、 ReceptiveFieldについても言及されてあり、結構読むと他の論文で軽く説明されているCNNによる文字検出の問題点などが分かりやすい論文。
Faster R-CNNなどAnchorベースの論文とこれを見ると、割と最近のトレンドが掴めるのでオヌヌメ。

モジュールはFigure.3にある通り、いたってシンプル。
文字領域のセグメンテーションのConfidence Mapと、他方向の検出矩形を作りだすRegressionの出力の2出力。

検出結果もかなり良さげ。

EAST

これもnon-anchorベースな手法。

この論文では、他の手法のパイプラインの流れをFigure.2にまとめてあり、とてもトレンドが分かりやすい論文。その中でもEAST手法は、簡単なパイプラインと主張している。

全体のモジュールはFigure.3。
これもEncoder-Decoderのようなモジュールを組み、出力としては、(1)文字領域のセグメンテーション、(2)ピクセル位置から左右上下の辺までの距離と角度を出力するRBOX Geometry、(3)角矩形の8点座標(4点x 2(x,y))のRegressionのQUAD geometryとなる。

EASTはBounding-boxの左右上下の辺までの距離と矩形の水平からの角度を出力することで検出を作成している。

結果もすごい

FOTS

https://arxiv.org/abs/1801.01671

文字検出と認識を行うText Spottingの研究。

構造は至ってシンプル、Faster R-CNN構造に認識のための Text Recognition Branchを加えたもの。ここらへんから、認識の学習を行うことで、文字同士の関係性や文字の特徴をCNNに学習させることができ、検出の精度も上がるという主張が目立つようになる。

結果は、すごい。というか、Text Spottinでこれだけできるのはかなりやばい。

最新の方法を軽く紹介

最近の文字検出の動向は、主にこれくらいだと思う
1. いろんな言語への対応
アルファベットはけっこうやり尽くされたから
2. 長い文字列への対応
いわゆるCNNのReceptiveFieldの問題を解決して、極端に長い文字列も検出可能にする
3. 任意の形の文字列への対応
 文字列の途中が急に曲がったりしても、その文字列の方向の通りに検出を行う

Look More Than Once: An Accurate Detector for Text of Arbitrary Shapes

https://arxiv.org/abs/1904.06535

3文で要約

  • 文字検出手法、LOMO(LOok More than Once)を提案。
  • LOMOはすごく長い文字列、カーブした文字列に強い。
  • 4つのモジュールで構成されたパイプライン処理だが、End-to-Endに学習可能。

内容

この論文ではReceptive Fieldでの問題を指摘している。Figure.1がそれで、長い文字列はReceptive Fieldの外に情報があるので((a))、それを解決するCNNのモジュールを提案している。

全体のモジュールはFigure.2。
1. まずはResNet50とFPN(Feature Pyramid Network)を組み合わせた特徴抽出部分が最初にくる。
2. 次にDirect RegressorでEASTと同じ方法で文字を囲むBoundingBoxを出力する
3. 2だけだときれいに検出ができていないので、何回も精製(refine)する
4. 文字の方向に検出矩形を任意に変更する

IRMのモジュールはFigure.3
RoI Transform層というのを使って検出部分のFeatureMapを取り出し、Conv層に入れる。
そして、左上、左下、右上、右下の4つを活性化させるCornerAttentionMapを作り、それぞれ、ドット積をとる。(自然言語処理のAttentionと同じ仕組み)
これで、4点それぞれの出力をとる構造。

これを何回も(iterative)行うことで、 bounding-boxを綺麗に整えていく。

SEMのモジュールはFigue.4

まずRoI Transform層で矩形位置の特徴マップを抽出してConv層に通す。その後、Text Region(文字全体のセグメンテーション)、Text Center Line(文字列の中心のセグメンテーション)、Border Offsets(4チャネルあって、詳しくは書かれていないが、境界(Border)のActivationを表す。多分、左右上下の辺を表す?)
を出す。

この3つからポリゴン状の検出を作成する。(論文ではText Polygon Generationと呼んでいる)

  1. まずはText Center Lineからn点を等間隔にサンプリングする
  2. サンプリング点に沿って、Border Offsetsかあら境界の点を取る
  3. それらを時計回りに繋げることで、検出にする

さくっと書かれているが、かなりめんどそうな実装になっていそう。(多分これでもシンプルな解法だとは思う)

結果

いろんなデータセットで実験した結果がFigure.5。

おそろしいほどできている、、おそるべし、、

正直こんなことできるのかレベルでやばい

定量評価は、Table.4-7まで。ICDAR関係の評価をみてもかなりすごい!!

ICDAR2017-RCTW ICDAR2015 ICDAR2017-MLT

もう疲れたので、これくらいで、、、

AdventCalender3日目は、、

画像に関する論文らしいです! よろしくお願いします!!

3日目リンク: https://gangango.com/2019/05/19/post-458/
カレンダー全体:Deep Learning論文紹介 Advent Calendar 2019

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away