MobileNetV3の進化:NASで最適化された軽量モデルの構造と実装
MobileNetV3は、2019年にHowardらによって発表された「Searching for MobileNetV3」の論文で紹介された、軽量かつ高性能な畳み込みニューラルネットワークの最新版である。前世代のMobileNetV1とV2に比べ、より効率的な構造と精度の向上を目指した。MobileNetV1は「深さ方向分離畳み込み」を導入し、パラメータ数を約90%削減。MobileNetV2では「逆残差構造」と「線形ボトルネック」を採用し、性能と効率のバランスを改善した。MobileNetV3では、さらにSqueeze-and-Excitation(SE)モジュールと「ハード活性化関数」を組み込み、精度をさらに高めた。また、ネットワーク全体の構造設計にはNeural Architecture Search(NAS)が用いられ、精度を最大化しつつ、遅延(latency)を最小化する最適な構成を自動探索した。 MobileNetV3は「Large」と「Small」の2つのバリアントに分かれる。主な構成は「bneck(ボトルネック)ブロック」で、各ブロックは点状畳み込み(pointwise)→ 深さ方向畳み込み(depthwise)→ SEモジュール(必要に応じて)→ 点状畳み込みの順で構成される。特に、SEモジュールはチャネルごとの重要度を学習し、重要な特徴に注目させる。このモジュールでは、従来のシグモイド関数の代わりに「hard-sigmoid」を採用しており、計算コストを大幅に削減。同様に、活性化関数として「hard-swish」が導入され、精度を維持しつつ、低消費電力デバイスでの実行を可能にした。 実験結果では、MobileNetV3-LargeはMobileNetV2と比較して、同等の遅延でより高い精度を達成。特にImageNetデータセットにおいて、同クラスの軽量モデルと比較しても最高の性能を示した。また、値の量子化(低精度演算)を適用しても、計算速度が向上し、実用性が高まった。モデルサイズは「幅係数(width multiplier)」と「入力解像度」で調整可能。幅係数を0.35~1.25に設定することで、用途に応じたサイズ調整が可能。 本記事では、PyTorchを用いたMobileNetV3-Largeの実装も紹介。SEモジュール、ConvBlock、Bottleneckブロックを個別クラスとして構築し、最終的に全体のネットワークを構成。実行結果から、出力形状やパラメータ数(約547万)が論文と一致し、正しく実装されていることが確認された。 MobileNetV3は、AIモデルの端末搭載に不可欠な「高精度・低遅延・小サイズ」の要件を満たす、実用性の高いアーキテクチャとして、今後もIoTやモバイルAI分野で広く使われる見込みである。
