[MNIST]
MNIST (от англ. Modified National Institute of Standards and Technology database) — это классический набор данных для обучения и тестирования систем машинного обучения, особенно в области распознавания рукописных цифр.
Что содержит:
- 70 000 изображений рукописных цифр от 0 до 9.
- 60 000 — обучающая выборка (training set)
- 10 000 — тестовая выборка (test set)
- Каждое изображение:
- размер 28×28 пикселей
- оттенки серого (grayscale, 0–255)
- в центре — одна цифра
Зачем это нужно. MNIST — это «Hello, World!» в мире машинного обучения. На нём:
- проверяют новые алгоритмы и архитектуры нейросетей;
- отлаживают фреймворки (TensorFlow, PyTorch и т.д.);
- тестируют inference-библиотеки вроде TinyMaix на микроконтроллерах.
Почему именно MNIST? Потому что:
- данные маленькие и простые;
- задача понятна (классификация на 10 классов);
- хорошая модель быстро достигает точности 99%+, а плохая — сразу видна.
Пример: на вход подаётся картинка 28×28 с рукописной «7». Модель должна выдать ответ: «это цифра 7» (или вероятности по всем 10 классам).
Оригинальный NIST-набор создан в США в 1980-х. В 1998 году Yann LeCun и соавторы модифицировали его (отсюда M в названии), переформатировав для удобства машинного обучения. До сих пор MNIST остаётся стандартным бенчмарком, хотя современные модели решают его почти идеально, и для серьёзных исследований его уже считают "слишком простым".
В контексте TinyMaix: в официальных примерах TinyMaix есть демо на MNIST — оно показывает, что даже крошечная модель может распознавать цифры на MCU с 2 КБ RAM. Это самый простой способ проверить, что библиотека корректно портирована на вашу платформу (например, BL616).
[MobileNet]
MobileNet — это семейство лёгких свёрточных нейронных сетей (CNN), созданных специально для работы на мобильных и встраиваемых устройствах с ограниченными ресурсами.
Зачем это нужно. Обычные нейросети вроде VGG или ResNet требуют огромного количества вычислений и памяти, что делает их непригодными для смартфонов или микроконтроллеров. MobileNet решает эту проблему, используя эффективную архитектуру, которая даёт приемлемую точность при драматично меньших затратах.
Ключевая идея: Depthwise Separable Convolution. Главное нововведение MobileNet — замена стандартной свёртки на depthwise separable convolution (глубинно-разделимая свёртка). Она разбивает одну операцию на две:
Depthwise convolution: фильтры применяются к каждому входному каналу отдельно (не смешивая их).
Pointwise convolution (1×1): объединяет результаты по каналам.
Это позволяет резко сократить количество параметров и вычислений (multiply-adds) при небольшой потере точности. По сути, сеть "фильтрует" и "комбинирует" признаки по отдельности, а не одновременно, как в стандартной свёртке.
Версии MobileNet:
- MobileNet V1 (2017): первая версия, предложенная Howard et al. Использует depthwise separable convolutions и имеет 4.2M параметров.
- MobileNet V2 (2018): улучшение за счёт inverted residual blocks и linear bottlenecks. Точность выше (Top-1 ~72.0%), параметров меньше (3.4M).
- MobileNet V3 (2019): комбинирует архитектурный поиск (NAS) и оптимизации для мобильных устройств, ещё эффективнее.
Гибкость настройки. MobileNet V1 предоставляет два гиперпараметра для управления компромиссом между точностью и скоростью:
- Width Multiplier (α): уменьшает/увеличивает количество фильтров в каждом слое. Например, α=0.25 даёт очень маленькую модель (~0.5M параметров), но с точностью ~50.6% на ImageNet.
- Resolution Multiplier (ρ): изменяет размер входного изображения (от 128×128 до 224×224).
В контексте TinyMaix: в официальных примерах TinyMaix есть демо на MobileNet V1 0.25 (вход 128×128×3). Это как раз тот случай, когда используются оба множителя для получения модели, которая влезает в память микроконтроллера (например, BL616). Это уже не игрушечная задача вроде MNIST, а полноценная классификация изображений на 1000 классов — и всё это на MCU.