ニューラルネットワークの仕組みは理解していますが、実際の文字認識などの画像処理に使用したい場合、ニューラルネットに画像データを入力する方法がわかりません。
A
文字の非常に大きな画像があります。多分私は画像からいくつかの情報/仕様を取得してから、その仕様の値のベクトルを使用する必要がありますか?そして、それらはニューラルネットの入力になりますか?
誰がすでにそのようなことをしたのですか、これを行う方法を説明できますか?
最も簡単な解決策は、トレーニングとテストの両方ですべての画像を同じ解像度に正規化することです。また、各画像の文字はほぼ同じサイズにする必要があります。グレースケール画像を使用することもお勧めです。そのため、各ピクセルは1つの数値しか与えません。次に、各ピクセル値をネットワークへの1つの入力として使用できます。たとえば、サイズが16x16ピクセルの画像がある場合、ネットワークには16 * 16 = 256の入力ニューロンがあります。最初のニューロンはピクセルの値を(0,0)に、2番目のニューロンは(0,1)にというように続きます。基本的に、画像の値を1つのベクトルに入れ、このベクトルをネットワークに送ります。これはすでに動作するはずです。
最初に画像から特徴(エッジなど)を抽出し、次にそれらの特徴にネットワークを使用することで、学習の速度を上げ、検出をより堅牢にすることができます。その場合に行うことは、事前の知識を組み込むことです。文字認識については、特定の関連機能を知っています。したがって、前処理ステップとしてそれらを抽出することにより、ネットワークはこれらの機能を学習する必要がありません。ただし、間違った、つまり関連性のない機能を提供すると、ネットワークはイメージを学習できなくなります->文字マッピング。
解決しようとしている問題の名前は「 特徴抽出 」です。それは明らかに自明ではなく、活発な研究の主題です。
これを行う単純な方法は、画像の各ピクセルを対応する入力ニューロンにマップすることです。明らかに、これはすべて同じサイズの画像でのみ機能し、一般に効果が限られています。
これ以外にも、できることがたくさんあります...いくつかの人気のある例を挙げると、Gaborフィルター、Haarのような機能、PCAとICA、スパース機能などがあります。私のアドバイスは、ニューラルネットワークとパターン認識、または特に光学式文字認識に関する教科書を入手することです。
画像へのNNの適用に関するこれらすべての考慮事項については、 2002のレビューペーパー (機能ベース、ピクセルベース、スケール不変性など)で説明しています。
あなたの最大の挑戦は、いわゆる「次元の呪い」です。
私はNNのパフォーマンスをサポートベクターマシンのパフォーマンスと比較します(どのカーネルを使用するかが難しい)。
入力として実際のピクセルを使用できます。これが、入力画像の解像度を小さくする方が好ましい場合がある理由です。
ANNの良い点は、それらが何らかの方法で機能を選択できることです(これらの入力ノードにゼロに近い重みを割り当てることで重要でないピクセルを無視します)。
ここにいくつかのステップがあります:カラー/グレースケール画像がバイナリ画像であることを確認してください。これを行うには、いくつかのしきい値操作を実行します。その後、ある種の特徴抽出を行います。 Ruby: https://github.com/gbuesing/neural-net-Ruby/blob/master/examples/mnist .rb