0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

E資格合格に向けて 深層学習day4 (応用モデル)

Last updated at Posted at 2022-01-04

#MobileNet
近年の画像認識タスクに用いられる最新のニューラルネットワークアーキテクチャは、多くのモバイルおよび組み込みアプリケーションの実行環境を上回る高い計算資源を必要とされる。
一般的な畳み込みレイヤーは計算量が多い。
MobileNetsは「Depthwise Convolution」と「Pointwise Convolution」の組み合わせで軽量化を実現

≪Depthwise Convolution≫
・入力マップのチャネルごとに畳み込みを実施
・出力マップをそれらと結合(入力マップのチャネル数と同じになる)
 →通常の畳み込みカーネルは全ての層にかかっていることを考えると計算量が大幅に削減可能
 →各層ごとの畳み込みなので層間の関係性は全く考慮されない。通常はPW畳み込みとセットで使うことで解決
image.png

≪Pointwise Convolution≫
・1×1convとも呼ばれる
・入力マップのポイントごとに畳み込みを実施
・出力マップ(チャネル数)はフィルタ数分だけ作成可能(任意のサイズが指定可能)
image.png

Depthwise Convolutionはチャネル毎に空間方向へ畳み込む。
Pointwise Convolutionによって、チャンネル方向に畳み込む

image.png

#DenseNet
Dense Convolutional Networkは、畳込みニューラルネットワークアーキテクチャの一種である。ニューラルネットワークでは層が深くなるにつれて、学習が難しくなるという問題があったが、Residual NetworkなどのCNNアーキテクチャでは前方の層から後方の層へのアイデンティティ接続を介してパスを作ることで問題を対処した。DenseBlockと呼ばれるモジュールを用いた、DenseNetもそのアーキテクチャの一つ。

image.png

出力層に前の層の入力を足し合わせる
image.png

Transition Layerでダウンサンプリング
image.png

【実装例】Densnets

def dense_block(x, k, n_block):
  for i in range(n_block):
    main = x
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    #1x1
    x = Conv2D(filters = 64, kernel_size = (1, 1), padding = 'valid')(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    #3x3
    x = Conv2D(filters = k, kernel_size = (3, 3), padding = 'same')(x)
    #concatenate
    x = Concatenate()([main, x])

  return x

def transition_layer(inputs, compression = 0.5):
  n_channel = int(inputs.shape[3])
  filters = int(n_channel * compression)
  x = Conv2D(filters = filters, kernel_size = (1, 1))(inputs)
  outputs = AveragePooling2D(pool_size = (2, 2))(x)

  return outputs

def DenseNet():
  inputs = Input(shape = (28, 28, 1))

  x = dense_block(inputs, k = 16, n_block = 1)
  x = transition_layer(x, compression = 0.5)
  x = dense_block(x, k = 16, n_block = 2)
  x = transition_layer(x, compression = 0.5)
  x = dense_block(x, k = 16, n_block = 4)
  x = transition_layer(x, compression = 0.5)
  x = dense_block(x, k = 16, n_block = 3)

  x = GlobalAveragePooling2D()(x)

  x = Dense(512)(x)
  x = BatchNormalization()(x)
  x = Activation('relu')(x)

  x = Dense(n_class)(x)

  outputs = Activation('softmax')(x)

  return Model(inputs, outputs)

#BatchNorm
ミニバッチに含まれるsampleの同一チャネルが同一分布に従うように正規化
バッチサイズが小さい条件下では、学習が収束しないことがあり、代わりにLayerNorm等の正規化手法が使われることが多い。

#LayerNorm
それぞれのsampleの全てのpixelsが同一分布に従うように正規化

#Instance Norm
各Sampleの各チャネル毎に正規化

image.png

#WaveNet
音声生成モデル。Pixel CNN(※RNNではない)
時系列データに対して畳み込みを適用する
深層学習を用いて結合確率を学習する際に、効率的に学習が行えるアーキテクチャを提案したことがWaveNetの大きな貢献の1つである。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?