GoogLeNet ネットワーク (2014 年に提案)
1. GoogLeNetネットワークの詳しい説明
1. GoogLeNet は2014 年にGoogle チームによって提案され、その年の ImageNet コンペティションの分類タスクで 1 位を獲得しました。
VGGは2014年にオックスフォード大学の著名な研究グループVGG(Visual Geometry Group)によって提案され、ImageNetコンペティションのLocalization Task(測位タスク)で1位、Classification Task(分類タスク)で2位を獲得しました( ILSVRC)その年。(VGGNet の詳細については、https://blog.csdn.net/seasonsyy/article/details/132676351 を参照してください)
元の論文: 畳み込みをさらに深くする
2. GoogLeNet ネットワークのハイライト
-
インセプション構造の導入(さまざまなスケールの機能情報の融合)により、より柔軟なネットワークの選択と構成が可能になります
理由: 効率的なネットワークでは、入力と出力間の接続が疎である必要があります。(ディープニューラルネットワークの応答には、0に近い応答値が多数存在するだけでなく、他の応答と相関性の高い冗長な値も多数存在します。これらの応答は貴重な情報をもたらしません)
原理:密な構造を使用して疎な畳み込みニューラル ネットワークを近似する
特徴: 複数の受容野からの入力画像を同一層内で異なるサイズのコンボリューションカーネルを用いて畳み込み、同時に1×1畳み込みにより入力画像のチャンネル数を大幅に圧縮し、ネットワークの冗長性を低減します。ネットワークパラメータの数を制御します。
利点:
- モデル全体のパフォーマンスをさらに向上させる
- 畳み込みニューラル ネットワーク モデルの構築をモジュール化する
- GoogLeNet モデルの深さを変更したい場合は、対応する Inception ユニットを追加または削減するだけで済みます。
AlexNet および VGGNet ネットワークの各層は直列構造 (一連の畳み込み層と最大プーリング ダウンサンプリング層が直列に接続された構造) ですが、 GoogLeNet のインセプション構造は並列構造を採用しています。
如图2
図 2注: 各ブランチによって取得される特徴行列の高さと幅は同じである必要があります。同じでなければ、深さ方向に沿ってスプライシングを実行できません。並列構造の開発の試み: 畳み込み分解、特徴マップ サイズの削減、そして最後に、開始時の最終構造である並列構造の選択。
-
1.畳み込み分解: n×n 畳み込みカーネルを n×1 または 1×n 畳み込みカーネルに分解して、ネットワーク パラメータの数をさらに削減し、ネットワークの動作効率を向上させます。(ネットワークの先頭でこの分解を使用することはうまく機能しませんが、中程度のサイズ (経験的データは 12 ~ 20) の特徴マップでより適切に機能します)
-
2.特徴マップのサイズを縮小します。
ふたつのやり方:
最初にプールしてから開始: 最初にプールすると機能が欠落します。
最初にインセプションを行ってからプーリングを行う: 最初にインセプション畳み込みを行ってからプーリングを行うには、大量の計算が必要になります。
特徴表現を維持し、同時に計算負荷を軽減するために、2 つの並列モジュールを使用して計算負荷を軽減します。
(a) ナイーブ インセプションの構造:前の層の出力から得られた特徴行列は、処理のために 4 つのブランチに同時に入力され、これら 4 つのブランチから得られた特徴行列が深さに応じて結合されて、出力特徴行列が得られます。
特徴:この構造の本質は、ネットワークの幅を広げることで、さまざまなスケールの特徴を抽出するネットワークの能力を強化することですが、これにより計算量が大幅に増加し、出力特徴マップチャネルの数が膨大になります。
例:
レイヤー名 入力 カーネルサイズ ストライド パディング 出力 パラメータ量 前のレイヤー 32×32×256 1×1コンバージョン 32×32×256 1×1×128 1 0 32×32×128 128×(1×1×256)=32768 3×3コンバージョン 32×32×256 3×3×192 1 1 32×32×192 192×(3×3×256)=442368 5×5コンバージョン 32×32×256 5×5×96 1 2 32×32×96 96×(5×5×256)=614400 3×3マックスプール 32×32×256 3×3 1 1 32×32×256 256×(3×3×256)=589824 合計 1679360 個のパラメータ 欠陥:
- すべての畳み込み層は前の層の入力データに接続されるため、畳み込み層での計算量は非常に多くなります。
- このユニットで使用される最大プーリング層は、入力データの特徴マップの深さを保持するため、最後にマージする場合、出力の特徴マップの深さの合計は増加するだけであり、このユニット以降のネットワーク構造の計算量が増加します。
改善: 以下に示すように、図 2 の (b) 部分の開始構造
インセプション構造:
(b) インセプション構造と次元削減の機能。画像 a よりも 3 つの 1×1 畳み込み層があり、次元削減に役割を果たします。
データ チャネルの圧縮と拡張に使用されるこの1×1 畳み込み層はボトルネック層 (BottleNeck Later)と呼ばれます。
機能: GoogLeNet は、チャネル数を圧縮することで、より少ない計算量でネットワーク構造を深くすることができ、VGGNet と比較して、複数のサイズの畳み込みカーネルによりネットワーク幅が増加し、画像特徴を抽出する能力が強化され、より優れたネットワーク パフォーマンスを実現します。
例:
入力 レイヤー名 カーネルサイズ ストライド パディング 出力 パラメータ量 前のレイヤー 32×32×256 32×32×256 ①1×1Conv 1×1×128 1 0 32×32×128 128×(1×1×256)=32768 32×32×256 ②1×1Conv 1×1×64 1 0 32×32×64 64×(1×1×256)=16384 32×32×64 ②3×3Conv 3×3×192 1 1 32×32×192 192×(3×3×64)= 110592 32×32×256 ③1×1Conv 1×1×64 1 0 32×32×64 64×(1×1×256)= 16384 32×32×64 ③5×5Conv 5×5×96 1 2 32×32×96 96×(5×5×64)=153600 32×32×256 ④3×3MaxPool 3×3 1 1 32×32×256 256×(3×3×256)=589824 32×32×256 ④1×1Conv 1×1×64 1 0 32×32×64 64×(1×1×256)=16384 合計 935936 個のパラメーター 32×32×128、32×32×192、32×32×96の出力結果は、以前のNaive Inceptiondユニットと同じですが、実際には、この3つの部分は1×の追加によるものです。 1 畳み込み層。
Inceptiond の総畳み込みパラメータ 935936<Naive Inceptiond の総畳み込みパラメータ 1679360、
さらに、最大プーリング層の前に 1×1 畳み込み層も追加されるため、最終的な出力特徴マップの深さも減ります。
畳み込みはデータ特徴抽出に使用され、最も一般的に使用される畳み込みスライディング ウィンドウの高さと幅は、通常 3×3 または 5×5 です。
1×1 コンボリューション カーネルの役割:
-
これは主に、機能マップ チャネルの集約または分岐を完了するために使用されます。
- 特徴マップ チャネルの集約: 出力特徴マップの深さは入力特徴マップの深さよりも小さい
- 特徴マップ チャネルの発散: 出力特徴マップの深さが入力特徴マップの深さよりも大きい
-
出力特徴行列の深さを減らすことで、畳み込みパラメータを減らし、計算量を削減します。
-
特徴マップの最終出力の深さは、1×1 畳み込み層を通じて制御され、関連する層の畳み込みパラメータの数に間接的に影響します。
私の発見: 次元削減に 1×1 コンボリューション カーネルを使用する場合、1×1 コンボリューションによって完了する演算は特徴マップの集約でなければならず、その後、次のコンボリューション層が実行されてパラメータ数の削減効果が得られます。 . .
-
証明する:
如图3
画像3CNN の各畳み込み層のパラメーターの量:
畳み込みニューラルネットワークでパラメータ量を計算するにはどうすればよいですか?参考リンク:https://zhuanlan.zhihu.com/p/366184485?utm_id=0
-
次元削減とマッピング処理に 1×1 コンボリューション カーネルを使用する
-
トレーニングを支援するために2 つの補助分類子(Auxiliary Classifier) を追加します (2 つの補助分類子は同じ構造を持っています)
- (深いモデルでの勾配消失の問題を回避するために、2 つの追加の補助 Softmax 活性化関数が順方向伝導勾配に使用されます)
2 つの補助分類子はトレーニング中にのみ使用され、実際の推論中に削除されます。
補助分類子:
如图4
図4元の論文の補助分類器の説明:
最初の分類器、Inception(4a) からの出力、inception(4a) の出力特徴行列は 14×14×512 です。
2 番目の分類器、Inception(4d) からの出力、inception(4d) の出力特徴行列は 14×14×528 です。
レイヤー名 入力 カーネルサイズ ストライド パディング 出力 平均プール 14×14×512 5×5 3 0 4×4×512 変換(ReLU) 4×4×512 1×1×128 1 0 4×4×128 平らにする 4×4×128 2048年 ドロップアウト層 70% のノードがランダムに非アクティブ化され、過剰適合が軽減されます。 (実験では 50% の方が優れています) FC(ReLU) 2048年 1024 2 つの FC の間にはドロップアウト層があります 70% のノードがランダムに非アクティブ化され、過剰適合が軽減されます。 (実験では 50% の方が優れています) FC 1024 1000 ソフトマックス 1000 AlexNet と VGG の両方に出力層が 1 つだけあります
GoogLeNet には 3 つの出力層があります (そのうち 2 つは補助分類層)
-
完全に接続された層を破棄し、平均的なプーリング層を使用します (モデル パラメーターを大幅に削減します)。
NIN (Network in Network) からインスピレーションを得た GoogLeNet は、完全に接続された層の代わりに平均プーリングを使用し、計算量をさらに削減することができます。同時に、そのような操作によりネットワーク タスクのパフォーマンスも向上することが実験で証明されています。
-
GoogLeNet はランダムな非アクティブ化を使用してネットワークの一般化能力を強化します
2. GoogLeNet ネットワーク構造
GoogleNet ネットワーク構造如图0
を示す
GoogLeNet ネットワーク モデルの深さは 22 層に達しました
図0
各層のパラメータを如表1
以下に示します。
入力画像サイズは224×224×3です
表内の一部のパラメーターは、Inception 構造の構成パラメーターです。如图7
図7
対応する開始構造図如图8
図8
LocalRespNorm 層: AlexNet に登場. この機能は大きな役割を果たさないため、この層は後続の構築プロセス中に破棄できます。
畳み込み: 深さ = 2、図 0 の下部のボックスに示すように、2 つの畳み込み層があります。
コードの実行結果
コードリファレンス:
Bステーションブロガー@霹雳巴拉Wz: https://www.bilibili.com/video/BV1r7411T7M5/?spm_id_from=333.999.0.0&vd_source=647760d93691c99109dee33aad004b62
github:https://gitcode.net/mirrors/wzmiaomiao/deep-learning-for-image-processing?utm_source=csdn_github_accelerator
コードの場所: \deep-learning-for-image-processing-master\pytorch_classification\Test4_googlenet
コード使用データ セット: 花分類データ セット
トレーニング精度 81.3%
予測精度: 100%
参考文献
- 『ディープラーニングとニューラルネットワーク』 趙夢光編
出版社: Electronic Industry Press、初版 2023 年 1 月
ISBN: 978-7-121-44429-6
- 「深層畳み込みニューラル ネットワークの原理と実践」Zhou Pucheng、Li Congli、Wang Yong、Wei Zhe 編集
出版社: 北京: 電子産業プレス、2020.10
ISBN: 978-7-121-39663-2
- Bステーションブロガー@霹雳巴拉Wz: https://www.bilibili.com/video/BV1z7411T7ie/?spm_id_from=333.999.0.0&vd_source=647760d93691c99109dee33aad004b62