TensorFlow による、SVHN & ナンバープレート認識
CNN & Street View House Numbers (SVHN)
自動車のナンバープレートの認識を試してみますが、先に、やはり multi-digit の認識問題である SVHN を片付けておきます。TensorFlow のチュートリアル : 畳み込み ニューラルネットワーク では CIFAR-10 を扱っていましたが、最後に次のような課題がありました :
課題 : Street View House Numbers (SVHN) データセットをダウンロードしてください。CIFAR-10 チュートリアルを fork して入力データとして SVHN と交換しましょう。予測性能を改善するためにネットワークアーキテクチャを適合させてください。
SVHN Format 2 の Cropped Digits データセットを使用すれば CIFAR-10 用の実装をそのまま流用できますが、ここでの目的は単なる動作確認ですので単純なモデルを使いました。使用したモデルを簡単に書けば以下のような感じです(右図は tensorboard graph) :

6 epochs 程度で validation error 4 % を切りますが、3 % を切るには 61 epochs 必要でした。
以下で左図が xentropy、右図が validation error のグラフです。
![]() | ![]() |
TensorFlow によるナンバープレート認識
そして TensorFlow による自動車のナンバープレートの認識を試してみました。
目標は、ナンバープレートが写りこんだ自動車の静止画像からナンバープレートの位置を特定し、その(複数の英数字からなる)ナンバーを認識することです。
以下のペーパーを参考にしました :
Ian J. Goodfellow, Yaroslav Bulatov, Julian Ibarz, Sacha Arnoud, Vinay Shet
Google Inc., Mountain View, CA
モデルはこんな感じです :
【評価例】
現在の実装はまだ改良の余地があるのですが、以下は比較的上手くいった評価例です。
左の自動車静止画像に対して、ナンバープレートの位置を特定してそのナンバーを認識して表示します。掲載している画像は歪めてありますが、元の画像は十分に大きいカラー画像です。右画像はナンバープレートの部分だけを trim して一部ぼかしを入れたものです。
(1) | 1-a.![]() | 1-b.![]() | |
(2) | 2-a.![]() | 2-b.![]() | |
(1) ではナンバープレートの位置は正しく認識しています。
ナンバーも 6 を 8、L を C に誤認識していますが、概ね合っています。
(2) の場合は位置はほぼ認識していて英数字も半分ほど合っていますが、ナンバーの桁数をそもそも誤認識していているようです。
以上