[李紅儀] 深層学習 - CNN (画像認識を例に)

CNN

私の他のブログ:深層学習 - リカレント ニューラル ネットワーク[Ng Enda] では、CNN と CNN の前身について説明しています。詳細については、計算やバックプロパゲーションについては、理論と計算を参照することができます。

1. 具体的な質問をする

画像分類の場合、分類用のモデルに画像を入力する場合、画像はどのように見えるべきですか?
コンピュータにとって、画像は実際には 3 次元のテンソルです (2 次元の行列以上のもの)。3 つの次元は (高さ、幅、このうち、channel はチャンネルを表し、ピクチャの場合は R、G、B チャンネルを指します。各チャネルの各ポイントは実際にはピクセル値です。
ここに画像の説明を挿入します
誰もが知っているように、 ニューラル ネットワークへの入力は実際にはベクトルです 。ニューラルネットワークでは計算のためにベクトルに変換する必要があるのですが、どうやってベクトルに変換するのでしょうか? 3 次元表現が得られました。3 次元を平坦化すると、上の図 (100 , 100) のような 1 次元の入力ベクトルが得られます。 , 3)、平坦化後は 3x100x100 の入力ベクトルになります。各次元ベクトルの値は、実際には特定の色の強度を表します。
ここに画像の説明を挿入します
前の Fully Connected Network (完全に接続されたネットワーク) を使用する場合、100x100x3 の入力、1000 個のニューロンがある場合、各ニューロンはすべての入力に重みを与えます。値、 の場合、この重みは 100x100x3x1000=3x10^7 の重みになります。 (この値は非常に大きい)
したがって、画像認識には他のニューラル ネットワークの使用を検討する必要があります。

2. 問題を解決してみます

それほど多くの重みを持ちたくない場合は、各ニューロンが画像全体の特性を入力すべきではないのではないかと考えなければなりません。

特定の機能に対して 2 つの最適化が提案されています

最初の特徴:
たとえば、下の図では、画像が鳥かどうかを識別したい場合、観察する限り、くちばしや爪などの主要な特徴により、これが鳥であることが識別できますので、各ニューロン画像全体を入力として受け取るのではなく、画像の局所的な特徴のみを認識することができます。
ここに画像の説明を挿入します

最初の特徴については、入力は次のように処理できます。
各ニューロンはローカル特徴のみを考慮するため、各ニューロンは入力として、画像のピクセルの特定の部分 (ここでは Receptive field と呼びます) のみを入力として取得できます。たとえば、下の図では、青色のニューロンの場合、 、左上隅のピクセルのみを取得します3x3x3 が入力として使用されます。平坦化後の結果は、3x3x3=27 次元ベクトル
ここに画像の説明を挿入します
になります。 > 同様に、各これは各ニューロンに対して実行できます。異なるニューロンの入力ピクセルは重複することができます。同様に、異なるニューロンが同じ受容野で演算を実行できます。
ここに画像の説明を挿入します

受容フィールドのサイズは自分で設定でき、各受容フィールドは 1 つのチャネルのみを考慮できますが、最も一般的な設定は次のとおりです。
受容フィールドの考慮事項 (パディング)範囲外も考慮する必要があります (観察されるいくつかの特性が 2 つの受容野の間にある可能性があるため) 、 重複があります 、異なる受容野の間には 複数のニューロン (64) があります。 は (3x3)、各受容野にはすべてのチャネルkernel size

2 番目の特徴:
同じ特徴が写真内の異なる場所に表示される場合があります。たとえば、下の写真では、くちばしが表示されます。異なる場所、つまり異なる受容野です。上で述べたように、受容野は全体像をカバーする必要があります。各受容野には検出する複数のニューロンがあるため、くちばしがどこにあっても、特定の範囲内にある場合は間違いなく検出されます。受容野、ニューロンのグループの特定のニューロンがそれを検出します
ここに画像の説明を挿入します
ただし、くちばしを検出する各ニューロンは同じですが、範囲が異なります。同じです。ニューロンがある場合、同じです。各範囲でくちばしを検出するには、パラメータが多すぎます

2 番目の機能では、重みは次のように処理できます:
共有パラメータ。異なる受容野のニューロンにパラメータを共有させることができます (つまり、同じパラメータです)。異なる受容野ニューロンの入力は異なるため、重みが同じであっても、出力は異なります
ここに画像の説明を挿入します

