MobileNet論文その2: 「MobileNetV2: Inverted Residuals and Linear Bottlenecks」を読みました
CTOの幅野です。
今回は高速化アーキテクチャとして広く利用されているMobileNetV2の論文を読みました。
概要
モバイルで推論させることを考慮したMobilNetV1を拡張したMobileNetV2を提案。
MobileNetV1 では depthwise と pointwise covolution で演算を効率化していたが、inverted residuals and linear bottlenecks という構造を入れてさらにメモリ効率が良くかつ性能が高いモデルを構築。
MobileNetV1やshuffleNetなどの効率化アーキテクチャや自動探索したアーキテクチャのNas Netなどに対して、精度が同等であり、推論速度が高くなっていることを示している。
本論文の位置づけ
2018年に投稿: CVPR2018 軽量化モデルはPruningや蒸留、スパースモデリングの応用など様々な手法が提案されてきた。 遺伝的アルゴリズムや強化学習などを利用して、効率的なアーキテクチャを見つける手法が提案されている。(NASNetなど https://arxiv.org/abs/1707.07012) しかし、これらで見つかったアーキテクチャはとても複雑な構造を持っている。 本手法は複雑ではないより単純な設計で効率化することを目標としており、MobileNetv1をベースとしたReLUの特徴に基づいた新しいアーキテクチャを考案している。
MobileNetV1について
MobileNetV1は勉強会参加者の西本くんが詳細にまとめてくれているので詳細な説明は以下を参考にしてください。
https://hirokinishimoto.github.io/StudyRecord/Papers/MobileNets/
Depthwise Separable Convolutionの計算量
$h_i$×$w_i$×$d_i$のテンソルを入力し、$d_j$次元のチャンネルを出力する時
$$h_{i} \cdot w_{i} \cdot d_{i}\left(k^{2}+d_{j}\right)$$
MobileNetV1のアーキテクチャ
ReLUの表現力問題
活性化関数で得られた結果はmanifold of interest と呼ばれるもので、低次元のmanifoldに情報が埋め込まれているものと考える。 ReLUは非ゼロな値のみを線形変換する非線形関数である。 ReLU関数を利用した非線形変換だと、0につぶしてしまう領域が発生してしまう。 なので低次元でのmanifoldに埋め込む情報が限られてしまう。
上の図は低次元な写像にReLUを利用するとmanifoldに限られた情報しか埋め込むこむことができないことを示している。 inputのようなスパイラル状の2次元多様体があったときにこれをn次元へ写像させる2×Nの乱数の行列$T$を利用して$n$次元へ写像させ、そこでReLU関数を適応させる。 その後、適応させた行列に疑似逆行列$T^{-1}$をかけて2次元空間へ戻したものが上の図になる。図を見ると$n=2$のような低次元なときにはもとの多様体とは大きくことなっており、一方で$n=15$のような高次元のときには入力と同じような多様体を表現できている。
MobileNetV1の計算量を見ると、1×1 convolutionの計算がチャンネル数的に多くを占めている。 なのでチャンネル数を減らしたいが、低次元に落とし込むとReLUのmanifoldに埋め込まれる情報量が限られてしまうことによりうまく精度を達成させることができない。
ReLU問題の検証
ReLUの多様体が潰れてしまう問題について簡易的に実装をしてみた。
擬似逆行列を利用して生成し、Figure1で図示されていた次元数で検証を行った。
2次元や3次元などが潰れてしまうことがよくわかる。
このReLUの問題に対して中間部分のチャンネルを増やすことによって、本来つぶれてしまう情報を他のチャンネルに持たせることができ、情報の喪失を防げるのではないかと仮説を立てている。
Inverted residuals
ReLUの表現力の問題に基づいたInverted residulals blockと考案している。 このblockを基本的にMobileNetV1のDepth wise Separable Convolutionと置き換えることになる。 inverted residuals blockは3つのconvolutionから構成されていて、最初のconvolutionは1×1Convである。 そしてこのConvは$t$倍に出力チャンネルを写像する役割を持っている。 このハイパーパラメータ$t$は本論文では6にしている。 3つ目のConvolutionも同様に1×1convであるが、こちらは出力チャンネルを入力時のチャンネル次元数に戻すようなConvolutionになっている。 ReLU6はロバスト性を保つために採用しているとのこと。
また、勾配消失の問題を考慮してskip connectionを利用して3つ目のConv出力に入力テンソルを足し合わせるようにしている。
計算量
$\left(h, w, c_{i}\right) \rightarrow\left(h, w, c_{o}\right)$となるstride1の$k × k$convolutionを考える。
通常のconvolution: $h \cdot w \cdot c_{i} \cdot c_{o} \cdot k^{2}$
separable convolution: $h \cdot w \cdot c_{i} \cdot\left(k^{2}+c_{o}\right)$
Invert residuals block:
$h \cdot w\left(c_{i} \cdot t c_{i}+t c_{i} \cdot k^{2}+t c_{i} \cdot c_{o}\right)=h \cdot w \cdot c_{i} \cdot t\left(c_{i}+k^{2}+c_{o}\right)$
計算量を比較すると必ずしもInvert residuals blockが少ないわけではない。むしろ$t=6$の場合はむしろ計算量が上がってしまっている。
MobileNet2 architecture
Inverted residuals blockを利用してMobileNetV2のアーキテクチャの例で以下である。
bottleneckがInverted residuals blockに該当する。 MobileNetV1のアーキテクチャと比較すると、inverted residuals blockの部分においてチャンネル数が少ない構造となっている。 これにより、MobileNetV1より1×1convolutionの計算が減っている。
検証
Imagenet Classification
Imagenet classificationにおけるtop-1 accuracyと積和演算のトレードオフのグラフである。 MobileNetV1より効率がよくNaSNet ShuffleNetなどと同等の精度。
推論速度を見るとNasNetよりも速いことがわかる。
COCO Object Detection
Object Detectionタスクにおける精度結果が以下である。
SSDLiteはSSD内のConvolutionをDepth wise separableModuleに置き換えたものである。 最初の部分の層などをMobileNetV1に変えたものがMNet V1 + SSDLiteとなる。 V1と比較すると精度は同等で推論速度は速くなっている。
まとめ
- MobileNetV1を発展させたMobileNetV2を提案
- ReLUの性質に基づいた中間層のチャンネルを増やすことによる表現力を確保する構造を提案
- NASNetなどと比較すると高速で同等以上の精度を達成した。