Главная / Без рубрики / Алгоритмы компьютерного зрения для микроконтроллеров (TinyML)

Алгоритмы компьютерного зрения для микроконтроллеров (TinyML)

Введение

TinyML (Tiny Machine Learning) — направление, нацеленное на запуск моделей машинного обучения на устройствах с ограниченными ресурсами: микроконтроллерах (МК), IoT‑сенсорах, носимой технике.

Компьютерное зрение в рамках TinyML решает задачи:

  • распознавания объектов и жестов;
  • классификации изображений;
  • детекции аномалий (например, дефектов на производстве);
  • отслеживания движения.

Ключевые ограничения МК:

  • ОЗУ: 8–256 КБ;
  • ПЗУ: 32–2048 КБ;
  • тактовая частота: 16–240 МГц;
  • отсутствие FPU/GPU;
  • энергопотребление: единицы мВт.

В статье разберём:

  • принципы адаптации CV‑алгоритмов под МК;
  • популярные модели и архитектуры;
  • инструменты разработки;
  • оптимизацию инференса;
  • примеры реальных сценариев.

1. Почему компьютерное зрение на МК?

1.1. Преимущества

  • Локальная обработка — нет зависимости от облака, низкая задержка.
  • Конфиденциальность — данные не уходят наружу.
  • Энергоэффективность — экономия на радиомодулях.
  • Масштабируемость — тысячи устройств без нагрузки на сервер.

1.2. Сценарии применения

  • Умные датчики: детекция присутствия, подсчёт объектов.
  • Носимые устройства: распознавание жестов для управления.
  • Промышленность: контроль качества на конвейере.
  • Сельское хозяйство: анализ состояния растений.
  • Безопасность: обнаружение движения в камерах без интернета.

2. Принципы адаптации CV‑алгоритмов под МК

2.1. Сокращение вычислительной сложности

  • Уменьшение разрешения изображений (32×32, 64×64).
  • Переход на целочисленную арифметику (int8, int16) вместо float.
  • Квантование весов и активаций (8‑bit, 4‑bit).
  • Прореживание (pruning) — удаление малозначимых нейронов.

2.2. Оптимизация памяти

  • Статическое выделение памяти — избегание malloc/free.
  • Переиспользование буферов — один массив для промежуточных результатов.
  • Сжатие моделей (weight sharing, Huffman coding).

2.3. Аппаратные ускорения

  • SIMD‑инструкции (если поддерживаются).
  • DSP‑блоки (в некоторых МК, например, STM32F4).
  • Специализированные ускорители (например, Google Coral Micro).

3. Популярные модели и архитектуры

3.1. Лёгкие CNN для классификации

  • MobileNetV1/V2 (с глубиной‑разделёнными свертками).
  • SqueezeNet — 50× меньше AlexNet при схожей точности.
  • TinyYOLO — упрощённая версия YOLO для детекции.
  • EfficientNet‑Lite — масштабируемая архитектура.

Пример: MobileNetV2 на 32×32:

  • параметры: ~100 тыс.;
  • операции: ~1 млн MAC;
  • память: ~200 КБ (после квантования).

3.2. Альтернативы CNN

  • Haar‑каскады (как в OpenCV) — для детекции лиц/глаз.
  • HOG + SVM — гистограмма ориентированных градиентов + классификатор.
  • K‑NN на признаках — простые задачи классификации.

3.3. Модели для специфических задач

  • Autoencoders — аномалия‑детекция (сжатие → реконструкция).
  • LSTM/GRU — анализ видеопоследовательностей (редко из‑за памяти).
  • Decision Trees — бинарные решения по признакам.

4. Инструменты разработки

4.1. Обучение и конвертация моделей

  1. TensorFlow Lite for Microcontrollers:
    • обучение в Keras/TF;
    • конвертация в .tflite;
    • генерация C‑кода для МК.
  2. ONNX → CMSIS‑NN:
    • экспорт из PyTorch/Caffe;
    • оптимизация под ARM‑Cortex‑M.
  3. Edge Impulse:
    • веб‑платформа для сбора данных, обучения, деплоя;
    • поддержка Arduino, ESP32, STM32.

4.2. Фреймворки для инференса

  • TensorFlow Lite Micro — ядро для запуска .tflite.
  • CMSIS‑NN (от ARM) — оптимизированные функции для Cortex‑M.
  • NNoM (No Neural Net on Microcontroller) — минималистичный фреймворк.

4.3. Среды разработки

  • Arduino IDE + библиотеки (например, Arduino_TensorFlowLite).
  • STM32CubeMX + CMSIS‑NN.
  • PlatformIO — мультиплатформенная сборка.

5. Оптимизация инференса

5.1. Этапы обработки изображения

  1. Захват (камера, датчик):
    • RAW → YUV/RGB;
    • кадрирование.
  2. Препроцессинг:
    • нормализация (0…1 или −1…1);
    • изменение размера (resize);
    • центрирование.
  3. Инференс (модель):
    • свертки, пулинг, активации;
    • полносвязные слои.
  4. Постпроцессинг:
    • softmax → класс;
    • NMS (Non‑Maximum Suppression) для детекции.

5.2. Оптимизации на каждом этапе

  • Захват:
    • пропуск строк/пикселей (decimation);
    • аппаратный resize (если есть).
  • Препроцессинг:
    • целочисленные аппроксимации (например, деление через сдвиг);
    • таблицы предрасчитанных значений (LUT).
  • Инференс:
    • объединение свертки и BatchNorm в один слой;
    • замена ReLU на «ступенчатую» функцию.
  • Постпроцессинг:
    • порог уверенности (confidence threshold);
    • ограничение числа объектов.

5.3. Пример оптимизации свертки

// Вместо float
for (i=0; i<H; i++)
  for (j=0; j<W; j++)
    output[i][j] = relu(conv2d(input, kernel));


// Целочисленная версия (int8)
for (i=0; i<H/2; i++)     // Пропуск строк
  for (j=0; j<W/2; j++) // Пропуск столбцов
    output[i][j] = clamp((conv2d_int8(input, kernel) * scale) >> shift, 0, 127);

6. Практические примеры

6.1. Распознавание цифр (MNIST на МК)

  • Модель: TinyCNN (3 свертки, 1 полносвязный слой).
  • Вход: 28×28 grayscale.
  • Память: ~80 КБ (int8).
  • Скорость: 50–200 мс на Cortex‑M4.

Код (TensorFlow Lite Micro):

TfLiteStatus status = interpreter->Invoke();
TfLiteTensor* output = interpreter->output(0);
int predicted_digit = std::distance(
    output->data.f,
    std::max_element(output->data.f, output->data.f + 10)
);

6.2. Детекция лица на ESP32

  • Модель: Haar‑каскад (OpenCV) или TinyYOLO.
  • Камера: OV2640 (QVGA).
  • Оптимизации:
    • resize до 64×64;
    • grayscale → бинаризация.
  • Результат: 1–2 кадра/с на ESP32‑S3.

6.3. Классификация дефектов на производстве

  • Задача: найти трещины на деталях.
  • Модель: Autoencoder (вход 128×128).
  • Метрика: MSE между входом и реконструкцией.
  • Порог: если MSE > T → дефект.

7. Ограничения и «подводные камни»

7.1. Ресурсы

  • ОЗУ: модели >256 КБ редко запускаются на МК без внешней памяти.
  • ПЗУ: прошивка + модель + библиотека → может не влезть
поставить кофейный аппарат

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *