Видите в середине очень странный пик?
Даже следящему за показаниями приборов человеку тяжело его заметить, а вот МЛ модель справится с этим легко, и "не проморгает" момент
Всё крутится вокруг того, как бы нам максимально ужать модель, чтобы она влезла в небольшое устройство. В качестве "устройства" сойдет всё: чайник, промышленный сенсор, утюг, телефон, браслет и т.д.
А помочь засунуть жирную нейронку в худенький датчик поможет такой трюк, как Квантизация. Суть метода проста - а давайте сократим место, занимаемое числами в памяти. Обычные нейронки используют такой тип данных, как толстый 32 битный флоат. Что будет, если мы заменим их на худые 8 битные инты? Места занимать они станут меньше, но и качество упадёт.
Или возможно? Бинаризированные свёрточные нейронные сети к вашим услугам. Почитать о них подробнее можно здесь.
Перемножение матриц в этом случае выглядит "немного" по другому
А теперь, дабы было задорнее, немного кода. Сделаем простейшую модель, предсказывающую синус числа.
Данные готовы. Теперь делим их на тренировочную, тестовую и валидационную выборку (эту и некоторые другие части кода я пропущу для экономии вашего времени, полный ноутбук с кодом вот тут).
Время строить нашу нейронку!
Теперь давайте посмотрим, что получилось:
Полученное качество для наших экспериментов вполне сойдет
Итак, основная модель готова. Настало время "посжимать" её самыми разными способами. А поможет в этом нам TFLiteConverter, созданный специально для облегчения ваших нейронок.
Итого имеем три нейронные сети: обычную, конвертированную TensorFlow Lite без квантизации, конвертированную TensorFlow Lite с квантизацей. Самое время сравнить, сколько же места они занимают.
Все предыдущие действия мы делали на Python в ноутбуке, но ведь нас интересует, как задеплоить модель в микроконтроллер, правильно? А для этого требуется сконвертировать полученную модель в код, с которым эти сами микроконтроллеры привыкли работать. ВАЖНО! Приведенный ниже код я запускал на Ubuntu, если хотите подобное сделать на Windows - придётся искать обходные пути.
Модель у нас есть, а теперь посмотрим, как будет выглядеть наш С код на, собственно, микроконтроллере. Перед деплоем на микроконтроллер код можно (и нужно) сперва запустить на компьютере. Сразу скажу, что я выцепил только самые интересные куски кода, однако если вы хотите запустить его на своем компе - то вот.
Ну и наконец, вот так выглядит предсказание синуса на микроконтроллере:
Отдельно стоит упомянуть платформу Edge Impulse от ребят, плотно занимающихся TinyML.
Если хотите знать больше по теме, то присоединяйтесь к нашему NoML Community - https://t.me/noml_community.