モバイルCNNアーキテクチャの進化
Introduction
過去数年間で、畳み込みニューラルネットワーク(CNN)は、組み込みデバイスやモバイルデバイスでの使用がより実現可能になりました。 Tensorflow LiteやONNXなどのツールは、組み込みデバイスにディープラーニングを適用する機会をさらに加速させています。コンピュータビジョンでは、これらのアプリケーションに特化したCNNアーキテクチャを使用することがよくあります。このレポートは、利用可能なモバイルCNNアーキテクチャの概要を示します。また、最近の Kaggle コンテストのデータセットで、これらのモデルのサブセットを評価します。ユースケースは、KaggleのPlant Pathology 2020コンテストのデータを使用してリンゴの木の病気を検出することです。
付属のKaggle Notebookを参照→ →
アーキテクチャ
MobileNet (2017)
MobileNetsは、モバイルアプリケーションに簡単に展開できるCNNアーキテクチャを構築するための最初のイニシアチブの1つでした。主な革新の1つは、depthwiseに分離可能な畳み込みです。これを以下に視覚化します。分離可能な畳み込みは、通常の畳み込みカーネルを2つのカーネルに分離します。たとえば、3x3カーネルの代わりに、3x1カーネルと1x3カーネルを取得します。この分離により、畳み込みを実行するために必要な操作の数が減るため、はるかに効率的です。ただし、空間次元で分離できるとは限らないため、深度(チャネル)次元で分離するのが一般的です。この深さ方向に分離可能な畳み込みは、MobileNetで使用されます。また、ユースケースに応じてCNNモデルを簡単にスケーリングできる幅乗数も紹介しています。このモデルは、モバイルオブジェクト検出、顔検出、および画像分類アプリケーションの簡単なソリューションになりました。
深さ方向に分離可能な畳み込みの詳細については、Chi-Feng Wangによるこのブログ投稿をご参照ください。
ShuffleNet (2017) / ShuffleNetV2 (2018)
ShuffleNetは、ポイントごとのグループ畳み込みとチャネルシャッフルを導入することにより、モバイルCNNアーキテクチャの最先端技術を進歩させました。点ごとのグループ畳み込みは、モバイルCNNアーキテクチャで一般的な1x1畳み込みを高速化するために使用されます。ただし、これらの畳み込みには、特定のチャネルからの出力が入力チャネルのごく一部からのみ得られるという副作用があります。各グループのチャネルを複数のサブグループに分割することで、この副作用を軽減できます。これは、チャネルシャッフル操作です。ShuffleNetV2は、効率的なCNNアーキテクチャーのためのいくつかの実用的なガイドラインを示しています。ボトルネックの変更とチャネル分割の導入により、アーキテクチャをさらに最適化します。下の画像では、ShuffleNetV1(a.、b.)とShuffleNetV2(c. d.)の違いを確認できます。
MobileNetV2 (2018)
MobileNetシリーズのV2では、MobileNetのパフォーマンスを向上させるために、反転残差と線形ボトルネックが導入されました。反転された残差により、ネットワークは(ReLU)アクティベーションをより効率的に計算し、アクティベーション後により多くの情報を保持できます。この情報を保持するには、ボトルネックの最後のアクティベーションが線形アクティベーションを持つことが重要になります。下の元のMobileNetV2論文の図は、反転された残差を含むボトルネックを示しています。この図の厚いブロックには、より多くのチャネルがあります。
さらに、ここではReLU6アクティベーションを導入して、低精度計算のアクティベーションを高速化し、量子化により適したものにします。ReLU6のアクティブ化は次のように定義されます。
ReLU6(x)=min(max(x,0),6)ReLU6(x) = min(max(x, 0), 6)
この論文は、物体検出と画像分類に加えて、 DeepLabV3論文の手法を使用した効率的なセマンティックセグメンテーションの有望な結果も示しました。
NASNetMobile (2018)
NASNetの研究は、強化学習を使用して最適なCNNアーキテクチャを検索することを目的としています。NASはNeuralArchitecture Searchの略で、ニューラルネットワーク構成の空間を検索するためにGoogle Brainで開発された手法です。NASは、CIFAR10やImageNetなどの標準データセットとともに使用され、さまざまなサイズのCNNを最適化しました。縮小版はNASNetMobileと呼ばれます。以下に、NASとCIFAR10で派生した最良の縮小畳み込みセルを示します。
FBNet (2018)
FBNetはFacebook-Berkeley-Netsの略で、ニューラルアーキテクチャ検索から派生したデバイス固有(iPhoneXやSamsung GalaxyS8など)のモバイルアーキテクチャのファミリーを紹介します。ここでの主な革新は、次の図に視覚化されている、微分可能なバージョンのニューラルアーキテクチャ検索(DNAS)です。
EfficientNetB0 (2019)
EfficientNetの調査では、複合スケーリングパラメータの計算を使用してCNNアーキテクチャを効率的にスケーリングします。EfficientNetの最小バージョンはEfficientNetB0です。このアーキテクチャはNASNetMobileに似ていますが、主にMobileNetV2で見られたボトルネックを利用しています。さらに、この研究では、スク**イーズアンドエキサイト最適化と強力なSwish**アクティベーション機能も追加しています。これは、強化学習(NAS)を使用して最適化されたアクティベーションであり、次のように定義されます。
Swish(x)=x⋅sigmoid(βx)Swish(x) = x \cdot sigmoid(\beta x)
ここで、β\beta は定数またはトレーニング可能なパラメーターとして定義できます。
MobileNetV3 (2019)
MobileNetV3は、速度とパフォーマンスの両方でMobileNetV2を最適化するためのいくつかのトリックを導入しています。アーキテクチャは、ハードウェア対応NASと NetAdaptアルゴリズムの両方を使用して携帯電話のCPU用に最適化されました。セマンティックセグメンテーションのために、MobileNetV3にはLite Reduced Atrous Spatial Pyramid Pooling(LR-ASPP)と呼ばれる効率的なデコーダーがあります。さらに、Hard Swishアクティベーションは、ReLU6アクティベーションを改善し、通常のSwishアクティベーションのより効率的な代替手段として使用されます。Swishアクティベーションは次のように定義されます。
hswish(x)=xReLU6(x+3)6hswish(x) = x \frac{ReLU6(x+3)}{6}
GhostNet (2020)
HuaweiのNoah's Ark Lab によるGhostNetアーキテクチャは、最先端のモバイルアーキテクチャと見なされています。GhostNetのアーキテクチャのコア機能は、「ゴーストモジュール」です。Ghostモジュールは、最初に通常の畳み込みを採用してフィーチャマップを生成し、次に安価な線形演算を使用して「ゴーストフィーチャ」と呼ばれるこれらのフィーチャマップを拡張します。これらの線形演算により、アーキテクチャは畳み込みを行うために必要なFLOPSとパラメーターがはるかに少なくなりますが、データの強力な表現を学習することはできます。さらに、GhostModuleは、初期の機能マップを保持するためのIDマッピングを備えています。次の図を参照して、通常の畳み込みとGhostモジュールの違いを確認してください。
EfficientNetB0で見たように、スクイーズアンドエキサイト最適化は、GhostNetのボトルネックの残りのレイヤーでも使用されます。これまでに説明したアクティベーション機能の進歩にもかかわらず、GhostNetは引き続き通常のReLUアクティベーションを使用します。
実験
データセット
KaggleのPlantPathology2020コンテストのデータを使用します。このデータセットには、リンゴの木の葉の約1800枚の画像が含まれており、リンゴの木の病気を示す4つのクラスがあります。以下は、「複数の病気」クラスでラベル付けされた画像のサンプルです。これは比較的小さなデータセットであり、転移学習法を活用すると、はるかに良い結果が得られる可能性が高いことに注意してください。データセット自体の詳細については、このコンテスト用のTarun Papara’juの優れた探索ノートご覧ください。
実験のセットアップ
この実験では、MobileNet、MobileNetV2、NASNetMobile、EfficientNetB0、GhostNetを評価します。関心のある主な指標は、検証の精度、画像ごとの推論速度、およびモデル内のパラメーターの数です。
推論速度は、テストジェネレーターですべての画像を予測し、Tensorflowデータセットジェネレーターを使用して単一の画像を予測するのにかかる時間を計算することで測定されます。時間はCPU/GPUの仕様やその他の実行中のプロセスによって異なる可能性があるため、これは非常に大雑把な方法であることに注意してください。ただし、モデルの速度を合理的に見積もることができます。
この実験では、MobileNetおよびNASNetMobileアーキテクチャ用に事前トレーニング済みのImageNet重みを使用し、EfficientNetB0を微調整するために Noisy Student重みを使用します。GhostNetは、Glorotの均一な重みの初期化からトレーニングされ、SunnyyeahのGhostNet for Tensorflow 2の実装を使用します。学習率のスケジュールは、5つのウォームアップエポックを持つ指数関数的減衰スケジュールです。GhostNetの場合、ランダムな重みの初期化からネットワークをトレーニングする必要があるため、より高い学習率を使用します。データの拡張は、水平方向と垂直方向の反転です。
完全な実験セットアップを参照するには、このKaggleNotebookをチェックしてください→
結果
EfficientNetB0は、検証精度の点で最高であり、高速で、比較的多くのパラメーターを備えています。MobileNetV2は良好な結果をもたらし、私たちが選択した中で最小のものです。残念ながら、画像分類の問題について、GhostNetの最新の結果を再現することはできませんでした。この理由の1つは、このモデルで事前にトレーニングされたImageNetの重みを活用できなかったためと考えられます。
結語
私たちの実験では、EfficientNetB0はすべてのモデルの中で最高の検証精度を達成しています。2番目に優れたモデルであるMobileNetV2との精度の差は1%です。予想どおり、MobileNetV2は、MobileNetの最初のバージョンと比較して、より速く収束し、より正確です。ただし、Kaggle NotebooksのGPUでベンチマークを行うと、MobileNetV2はMobileNetよりもわずかに遅くなります。MobileNetV2は、モバイルデバイスでも高速になる可能性があることに注意してください。この不一致は、深さ方向に分離可能な畳み込みが現在cuDNNでサポートされていないためです。
作業メモリーが非常に限られている場合は、MobileNetV2が実験のモデルの中から最良の選択になります。これが厳しい制約ではない場合、EfficientNetB0は現在モバイルアプリケーションに最適なアーキテクチャのようです。残念ながら、巧妙なGhostNetアーキテクチャが、CIFAR10やImageNetなどの学術データセットを超えた最先端の結果をもたらすかどうかは、私たちの実験からは明らかではありません。このアーキテクチャが実際のモバイルコンピュータビジョンアプリケーションでも有効であるかどうかを確認するために、コミュニティによるGhostNetでの実験が増えることを期待しています。
最終的な考え
このレポートでは、モデルのプルーニングや量子化 などの手法がこれらのCNNアーキテクチャに与える影響を評価していません。これらの手法では、速度と精度の間に別個のトレードオフがあり、一部のモバイルアーキテクチャは、プルーニングまたは量子化により適している場合があることに注意してください。
この紹介で、モバイルCNNアーキテクチャの概要がわかることを願っています。その場合は、付属のKaggleノートブックでこのレポートをご参照ください。
ご質問やご意見がございましたら、以下にコメントしてください。Twitter@carlolepelaarsを通じて私に連絡することもできます。