パラメータを共有する方法は自分で決めることができますが、一般的な処理方法は次のとおりです。
各受容野には複数のニューロンがあり、64 個と仮定できます。< a i=2>各ニューロンには独自のパラメータ セットがあります フィルタ (入力とパラメータが同じであるため、受容野内の異なるニューロンのパラメータは異なる必要があります。出力は同じであり、2 つのニューロン間に違いはありません)、異なる受容野間で共有され、 最初の受容野 1 つ 特定の計算では、各フィルターは画像全体をスキャンすることができます。つまり畳み込み演算です。 共有パラメータなど。 (下の図の同じ色のニューロンは共有パラメーターを表します)の最初の受容野最初の2 番目の受容野最初の パラメータを共有します。最初の2 番目の受容野filter1filter1filter2filter2
ここに画像の説明を挿入します

3. 問題を要約、最適化、解決する

上記の 2 つの最適化は、各ニューロンの受容野を考慮して入力パラメータを削減するものです。異なる受容野は同じパラメータを共有し、共有はフィルタを通じて実現されます。
これら 2 つの最適化最適化の概要は次のとおりです: Convolutional Layer
畳み込み層を使用するネットワークは Convolutional Neural Network(CNN)
ここに画像の説明を挿入します
追加:
畳み込み層は実際には計算 Convolution です。画像の畳み込み演算については、CSDN の多くの詳しく説明されたブログを参照してください。ここでは詳しく説明しません。
フィルターの数と同じ数のチャンネルがあり、各フィルターの高さは入力チャンネルと一致している必要があります (たとえば、チャンネルは 3 です) 、フィルター つまり 3)、各チャンネルのサイズはフィルターと画像に関係します

Q: フィルタ サイズが常に 3x3 の場合、広範囲のパターンは検出されなくなりますか?
A: いいえ、最初の層のフィルターが 3x3 のパターンを検出し、その結果が 2 番目の畳み込み層に入力されるためです。フィルターは 3x3 のままです。ただし、 は前の結果を入力として受け取り、検出範囲は実際には 5x5 の領域になります (図のように)以下)、2 番目の画像の -1 は、1 番目の画像の左上隅にあるフィルターによって計算された値から取得され、2 番目の画像の -2 は、最初の画像の右下隅にあるフィルターによって計算された値から取得されます。最初の画像であるため、2 番目のフィルタが検出するのは 5x5 の元の画像入力パターンです) など。ネットワークが十分に深い限り、たとえフィルタが常に 3x3 であっても、十分な大きさのパターンが検出されます
ここに画像の説明を挿入します

4. 一般的に使用される 3 番目の最適化

プーリング

まだ画像を観察しています。画像が鳥の場合、サブサンプリングを行ってもまだ鳥のように見えます。
ここに画像の説明を挿入します
プーリング操作で学習するパラメータはありませんこれは、ネットワークの活性化関数に非常によく似ています。
最大プーリングの計算:
フィルターの後、いくつかの数値が生成されます。プーリングを実行すると、結果がフィルタによって生成された値はグループ化されます。たとえば、各 2x2 数値はグループです。最大プーリングは、このグループの結果として各グループの最大値を選択します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
したがって プーリングは画像を小さくする (入力は小さくなりますが、チャネル数は変わりません)、通常、畳み込みの後にプーリングが続き、畳み込みの後にプーリングが続きます。最終結果を取得するために、 Flatten の操作 (多次元行列を 1 次元にプルする) を実行し、次に使用します。最終結果を出力するための完全な接続とソフトマックス。
ここに画像の説明を挿入します

CNN のその他のアプリケーション

CNNは言語やテキストの処理にも利用できますが、テキストや言語は画像とは異なるものであることを考慮する必要があり、処理のための受容野をどのように設計するかを考える必要があります。音声やテキストの特性を踏まえてパラメータをどのように共有するかを検討する必要があります。

CNNのデメリット

CNN は、同じ拡大または回転した画像を処理することはできません。たとえば、CNN は画像が犬であることを認識できますが、画像が拡大、縮小、回転されるとそれを認識できません。処理前と処理後画像は平坦化され、ベクトル値が異なるため、計算結果も異なります。
したがって、画像を処理する際には、画像自体を処理してその増幅を行うデータ拡張方法があります。縮小すると、特定の部分もネットワークをトレーニングするための入力として使用されます。

おすすめ

転載: blog.csdn.net/m0_51474171/article/details/127783826