0Pricing
Learn AI with Python · Урок

MobileNet и EfficientNet для периферийного развертывания

Лёгкие архитектуры, преобразование в TFLite, компромисс между размером модели и точностью

«MobileNet и EfficientNet для периферийного развертывания» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Почему периферийные модели отличаются

На телефонах и встроенных устройствах приходится жертвовать частью точности ради очень малого размера, низкой задержки и низкого энергопотребления. MobileNet и EfficientNet созданы именно для этого: вместо тяжёлых плотных свёрток они используют эффективные строительные блоки.

Разделимые по глубине свёртки MobileNet

MobileNet заменяет стандартные свёртки на разделимые по глубине свёртки: пространственный фильтр для каждого канала, за которым следует поточечное смешивание 1x1. Это примерно в 8–9 раз сокращает объём вычислений и количество параметров при незначительной потере точности.

MobileNetV3Small

MobileNetV3Small оптимизирована для мобильных устройств: её веса занимают около 2,5 МБ, поэтому она идеально подходит, когда объём хранилища и 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,5 МБ): самая компактная и быстрая, но с наименьшей точностью. Лучше всего подходит для работы в реальном времени на мобильных устройствах.
  • EfficientNetB0: сбалансированное соотношение точности и размера. Выбирайте её, если можете выделить немного больше вычислительных ресурсов.

Ориентируйтесь на допустимую задержку устройства и целевую точность.

Создание head для переноса

Шаблон переноса обучения остаётся тем же: заморозьте базовую модель, выполните объединение признаков и добавьте head на основе 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 в компактный плоский буфер .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)

Квантизация дополнительно уменьшает размер

Квантизация после обучения хранит веса в формате int8 вместо float32, примерно в 4 раза уменьшая размер и ускоряя выполнение вывода на мобильном оборудовании при минимальной потере точности.

converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant = converter.convert()

Тестирование задержки

На типичном мобильном оборудовании MobileNetV3Small часто обрабатывает одно изображение за однозначное число миллисекунд или несколько десятков миллисекунд, что обеспечивает комфортную работу в реальном времени. EfficientNetB0 тяжелее и медленнее, но точнее.

Всегда проводите измерения на фактическом целевом устройстве: результаты эмулятора ненадёжны. Используйте инструмент тестирования TFLite или измеряйте время выполнения 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,5 МБ, самая быстрая) и EfficientNetB0 (сбалансированная) для использования на периферийных устройствах, создали на их основе head для переноса, преобразовали модели в TFLite, применили квантизацию int8 и измерили задержку на реальном оборудовании. На этом курс «Перенос обучения» завершён. Следующий курс: анализ временных рядов.

Часто задаваемые вопросы

Урок «MobileNet и EfficientNet для периферийного развертывания» бесплатный?

Да — полный текст урока «MobileNet и EfficientNet для периферийного развертывания» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «MobileNet и EfficientNet для периферийного развертывания»?

Лёгкие архитектуры, преобразование в TFLite, компромисс между размером модели и точностью Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 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