Help us understand the problem. What is going on with this article?

MobileNetV2: Inverted Residuals and Linear Bottlenecks_翻訳・要約

More than 1 year has passed since last update.

Screen Shot 2018-05-19 at 16.52.31.png

MobileNetV1: 概要

MobileNetV1(以下V1)1 では、通常のconvolutionを、depthwise convolutionpointwise convolutionの2つのサブタスクからなるdepthwise separable convolutionに置き換えることで計算コスト・パラメータ数を大きく削減した。ほぼ同じ精度で、計算コストを1/9ほどに削減ができた。

また、width multiplier / resolution multiplier というハイパーパラメータを導入することで、各層のチャネル数 / 解像度を小さくし、精度は下がってしまうものの、計算コスト・パラメータ数を大きく削減することができた。

Screen Shot 2018-05-22 at 12.45.28.png

図1: 通常のconvolution(a)とdepthwise separable convolution(b)のイメージ比較 1

MobileNetV2: 構造

MobileNetV2(以下V2)2 はV1同様に、基本的にdepthwise separable convolutionを用いている。V2では、さらに expand/projection layersinverted residual block がポイントになる。

Screen Shot 2018-05-22 at 15.53.16.png
図2: MobileNetV2における畳み込みのイメージ 3

Screen Shot 2018-05-22 at 15.55.44.png
図3: MobileNetV2における畳み込みのイメージその2 2

expansion/projection layers

図2における2番目と3番目の層はそれぞれ、depthwise separable convolution の depthwise convolution と pointwise convolution である。 pointwise convolution に関しては、V1においてはチャネル数を1倍、もしくは2倍にする役割を持っていたが、V2では、チャネル数を小さくする役目をする。そのため、V2ではprojection layerとも呼ばれている。 projection layer は、高次元(チャネル)を大幅に低次元にするという点で、V2において重要な役割を持つ。

例えば、144チャネルのインプットデータに対して depthwise layer が畳み込みを行う場合、 projection layer はそれを24次元まで削減する。このような層を bottleneck layer とも呼ぶ。これは、出力されるブロックがボトルネックであり、 bottleneck layer はネットワークを流れるデータを大きく削減するから、こう命名されている。

図3における、1番目の層はV2で初めて出てきたものである。これも 1×1 convolution であり、depthwise convolution に入る前にチャネル数を大きくするという役割を持つ。このとき、チャネル数を大きくする割合を expansion factor と呼び、ハイパーパラメータとして扱う。通常6が使われる。

例えば図4では、24チャネルの tensor がブロックに入ってきたとき、 expansion layer が 24 * 6 = 144チャネルにする。次に、depthwise convolution がそのまま144チャネルの tensor として出力し、最後に projection layer が24チャネルにまで小さくする。

Screen Shot 2018-05-22 at 16.15.02.png
図4: MobileNetV2における畳み込みのイメージ その3 3

インプットとアウトプットは低次元の tensor であり、途中経過は高次元の tensor であるというのが特徴である。

inverted residual block

2つめの特徴は、inverted residual blockである。これは、勾配の流れを調節するためにインプットtensorとアウトプットtensorを足し合わせる役割を持つ。

MobileNetV2: ネットワーク構造

表1は、V2のネットワーク構造である。tは expansion factor であり、expansion layerでの拡大率である、cは出力チャネル数、nはそのブロックの繰り返し数、sは stride である。

Screen Shot 2018-05-22 at 16.59.31.png
表1: MobileNetV2のネットワーク構造 2

V2とV1の比較: なぜV2はV1より優れているのか?

一般的に畳み込みでは、層を重ねるごとにチャネル数は大きくなっていき、空間方向の次元は半分になる。V1では、 7×7×1024 までサイズが大きくなるのに対して、V2では、7×7×324 と小さい。tensor が低次元である方が、計算量は小さくなるので、V2のほうが計算量が小さくなっているとわかる。

