参考:
- d2l
- 今日の学習 - 畳み込みニューラル ネットワーク (CNN)
https://blog.csdn.net/m0_61165991/article/details/124176077
- 画像エンジニアリング (第 1 巻) - 画像処理
- フーリエ変換
https://blog.csdn.net/qq_43369406/article/details/131350139
- CNN 畳み込みニューラル ネットワークの基礎
https://blog.csdn.net/qq_43369406/article/details/127134277
x.1 事前に保存された知識 (オプションでスキップ可能)
x.1.1 信号処理
x.1.2 デジタル画像処理
リファレンス画像エンジニアリング (第 1 巻) - 画像処理
x.1.2.1 空間/時間ドメイン
x.1.2.2 フーリエ変換
フーリエ変換を参照 https://blog.csdn.net/qq_43369406/article/details/131350139
x.1.2.3 周波数ドメイン
x.2 フィルター/カーネルの例、2 次元畳み込み
フィルター/カーネル コンボリューション カーネルの概念の起源は、信号処理とデジタル画像処理テクノロジです。コンボリューションは、空気領域のテンプレート コンボリューションに似ています。ここでは、エッジ検出の小さな例を示します。
上記の操作は、私たちがよく 2-D 畳み込み操作と呼ぶものです。「畳み込みとは」を参照してください。https://blog.csdn.net/qq_43369406/article/details/131351280
x.3 完全に接続された層から畳み込みまで
x.3.1 CNN と画像のプロパティ
線形モデル、MLP などの非線形モデルを学習しました。MLP は表形式データの処理に適しています。行はサンプルに対応し、列は特徴に対応します。表形式データの場合、MLP を使用して特徴間の相互作用の共通パターン (PR) を見つけます。複数のピクチャを複数の 1 次元ベクトルに平坦化し、MLP トレーニングに渡すこともできますが、これでは、最初の行の最初のピクセルや 2 番目の行の最初のピクセルなど、各ピクチャの空間構造情報が無視されます。隣接していますが、1 次元ベクトルに平坦化した後は、この関係の層が失われる傾向があります。
隣接するピクセル間の相関関係に関する事前の知識をより有効に活用するために、畳み込みニューラル ネットワーク (CNN、畳み込みニューラル ネットワーク) が誕生しました。CNN には次の利点があります。
- CNN に必要なパラメーターはフル コネクト ニューラル ネットワーク (FCNN) よりも少なくなります。
- 畳み込みは GPU で簡単に並列化できます
- CNN フィット画像
畳み込みニューラル ネットワークの提案には、翻訳不変性、翻訳不変性、局所性の2 つの仮定が必要です。これらのプロパティは、以下の図の特定の人物 Waldo の検索に反映されます。
- 変換不変性: 検出された物体が画像のどこに現れても、ニューラル ネットワークのフロント層は同じ画像領域に対して同様の応答を示す必要があります。
- 局所性: ニューラル ネットワークの最初の数層は、画像内の離れた領域間の関係にあまり注意を払わず、入力画像内の局所的な領域のみを探索する必要があります。
x.3.2 畳み込み演算
数学における畳み込みを参照し、反転せずに相互相関演算のみを考慮します。局所的な特性を考慮した後、元の画像のサイズより小さい畳み込みカーネルのみを選択します。つまり、2 デルタの範囲に限定されます。 ; 複数のチャネルの存在を考慮して、4 次元表現を導入します。1 番目と 2 番目の緯度は長さと幅、3 番目の緯度 (入力チャネルの数)、4 番目の次元 (出力チャネルの数) です。最終的に、次のようなコンボリューション計算式が得られます (厳密には、相互相関計算式にバイアス バイアスを加えたものです)。ここで、V はコンボリューション カーネル値、X は入力特徴行列値、H は出力です特徴行列の値、u はバイアスです。
コンボリューション カーネルのパラメータを変更して、スムージングやシャープ化などのさまざまな効果を実現できます。一方、CNN は、コンボリューション カーネルのパラメーターを学習可能に設定し、出力特徴行列とラベルを操作することで、コンボリューション カーネルのパラメーターが逆伝播されるため、CNN モデルは画像内で必要なものを見つけることができます。オブジェクトの結果。
x.3.3 受容野
CNN では、相互相関演算は畳み込み演算と呼ばれ、畳み込みカーネル テンソルの重みは要素と呼ばれます。
受容野受容野とは、特定の層の任意の要素 x について、その受容野は、前のすべての層からの順伝播 (FP 順伝播) 中にこの層の要素 x の計算に影響を与える可能性のあるすべての要素を指します。たとえば、上記の出力の 19 の受容野は、入力の 4 つの位置要素です。
x.4 kernel_size、ストライド、パディング
畳み込みニューラル ネットワークの場合、次の情報に注意する必要があります。
- Pytorch の特徴行列の順序は (Batch_size、Channel、Height、Width) であり、(B、C、H、W) と省略されます。3 次元 (B、C、S、H、W) の場合、S はスライスを表します。kernel_size は畳み込みカーネルのサイズ、kernel_size は畳み込みカーネルの数、H_out は出力特徴行列の高さ、H_in は入力特徴行列の高さです。ストライドは歩幅、パッドは詰め物です。
- ストライドとは各歩の距離です
- パディングは 0 で埋められ、デフォルトでは上下左右が埋められます。
- コンボリューション カーネル緯度は入力特徴行列の次元に等しい
- 出力特徴行列の次元は、畳み込みカーネルの数に等しい
- コンボリューション カーネル パラメーターの数を計算する式は次のとおりです
(kernel_size*kernel_size*C+1)*kernel_num
。kernel_size*kernel_size*C
は重みパラメータ、1 はバイアス パラメータです。コンボリューション カーネルは複数の次元を持つことができますが、バイアスは 1 つだけです。 - 出力特徴行列のサイズを計算する式は次のとおりです。
H_out = (H_in - kernel_size + padding)/stride + 1
- 密なネットの出力特徴行列のサイズを変更しない一般的に使用される畳み込みカーネル パラメーター: 3, 1, 1; 1, 1, 0; 対応する関係は kernel_size、stride、padding です。
以下のように、2次元の入力特徴行列であり、コンボリューションカーネルの数は1です。
x.5 プーリング集約/プーリング層
畳み込み集計はダウンサンプリングできますが、それらの違いは次のとおりです。
- 畳み込みはダウンサンプリング中に特徴を抽出できますが、実行速度は遅くなり、パラメーターを学習する必要があります
- ダウンサンプリング用のプーリングは特徴の次元削減のみを実行でき、動作速度が速く、パラメータを学習する必要がありません。
x.6 レネット
データ フロー データ フローは次のとおりです。
参照コードは次のとおりです。
https://github.com/yingmuzhi/deep_learning/tree/main/chapter7