「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
(Convolutional Neural Network: CNN)
特徴 †
- 一般的な順伝播型ニューラルネットワークとは異なる。
- 1989年に単純な数字画像の認識のために開発されたLeNetが原型
- データの空間的構造を学習する画像分類において、圧倒的な性能を発揮した。
- 視覚神経系を模した畳み込み処理で画像から特徴抽出することで性能が出た。
- 大規模コーパスで、学習されたモデルの重みは公開されていて、
転移学習で新たなタスク向けに再学習し、新たなタスクのモデルを作成する。
できること †
- R-CNN
- Fast R-CNN
- Faster R-CNN
- FCOS
- YOLO
- SSD
- FCN (Fully Convolutional Network)
詳細 †
パート †
CNNは大きく分けて2つのパートに分けることができる。
- 識別パート
脳の神経系を模した全結合層と出力層(≒ DNN)
- 全結合層を繰り返すことで最終的な出力を得る
- 得られた特徴量を活性化関数、ソフトマックス関数を用いてアウトプット
畳み込み層 †
- 視神経系(視覚を司る神経系)を模して画像から特徴抽出する。
- 全結合層に入力する特徴を取り出すために自動化された前処理。
- 畳み込み処理
- 画像のフィルタ処理+活性化関数
- 特徴マップを生成(様々な特徴を取り出す)
- 細かい(局所的な)特徴の組み合わせから、
大まかな(大局的、複雑な)特徴を捉えられる。
- 手前の階層 → 波長の光に反応
- 奥の階層に進むにつれ → 線の向き、折れ線の角、直線の交差に反応
- 最奥の階層 → 特定の模様(≒ 特定のカテゴリ)に反応
- ただし、理論的な裏付けは無い。
生体の神経系を見よう見まねで模倣してみたら上手くいっただけで、
CNNが高性能を実現している理由は厳密には分かっていない。
- 1つのカーネル(フィルタ、ウィンドウ)につき1つの特徴マップが生成される。
- カーネルをn個、用意して、特徴マップをn個、生成する。
- 特定のパターンを検出する「カーネルの行列」と「画像中の一部領域」の内積を計算し
て得たスカラを「画像中の一部領域」の中心に置いて、元画像と同じサイズの特徴マップを作る。
- 「画像の一部領域」と「カーネルの行列」のサイズは同じにする。
- 位置を探し少しずつずらしながら(ストライド)内積を計算してスカラにする。
- RGB(複数チャンネル)の場合、チャンネル毎の「カーネルの行列」で得たスカラを足し1つの特徴マップを得る。
- ベクトルの内積と同じ様にパターンが似ている場合、スカラの値は大きくなる。
- 一部領域の中心部分と同じ位置に計算したスカラを置き、元画像と同じサイズの特徴マップを作る。
- パディングとストライド
- パディング(P):入力データの周りを一定の値で埋める操作
- ストライド(S):畳み込み操作において、ウィンドウを移動させるピクセル数
- 式
入力サイズ(H, W)、フィルタ・サイズ(FH, FW)、出力サイズ(OH, OW)
- OH = 1 + (H + 2P - FH) / S
- OW = 1 + (W + 2P - FW) / S
- 4×4のサイズの画像に対して、3×3のカーネルをパディング0、ストライド1で適当した場合の特徴マップのサイズ
= 1 + (4 + 0 - 3) / 1 = 1 + 1/1 = 2 なので 2×2
- 5×5のサイズの画像に対して、3×3のカーネルをパディング1、ストライド1で適当した場合の特徴マップのサイズ
= 1 + (5 + 2 - 3) / 1 = 1 + 4/1 = 5 なので 5×5
- ○の画像を斜線のフィルタを使って特徴マップにした例
プーリング層 †
- 位置ずれや形の歪みに対する頑健性
- 特徴マップから位置のズレに対して頑強な特徴抽出を行う。
- 特徴同士の位置関係で見る(絶対座標ではなく、相対座標で見る)。
- 特徴が特徴マップ中のどの部分に位置するか?
- 出力が縮小され処理の計算量が減る。
- 位置ずれや形の歪みに「頑健になる」(≒同じ値を返す)。
- プーリングの種類
- 最大値(MaxPooling?)
- 平均値(AvgPooling?)
- Lp(Lp pooling)
- パディングとストライド
- パディング(P):なし
- ストライド(S):ウィンドウサイズと同じの固定値
- 式
入力サイズ(H, W)、ウィンドウ・サイズ(WH, WW)、出力サイズ(OH, OW)
- 4×4の特徴マップに対して、2×2のウィンドウを適当した場合の出力のサイズ
= 4 / 2 = 2 なので 2×2
- 6×6の特徴マップに対して、3×3のウィンドウを適当した場合の出力のサイズ
= 6 / 3 = 2 なので 2×2
CNNのパラメタ †
畳み込み層 †
- この時点でカーネルは特定パターンの分類器(畳み込み&プーリング)のパラメタとして機能する。
- カーネルは重みパラメタとして機能し誤差逆伝播法によって、この分類器は学習できる。
全結合層 †
著名なモデル †
AlexNet? †
ILSVRC2012で優勝し、Deep Learningブームの火付け役となった
GoogLeNet? †
インセプション・モジュールという構造を採用し深いネットワークの学習を可能にした
- Google, 2014
- 分類、検出部門で優勝
- 畳み込み層とプーリング層で構成されたインセプション・モジュールを更に重ね大きなCNNを構成
VGGNet †
現在では性能がよかった VGG16 または VGG19 が使われている。
- オックスフォード, 2014
- 分類部門で2位
- VGG16 は 畳み込み13層と全結合3層の計16層から成るCNN。
ResNet? †
残差学習という手法を取り入れ152層の深いネットワークの学習を可能にした
- Microsoft Research, 2015
- 初めて人間のエラー率 5% を上回る精度を達成。
- 残差ブロックの導入による残差学習により、より深いCNNの学習方法を提案
- ある層で求める最適な出力を学習するのではなく層の入力を参照した残差関数を学習。
- 入力層から出力層まで伝播する値と入力層の値を足し合わせたモデルで入力層まで、
勾配値がきちんと伝わり、今では1000層といったかなり深い構造でも学習が可能となった。
EfficientNet? †
- Google, 2019
- スケールアップ規則の採用で、当時、パラメタ数を大幅に減少
- スケール(幅:層中のニューロン数、深さ:層の深さ、解像度:入力画像の大きさ)
- 幅:α^φ、深さ:β^φ、解像度:γ^φ
- αβγをグリッド・サーチで求める(φはパラメタ)
- α*β^2*γ^2 ≒ 2に制限(FLOPSは2φで増加
参考 †
YouTube? †