0Pricing
Learn AI with Python · レッスン

エッジデプロイメント向けの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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 転移学習の概念と戦略
  2. VGG16とResNet50をベースモデルとして使う
  3. ファインチューニング:凍結解除と再学習
  4. エッジデプロイメント向けのMobileNetとEfficientNet
← Learn AI with Pythonに戻る