DenseNet | nibuiroフラグメント β

DenseNet

DenseNet

DenseNet

Point

 すべてのレイヤを直接接続することによって、

  • 勾配消失の削減
  • 特徴伝達の強化
  • 特徴の効率的な利用
  • パラメータ数の削減
  • 正則化効果の期待

を実現している。すなわち、各レイヤへの入力は以前のすべてのレイヤから与えられ、直接接続数は$\frac{L(L+1)}{2}$となる。

What’s different from Resnet ?

$$x_l=H_l(x_{l-1})+x_{l-1}$$
 Resnetにおいてレイヤlの出力はレイヤl-1の出力にレイヤl-1の非線形変換を加えたものでチャンネル数(depth)は一定だが、
$$x_l = H_l([x_0,x_1,\cdots,x_{l-1}])$$
DenseNetにおいてはレイヤlの出力はレイヤ$0,\cdots,l-1$の出力をチャンネル方向に連結したものとなる。こうしてみると全くもって異なることが明白になる。

What’s Dense block

 難しいことはなく…実装しようとするとPadding祭りになったりするのだが、BN-ReLU-Conv(1 x 1)-BN-ReLU-Conv(3 x 3)から成るレイヤをトップ画像の様に密結合させたもの。このレイヤ毎のチャンネル(depth)増加数を$k$をgrowth rateと呼んでいる。

DenseNet Families

 で、「DenseNet-B」?「DenseNet-C」?「DenseNet-BC」? 何よソレ。という話なんだがね?

Bottleneck layers.
Although each layer only produces k output feature-maps, it typically has many more inputs. It has been noted in [37, 11] that a I x I convolution can be introduced as bottleneck layer before each 3×3 convolution to reduce Lhe number Of input feature-maps, and Lhus 10 improve computational efficiency. We find this design especially effective for DenseNet and we refer to our network with such a bottleneck layer, i.e., to the BN-ReLU-Conv(l x 1)-BN-ReLU-Conv(3 x 3) version of H_l, as DenseNet-B. In our experiments, we let each 1 x 1 convolution produce 4k feature-maps.
Compression.
To further improve model compactness, we can reduce lhe number Of feature-maps al transition layers. If a dense block contains m feature-maps, we let the following transition layer generate 19m] output feature-maps, where O < 9 1 is referred to as the compression factor. When 0 — 1, the number of feature-maps across transition layers remains unchanged. We refer the DenseNet with 0 < 1 as DenseNet-C, and we set 0 = 0.5 in our experiment. When both the bottleneck and transition layers with O < 1 are used, we refer to our model as DenseNet-BC.

(θがOやら0やらになっていたり、他にもいろいろと間違いあるので気を付けて)

  • DenseNet-B
     特徴マップ数の削減、計算の効率化のためConv(3 x 3)レイヤの前にBottleneck layerとして、Conv(1 x 1)レイヤを導入した。これはチャンネル方向での圧縮操作(和)となる。
  • DenseNet-C
      DenseBlockがm個の要素を持つ特徴マップを出力する場合、より簡潔に表現するために$0 < θ\leq 1$のもと、$\lfloor θm \rfloor$に要素数を削減するためTransition layerとして、BN-ReLU-Conv(1 x 1)-AvgPool(2 x 2, stride 2)から成るレイヤをを導入した。
  • DenseNet-BC
     上記二つの工夫を取り入れた版。

Performance


よさげ。


実装:
https://github.com/sheep02/2D_DenseNet_Keras.git
 これ自体の動作確認はしていないのですが、これをもとに別のモデルを組みましたので恐らく動作します。


Reference: