エッジデプロイメント向けのMobileNetとEfficientNet
軽量アーキテクチャ、TFLiteへの変換、モデルサイズと精度のトレードオフについて学習します。
「エッジデプロイメント向けのMobileNetとEfficientNet」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
エッジモデルが異なる理由
スマートフォンや組み込みデバイスでは、非常に小さいサイズ、低レイテンシ、低消費電力を実現するために、ある程度の精度を犠牲にします。MobileNetとEfficientNetはまさにこの目的のために設計されており、高負荷な通常の畳み込みではなく、効率的な構成要素を使用します。
MobileNetの深度方向分離可能畳み込み
MobileNetは標準的な畳み込みを深度方向分離可能畳み込みに置き換えます。これは、チャネルごとの空間フィルタリングと、それに続く1x1のポイントワイズな混合で構成されます。これにより、精度をほとんど損なうことなく、計算量とパラメータ数をおよそ8~9分の1に削減できます。
MobileNetV3Small
MobileNetV3Smallはモバイル向けに調整されており、重みのサイズは約2.5MBです。そのため、ストレージやRAMに余裕がない場合に最適です。
from tensorflow.keras.applications import MobileNetV3Small
base = MobileNetV3Small(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)EfficientNetB0
EfficientNetB0は複合スケーリングを使用して、深さ、幅、解像度のバランスを取ります。モデルサイズに対して高い精度を実現し、小型のモバイルネットワークと負荷の大きいサーバーモデルの中間に位置する優れた選択肢です。
from tensorflow.keras.applications import EfficientNetB0
base = EfficientNetB0(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)どちらを選ぶか
- MobileNetV3Small(約2.5MB):最も小さく、最も高速ですが、精度は最も低くなります。リアルタイムのモバイル処理に最適です。
- EfficientNetB0:精度とサイズのバランスに優れています。もう少し計算量をかけられる場合に最適です。
デバイスのレイテンシ予算と目標精度に基づいて選択します。
転移学習用ヘッドの構築
転移学習のパターンは同じです。ベースモデルを凍結し、プーリングを行い、Denseヘッドを追加します。
from tensorflow.keras import layers, Model
base.trainable = False
x = layers.GlobalAveragePooling2D()(base.output)
x = layers.Dropout(0.2)(x)
out = layers.Dense(num_classes, activation="softmax")(x)
model = Model(base.input, out)TFLiteとは
TensorFlow Liteは、デバイス上で推論を実行するためのランタイムです。学習済みのKerasモデルを、モバイルのCPU、GPU、NPU上で効率的に動作するコンパクトな.tfliteフラットバッファに変換します。
TFLiteへの変換
TFLiteConverterを使用して、保存したモデルを変換します。
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open("model.tflite", "wb") as f:
f.write(tflite_model)量子化によるさらなる小型化
学習後量子化では、重みをfloat32ではなくint8で保存します。これによりサイズを約4分の1に削減し、モバイルハードウェアでの推論を高速化できます。精度の低下はわずかです。
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant = converter.convert()レイテンシのベンチマーク
一般的なモバイルハードウェアでは、MobileNetV3Smallは画像1枚あたり1桁台から10数ミリ秒程度で実行できることが多く、十分にリアルタイムで動作します。EfficientNetB0はより大きく低速ですが、精度は高くなります。
必ず実際の対象デバイスでベンチマークしてください。エミュレーターでの計測時間は信頼できません。TFLite Benchmark Toolを使用するか、インタープリターのinvoke()にかかる時間を計測します。
TFLite推論の実行
Interpreterでモデルを読み込み、入力テンソルを設定して呼び出し、出力を読み取ります。
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
inp = interpreter.get_input_details()[0]
out = interpreter.get_output_details()[0]
interpreter.set_tensor(inp["index"], image)
interpreter.invoke()
print(interpreter.get_tensor(out["index"]))確認テスト
エッジデバイスへのデプロイに関する知識をテストします。
まとめ
エッジ用途に向けて、MobileNetV3Small(約2.5MB、最速)とEfficientNetB0(バランス型)を比較し、それぞれに転移学習用ヘッドを構築してTFLiteに変換し、int8量子化を適用し、実際のハードウェアでレイテンシをベンチマークする方法を学びました。これで転移学習コースは完了です。次のコースは時系列分析です。
よくある質問
「エッジデプロイメント向けのMobileNetとEfficientNet」レッスンは無料ですか?
はい。「エッジデプロイメント向けのMobileNetとEfficientNet」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「エッジデプロイメント向けのMobileNetとEfficientNet」で何を学びますか?
軽量アーキテクチャ、TFLiteへの変換、モデルサイズと精度のトレードオフについて学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「エッジデプロイメント向けのMobileNetとEfficientNet」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 転移学習の概念と戦略
- VGG16とResNet50をベースモデルとして使う
- ファインチューニング:凍結解除と再学習
- エッジデプロイメント向けのMobileNetとEfficientNet