Coursera Machine Learning - Week11 Application Example Photo OCR
CourseraのMachine Learningについてまとめています。 前回はWeek10 Large Scale Machine Learningについてまとめました。
今回は、Week11 Application Example: Photo OCRについて学びます。
Application Example: Photo OCR
Week11で、本Machine Learningのコースは終わりです。最後は、機械学習の応用例として、Photo OCR(Photo Optical Character Recognition / 画像中の文字認識)について学びます。
Photo OCRでは、下記のように、画像中のどこに文字があるかを検出し、そのテキストを読み取ります。
Photo OCRでは、下記のように文字認識を行います。まず、画像中から文字列を検出し、その検出した文字列を文字ごとに分割、最後にその文字を認識します。
Sliding windows
Photo OCRでは、まず文字列の検出を行いますが、その文字列の大きさや形状は画像によって様々です。そのような中で文字列を検出するために、Sliding windowsを用います。 Sliding windowsでは、画像の一部分を特定のサイズ(82×36等)で切り出し、その画像に文字が含まれているかどうかをチェックし、その切り出す箇所を4ピクセル、8ピクセル等の特定のステップサイズで動かしていき、画像全体をスキャンします。また、特定のサイズの切り出しだと、それより大きな文字を見逃してしまう可能性があるため、より大きなサイズで切り出し、決めておいたサイズ(82×36等)に縮小して文字が含まれているかどうかをチェックします。これを行うことで、最終的に、画像中のどこに文字列が含めれているかを検出することができます。
文字列検出の後は、文字分割です。ここでもSliding windowsを用いて、下記図のように文字が分割できるかどうかを分類します。
Getting lots of data
Photo OCRを行うにも、大量のデータが必要になります。データを集める方法としては、Week6の後半で紹介したような、人工的にデータを増量する方法や、人手でデータを集めてラベル付けする方法、人手で行うにしても、Amazon Mechanical Turk等のクラウドソーシングを利用する方法等があります。これらの方法を比較し、コスト的に見合う方法を選択します。
また、データを増やすことに労力を使う前に、Learning Curves等を確認し、モデルがLow Biasであり、データを増やすことに効果があることを確認しておくことが重要です。
Ceiling analysis
今回のPhoto OCRでは、文字列検出、文字分割、文字認識の3つの機械学習のモデルを開発しますが、最終的な精度を上げるために、どの機能を改善すべきなのか。開発に使えるリソースは限られているため、どこに注力するかを見極めるのが重要になります。そこで使えるのがCeiling analysisです。
Ceiling analysisでは、下記画像のように、各コンポーネントをプロセスに沿って、精度100%に模擬的に置き換えて行き、どのくらいシステム全体の精度が改善されるかを確認します。下記の例では、文字列検出の精度が100%になった場合、全体の精度が17%向上されるので、ここの改善に労力を使おうとなります。
また、各コンポーネントを模擬的に精度100%に置き換える方法ですが、各コンポーネントの出力を手動で正解のものに置き換えてしまいます。
プログラミング演習
Week11では、プログラミング演習はありません。(Week9でプログラミング演習は最後となります。)
以上で、Coursera Machine Learningのコースは終了です。11週のコースを通して、機械学習の基礎を学ぶことができました。Andrew Ng先生ありがとうございました。
コース全体の目次とそのまとめ記事へのリンクは、下記の記事にまとめていますので、参照ください。
Coursera Machine Learningまとめ本記事を読んでいただきありがとうございます。
機械学習を実際に使うにあたり、Coursera MLと合わせておすすめしたい書籍を紹介します。
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
scikit-learnを用いた機械学習を学ぶのに最適な本です。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
Deep Learningと言えばこれ。TensorFlowやPyTorch等のフレームワークを用いずに、基礎の理論からDeep Learningを実装します。Week4、Week5の記事を読んで、より深く理解したいと思った人におすすめです。
Kaggleで勝つデータ分析の技術
データ分析について学び始めた人におすすめです。