自動化無しに生活無し

WEB開発関係を中心に備忘録をまとめています

【箇条書き】CNNモデルの特徴まとめ

  • 作成日時:
  • 最終更新日時:
  • Categories: others
  • Tags: AI開発 pytorch keras
thumbnail

簡単にCNNモデルの特徴を確認できるよう、3行〜6行ほどでまとめる。

VGG

  • VGG16は3x3畳み込みを13層、全結合層を3層重ねたシンプル構造
  • 畳み込み後の全結合層の計算コストが非常に高い(パラメーター1億3千万)
  • pytorchではオリジナルのVGGにはないバッチ正規化(Batch Normalization)が使用されている。(※勾配消失・爆発対策)

GoogLeNet

  • 1x1 3x3 5x5 の異なる畳込みを並列で行う(後にチャンネル方向に結合) Inceptionモジュールを採用
  • VGGと違い、巨大な全結合ではなく、GlobalAveragePooling (GAP)をしてから全結合
  • 結果、計算コストを大幅減(パラメーター700万)
  • 補助分類器(Auxiliary Classifier) を採用。中間層で予測を行い、その誤差を逆伝播させて勾配消失の抑止。

ResNet

  • 1x1 3x3 1x1 でチャンネル削減→畳み込み→チャンネル戻す。ボトルネック構造を採用
  • 残差接続(Residual Connection、スキップ接続、ショートカット接続とも言う)を利用し、入力値に残差(この層の出力)を加算して次の層へ引き渡す
  • チャンネル数が異なると足し算はできないため、事前に1x1畳み込みでチャンネル数を揃える
  • 活性化関数は未だReLUを使用
  • ResNet付近のモデルから、100層を超える構造になる

MobileNet

  • Depthwise で 各チャンネルを独立して空間方向のみ畳み込みできる
  • Pointwise で α値に基づき1x1畳み込みで、チャンネル数の調整をしている。
  • V2 ではインバーテッド残差構造を採用。1x1 3x3 1x1 で チャンネル増 → 空間方向のみ畳み込み → チャンネル戻 → 情報ロス防止のため線形出力。リニアボトルネック構造とも言う。
  • V3 では チャンネルを戻す前にチャンネル重要度を取り決めるSE層を導入。必要なチャンネルだけ残す。
  • 活性化関数として V1はReLU6、V3ではh-swish を使用。

DenseNet

  • DenseBlock(Dense Connection)により、入力値を結合によってロスなく引き継ぐことができる
  • growth_rate (k) を使ってDenseBlockで増やすチャンネル数を調整する
  • Transition Layer により、増えすぎたチャンネルを削減する
  • 特徴量を多く残せるが、層が増えるたびにメモリ消費大。
  • 活性化関数にはReLUを使用

EfficientNet

  • Compound Scalling の採用。スケーリング係数(φ)を使い、解像度、幅、深さを B0~B7まで用意してスケール
  • V1ではMobileNetV3とほぼ同じリニアボトルネック構造(インバーテッド残差構造)を採用。SE層も含む
  • V2からMBConvとFusedMBConvの2つを採用
  • MBConvはpointwiseとdepthwiseで重要とされる特徴を抽出
  • FusedMBConv は通常の3x3畳み込みで重要な特徴の計算
  • V1〜V2まで活性化関数はswish(SiLU)を使用。
スポンサーリンク