一方で、低次元の tensor では、情報量を十分に抽出できないという問題もあるため、より精度を出すためには、高次元な tensor を用いて学習したいと考えられる。V2では expansion layer でデータのチャネル数を大きくし、フィルタを適用し、projection layer でチャネル数に戻すというやり方をとっているからである。

conv1x1の計算量がボトルネックとなっているので、1つの計算量の大きなconv1x1を、計算量の小さなconv1x1を2つ利用することで近似しているということである。具体的には、入出力チャネル数が$N$のconv1x1の計算量は$HWN^2$である。これに対し、入力チャネル数が$N$、出力チャネル数が$N/t$のconv1x1と、入力チャネル数が$N/t$、出力チャネル数が$N$のconv1x1の計算量の合計は$2HWN^2/t$となる。ここで、$t$はチャネルの拡張率 (expansion factor) である。
$t=6$の場合、conv1x1の計算量が$1/3$になることが分かる。4

Screen Shot 2018-05-22 at 16.42.24.png
図5: MobileNetV2における畳み込みのイメージ その4 3

V2とV1の比較: 実験結果より

Object detection

Object detection における、V2とV1の比較である。V2はV1よりも精度が高く、さらにParams/MAdds/CPUともに小さいという結果が出ている。また、width multiplier を1.4に設定すると、精度は大きく向上するが、Params/MAdds/CPUともにV1よりも大きくなってしまう。

Screen Shot 2018-05-22 at 17.23.42.png
表2: Object detection におけるV2とV1の比較 2

図6は、V2(resolution multiplier 0.35, 0.5, 0.75, 1.0, 1.4), V1, NasNet, ShuffleNetの精度比較である。

Screen Shot 2018-05-23 at 19.14.53.png
図6: V2, NasNet, V1, ShuffleNetの計算量と精度の比較 2

図7は、non-linearities と residual connectionsのパフォーマンス比較である。(a)よりbottleneck layerで活性化関数として線形なRelu6を用いるより、非線形性の処理をした方が精度が上がることが示されている。(b)では、expansion layer 間のショートカットより、bottleneck間のショートカットのほうが精度が高いことがわかる。

comparison_v2.png
図7: non-linearities と residual connectionsのパフォーマンス比較 2

この論文では、Single Shot Detector (SSD)5をよりmobileフレンドリーにしたモデルを提案している。SSDのprediction layerを全てseparable convolutions (depthwise
followed by 1 × 1 projection)で置き換えたモデルをSSDLiteと定義した。表3にあるように、パラメータ・計算コスト共に、SSDと比較して大きく下がっていることがわかる。

また、COCOデータセットにおけるObject detectionにおいては、MobileNetV2 +
SSDLite という組み合わせが最も低いパラメータと計算コスト、かつ高い精度を出した。(表4)

Screen Shot 2018-05-29 at 18.17.38.png
表3: SSDとSSDLiteのパラメータ・計算コストの比較 2

Screen Shot 2018-05-29 at 18.17.42.png
表4: COCO dataset object detection task におけるMobileNetV2 +
SSDLiteと他の手法の比較 2

参考文献


  1. A. G. Howard, M. Zhu, B. Chen, D. Kalenichenko, W. Wang, T. Weyand, M. Andreetto, and H. Adam, "MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications," in arXiv:1704.04861, 2017. 

  2. Mark Sandler, Andrew Howard, Menglong Zhu, Andrey Zhmoginov, Liang-Chieh Chen, "MobileNetV2: Inverted Residuals and Linear Bottlenecks" in arXiv:1801.04381, 2018 

  3. MATTHIJS HOLLEMANS, "MobileNet version 2" in 2018 

  4. MobileNet(v1/2)、ShuffleNet等の高速なモデルの構成要素と何故高速なのかの解説|Qiita 

  5. Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu and Alexander C. Berg, "SSD: Single Shot MultiBox Detector," in arXiv: 1512.02325, 2016. 

HiromuMasuda0228
AbemaTVのエンジニアです。広告まわりをやっています。#Scala #Golang #Kubernetes
https://twitter.com/hiromu_bdy
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした