MobileNetV2とは?特徴を広げて処理し、少ない計算量で画像認識する軽量CNN

MobileNetV2は、逆残差構造と線形ボトルネックで画像認識を軽量化するCNNです。チャネルの拡張・Depthwise畳み込み・活性化を置く位置の意味、原論文の精度と実機速度から、端末内AIや画像処理サービスへの応用と限界を解説します。

参考文献

MobileNetV2: Inverted Residuals and Linear Bottlenecks

Mark Sandler, Andrew Howard, Menglong Zhu, Andrey Zhmoginov, Liang-Chieh Chen

論文を見る

今回の論文

今回取り上げるのは、Mark Sandler、Andrew Howard、Menglong Zhu、Andrey Zhmoginov、Liang-Chieh Chenによる「MobileNetV2: Inverted Residuals and Linear Bottlenecks」です。2018年1月13日にarXivで初公開され、CVPR 2018で発表されました。公開元はarXivとCVPR、研究分野は画像認識、軽量ニューラルネットワーク、モバイル推論です。論文の書誌情報と本文を参照できます。本記事は2019年3月21日改訂のv4に基づきます。

選んだ理由は、「小さいモデルにするために、内部では一度特徴を増やす」という設計から、精度と実行費用の両立を考えられるためです。モデルのパラメータ数だけでなく、途中の特徴をどのように保持・加工するかも、端末上のAIでは重要になります。

どんな技術か

MobileNetV2は、少ないチャネルで特徴を受け渡し、ブロック内部ではチャネルを広げて加工する画像認識用CNNです。CNNは畳み込みを積み重ねて、画像から輪郭、模様、形などの判別に使える特徴を学びます。

例えば、部品の写真を入力し、その種類を分類する使い方ができます。分類器を別の後段へ置き換えて学習すれば、物体の場所を検出したり、画素ごとの領域を分類したりする特徴抽出器にもなります。

中心になるのは、狭い表現の間を残差接続で結ぶ「逆残差構造」と、狭く戻した直後に非線形活性化を置かない「線形ボトルネック」です。単にすべての層を細くするのでなく、情報を保持する場所と、複雑な変換を行う場所を分けます。原論文3・4節

課題

画像認識モデルは、チャネル数や画像の解像度を大きくすると、演算量と中間データの容量が増えます。カメラ映像を端末内で処理する場合、処理時間が長いと撮影や操作への反応が遅れ、メモリの不足も配備の制約になります。

一方、すべての層を細くすると、判別に必要な情報まで削るおそれがあります。特にReLUのように負の値をゼロへ変える処理を、すでに圧縮された特徴へ適用すると、異なる入力が同じ表現になり得ます。後段の層は、失われた差をそのまま取り戻せません。

また、軽量な演算を使っても、それだけでアプリ全体が速くなるとは限りません。特徴抽出器の後ろに重い検出器を付ければ、そこで費用が増えます。モデル構造、後段の処理、実行環境を含めて設計する必要があります。

用語解説

特徴マップとチャネル
特徴マップは、画像内の位置ごとに複数の特徴量を持つ配列です。チャネルは特徴量の種類に対応します。MobileNetV2の「広げる・狭める」は主にチャネル数の操作で、画像の縦横を拡大する意味ではありません。
Depthwise畳み込み
各チャネルを独立に処理して、周囲の位置の情報を集める畳み込みです。全チャネルを一緒に混ぜる通常の畳み込みより演算量を抑えられますが、チャネル間の組み合わせは別の処理で作る必要があります。
1×1畳み込み
同じ位置にあるチャネルを線形に組み合わせる処理です。MobileNetV2では、特徴の種類を増やす拡張と、出力チャネル数へ戻す射影を担当します。空間方向の情報集約とは役割が異なります。
ReLU6と線形ボトルネック
ReLU6は値を0から6の範囲へ制限する活性化関数です。広い中間表現では使いますが、狭い出力では省きます。この出力部分が線形ボトルネックです。「線形」は活性化を省く部分を指し、モデル全体が線形という意味ではありません。
残差接続
ブロックの出力へ元の入力を足す接続です。情報と勾配の通り道を作ります。MobileNetV2では細い表現同士を結び、広い中間特徴を接続のために持ち越さずに済む構造にします。

技術の仕組み

狭い入力を広げ、空間を処理して狭く戻します

同じ解像度・同じ出力チャネル数を保つ代表的なブロックは、次の順で処理します。以下は基本構造で、先頭の拡張率1のブロックなどには例外があります。

入力 x(Cチャネル)
  → 1×1畳み込みで拡張(通常 C → 6C)+BatchNorm+ReLU6
  → 3×3 Depthwise畳み込み+BatchNorm+ReLU6
  → 1×1畳み込みで射影(6C → C)+BatchNorm
  → 入力 x と加算

例えば32チャネルなら、中間を192チャネルへ広げます。最初の1×1畳み込みが、元の特徴のさまざまな組み合わせを作り、Depthwise畳み込みが組み合わせごとに周辺のパターンを調べます。最後の1×1畳み込みで、その結果を次のブロックへ渡すチャネル数にまとめます。

従来のResNetのボトルネックは、広い入力をいったん狭めて処理し、広い出力へ戻します。MobileNetV2ではこの配置が逆になり、残差接続も狭い入出力の間を結びます。ただし、解像度を下げるストライド2のブロックや入出力チャネル数が異なるブロックでは、そのままの入力加算は行いません。原論文3.3節・表1・表2

狭い出力で情報を切り落とさないようにします

ReLUで負の値をゼロにすると、例えば1次元では−1と−2を区別できなくなります。これは仕組みを理解するための単純な例で、実際の特徴は多次元です。広い空間なら、あるチャネルで差が消えても、別のチャネルに差が残る可能性があります。

そこで、複雑な非線形変換は広い中間特徴で行い、狭い表現へ戻した後にはReLU6を置きません。最後のBatchNormは残るため、「正規化まで取り除く」と実装すると別のブロックになります。情報の保持は設計上の狙いであり、任意の入力を完全復元できるという保証ではありません。

演算を分ける場所と順番に意味があります

通常の3×3畳み込みは、周囲の9位置と全入力チャネルを同時に組み合わせます。Depthwise畳み込みは空間だけを、1×1畳み込みはチャネルだけを処理するため、費用を分けて管理できます。

同じ空間サイズを保ち、入出力がCチャネル、拡張率がtの場合、畳み込み部分の演算量の目安は次のとおりです。BatchNormや活性化の費用は含めていません。

MobileNetV2ブロックのMAdds ≈ H × W × (2tC² + 9tC)
H, W:特徴マップの高さと幅
2tC²:拡張と射影の2つの1×1畳み込み
9tC:3×3 Depthwise畳み込み

つまり、Depthwiseが軽くても、1×1畳み込みの費用は残ります。拡張率を増やすほど無料で表現力が上がるわけではありません。この式はストライド1・入出力同幅という条件の整理で、異なる解像度のブロックにはそのまま使えません。

ConvNeXtの逆ボトルネックと空間・チャネル混合も比較すると、幅を広げる発想が共通でも、Depthwise畳み込みを拡張の前に置く設計との違いがわかります。

学習と推論、メモリの工夫を分けて考えます

画像分類では、ラベル付き画像でモデルを学習します。原論文はRMSPropを使い、各層にBatchNormを適用します。推論では特徴マップを段階的に縮小し、最後に空間平均と分類用の変換でクラスを出します。モデル幅と入力解像度を変えることで、精度と費用の異なる構成を用意します。

さらに、広い中間特徴をチャネルの部分集合ごとに計算し、射影結果へ足し込む実装も可能です。Depthwise処理がチャネル間で独立していることを利用し、中間配列全体を一度に保持せずに済ませます。ただし、細かく分けすぎると行列演算の実行効率が落ちます。論文も速度との兼ね合いを指摘しており、通常の層を並べるだけで、この省メモリ実装が自動的に得られるとは限りません。原論文4〜5節・6.1節

実験と結果

分類では精度と計算量、端末の速度を並べます

ImageNetの表4は、標準幅・224×224入力のMobileNetV2と既存モデルを比較しています。Top-1精度は最も高いスコアのクラスが正解した割合、MAddsは積和演算の回数です。

モデルTop-1精度パラメータ数MAddsCPU時間
MobileNetV170.6%420万5.75億113 ms
MobileNetV272.0%340万3億75 ms
MobileNetV2・幅1.4倍74.7%690万5.85億143 ms

標準幅ではV1より1.4パーセントポイント高く、MAddsは約48%少ない結果です。CPU時間はGoogle Pixel 1の大きいコア1個、TF-Liteでの値で、113÷75から約1.51倍の処理速度に相当します。演算量の削減率と実測速度の改善率は一致していません。

幅を1.4倍にすると精度は上がりますが、時間は143 msへ増えます。「V2なら常にV1より速い」ではなく、どの構成で比較するかが重要です。原論文6.1節・表4

検出では、精度をほぼ保って費用を下げています

COCOの物体検出では、検出ヘッドの畳み込みも分離するSSDLiteを使います。入力は320×320、trainval35kで学習し、test-devで評価しています。評価指標は、複数のIoU閾値を使うCOCOのmAPです。

表6では、MobileNetV1+SSDLiteの22.2 mAP・13億MAdds・270 msに対し、MobileNetV2+SSDLiteは22.1 mAP・8億MAdds・200 msです。ここでは精度が0.1ポイント下がる代わりに、演算量と時間を減らしています。原論文本文には強い精度の表現もありますが、本記事では表の数値に沿って読みます。

時間はPixel 1の大きいコアと内部版TF-Liteで測られています。分類実験と処理内容や実装条件が異なるため、75 msと200 msから検出ヘッドだけの時間を計算することはできません。原論文6.2節・表6

部品の比較も、構造を理解する材料になります

図6の比較では、狭い出力へ非線形活性化を追加するより線形のままにする構成、広い中間層間より狭いボトルネック間を残差接続する構成が良好でした。これは提案の意図を支える比較ですが、どの画像モデルでも活性化を減らせばよいという一般則ではありません。原論文6.4節

何に使える?

以下は、構造と実験結果に基づく応用案です。原論文がそれぞれの業務で効果を実証したものではありません。

端末内で動く部品・商品分類

撮影した部品の種類を選択候補として出すアプリなどが考えられます。軽い特徴抽出器を端末に置ければ、画像送信を待たずに候補を表示する設計を試せます。自社画像で分類器を適応させ、誤分類時は利用者が修正する流れにします。

ただし、画像分類のモデルだけでは複数商品の位置はわかりません。複数物体を扱うなら検出器、細かい輪郭が必要なら領域分割器が必要です。

重い解析の前段に置く画像処理

大量の点検画像から、対象設備が写っている画像を先に振り分ける用途が考えられます。軽量分類で処理対象を絞れれば、後続の高解像度モデルや画像を読むLLMの呼び出し回数を減らせる可能性があります。

この構成では前段の見逃しが後段で救えません。全体の費用と同時に、重要な画像を何枚取りこぼすかを評価し、曖昧な画像は後段へ送る設計が必要です。

カメラ入力を使う検出ツール

SSDLiteの評価は、特徴抽出器だけでなく検出ヘッドも軽くする発想の参考になります。棚の物品や作業対象を枠で示すツールで、許容できる検出精度と処理間隔を比較できます。

背景候補が多く学習が偏る場合は、構造の軽量化とは別に、Focal Lossで簡単な負例の影響を抑える考え方も判断材料になります。MobileNetV2にこの損失を足せば必ず改善するという実証ではなく、計算費用と学習の偏りを別々に調べるための接点です。

開発や事業へのヒント

モデル幅と入力解像度を別々に比較します

小規模なプロダクトでは、大規模な事前学習を再現するより、事前学習済みの重みから業務画像へ適応する比較が現実的です。モデル幅を減らす実験と、入力解像度を下げる実験を分けると、どの情報を削ると精度が落ちるかを調べられます。

例えば、小さな傷を扱うなら低解像度化が見逃しにつながるおそれがあります。同じ待ち時間を目標にしても、細いモデルで解像度を保つ案と、広いモデルで画像を縮める案は同じではありません。対象の大きさ別に評価してください。

「保管する表現」と「加工する表現」を分けます

MobileNetV2から得られる設計上のヒントは、ブロック間で持ち回る情報量と、内部で加工する際の幅を別に考えることです。途中の最大配列が大きいと、重みのファイルが小さくてもメモリを消費します。

画像AIサービスの費用を見積もる場合も、重みの容量に加えて、推論中のピークメモリを記録すると配備可能な同時実行数を判断しやすくなります。ただし、この構造をLLMや任意のネットワークへそのまま移して、同じ効果が得られるとは限りません。

事業の条件を測定項目へ落とします

検品アプリなら許容される見逃し率と1枚の待ち時間、連続撮影なら継続実行中の処理時間や消費電力を確認します。これらは原論文のPixel 1の単発測定だけでは決まりません。

小型モデルで完結する入力の割合が増えれば、サーバー処理の費用を減らせる可能性があります。一方、モデル配布、端末ごとの差、更新後の回帰確認にも費用がかかります。推論単体のMAddsから事業全体の削減額を直接算出しないことが大切です。

限界

第一に、2018年のモデルとベンチマークです。原論文の比較は当時の条件での有効性を示しており、現在のすべての軽量モデルに対する優位性を示しません。端末やランタイムが変われば、演算の得意不得意も変わります。

第二に、途中でチャネルを広げるため、素朴な実装では大きな中間配列ができます。省メモリ化には実行順序や演算の統合が関わり、チャネルを細かく分割すれば必ず速くなるわけでもありません。論文のメモリに関する議論は主に推論を対象とし、逆伝播を含む学習メモリが同じだけ減ると考えるべきではありません。

第三に、MobileNetV2はラベル不要の学習法ではありません。業務画像への適応では、照明、撮影距離、背景、未知の製品などへの評価が必要です。自然画像のTop-1精度から、欠陥検査の見逃し率や少数例での性能は予測できません。

最後に、低精度計算を意識したReLU6を使っていても、量子化後の精度が自動的に保証されるわけではありません。入力の正規化、BatchNormの統計、活性化の位置、モデル変換後の出力を確認する必要があります。理論上の情報保持の説明も、実際の全入力に対する可逆性の保証とは区別してください。

よくある質問

Q. 軽量化するのに、なぜチャネルを6倍へ増やすのですか?

A. 広い空間で特徴の組み合わせを作り、非線形変換を行うためです。ブロックの入出力は狭く保ち、空間の処理にはDepthwise畳み込みを使います。ただし拡張にも費用があり、6倍は主実験の設定であって、すべての用途の最適値ではありません。

Q. 線形ボトルネックは、最後のBatchNormも省きますか?

A. 省きません。基本ブロックでは射影用1×1畳み込みの後にBatchNormがあり、その後のReLU6を省きます。入力加算後にも追加のReLU6を置かない構成です。通常の「畳み込み・正規化・活性化」を一律に適用すると変わってしまいます。

Q. 分類モデルだけで、画像内の物体を検出できますか?

A. 分類出力は画像全体のクラスなので、位置は直接出しません。原論文の検出結果はSSDLiteのヘッドを組み合わせて学習したものです。検出枠を付けた教師データや、候補を整理する後処理も必要です。

Q. MAddsが半分なら待ち時間も半分になりますか?

A. 必ずしもなりません。表4ではV1からV2でMAddsは約48%減りますが、CPU時間は113 msから75 msで約34%減です。メモリアクセスや演算の実装も効くため、実際の対象端末で前処理・後処理を含めて測定します。

Q. 少数の業務画像だけで導入できますか?

A. 事前学習済み重みから適応する案はありますが、原論文は必要ラベル数を保証していません。撮影条件を分けた検証データを用意し、分類ヘッドのみの学習と本体の微調整を比べるなど、手元のデータで判断する必要があります。

今日の学び

この論文は、画像認識の精度を保ちながら、端末での計算量とメモリを抑える課題を扱いました。狭い表現を残差接続で持ち回り、広い内部で加工し、狭く戻した後には非線形活性化を置かない構造で解こうとしています。開発へのヒントは、モデルを一律に小さくする前に、情報を保持する場所、加工する場所、実行時に費用がかかる場所を分けて調べることです。