![]() |
![]() |
![]() |
|||||
![]() |
Нейронные сети (инференс MNIST) на «3-центовом» микроконтроллере |
||||||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2024-10-29 14:53 ![]() Вдохновившись на удивление высокой производительностью нейронных сетей и обучением с учётом квантования на микроконтроллере CH32V003, я захотел выяснить, как далеко эту идею можно развить. Насколько можно сжать нейронную сеть с сохранением высокой точности тестов на датасете MNIST? Когда речь идёт о крайне дешёвых микроконтроллерах, сложно предположить что-то более подходящее, чем 8-битные Padauk. Эти устройства оптимизированы под простейшие и самые дешёвые приложения из доступных. Самая мелкая модель серии, PMS150C, оснащена однократно программируемой памятью в 1024 13-битных слова и 64 байтами RAM — на порядок меньше, чем в CH32V003. Кроме того, эта модель в противоположность намного более мощному набору инструкций RISC-V содержит коммерческий регистр-аккумулятор на основе 8-битной архитектуры. Возможно ли реализовать механизм инференса MNIST, способный классифицировать рукописные числа, также и на PMS150C? Я использовал образцы MNIST на CH32V003, понизив их разрешение с 28х28 до 16х16, чтобы каждый образец занимал 256 байтов хранилища. Это вполне приемлемо, если доступно 16 КБ флэш-памяти, но когда объём всей ROM составляет 1024 слова, получается перебор. Поэтому я начал с даунскейлинга датасета до 8х8 пикселей. ![]() Исследование параметров ![]() Удивительно, но тестовую точность выше 90% можно получить даже на моделях в полкилобайта. То есть такая сеть вполне впишется в программную память микроконтроллера. Теперь же, установив, что технически мой замысел вполне реализуем, мне нужно было дополнительно всё подстроить, чтобы вписаться в ограничения МК. Обучение целевой модели Поскольку объём RAM ограничен 64 байтами, структура модели должна использовать при выводе минимум скрытых параметров. Я выяснил, что можно использовать слои достаточно небольшой ширины 16. Это сокращает размер буфера во время вывода до всего 32 байт, по 16 для входного буфера и выходного, оставляя 32 байта для других переменных. При этом ввод 8х8 считывается непосредственно из ROM. ![]() ![]() ![]() Реализация на микроконтроллере В первой итерации я использовал чуть более крупный экземпляр Padauk, PFS154. Он оснащён вдвое бо?льшим объёмом ROM и RAM, а также допускает перепрошивку, что сильно упрощает разработку ПО. С-версии кода инференса, включая отладочный вывод, сработали практически из коробки. Ниже вы видите прогнозы и метки, включая вывод последнего слоя. ![]() t0sn , sl , t0sn , neg ). Расширяющее знак сложение (add , addc , sl , subc ) также состоит из четырёх инструкций, демонстрируя ограничения 8-битных архитектур.
Как видно ниже, в итоге я смог втиснуть весь код инференса в тысячу килослов памяти и сократил потребление SRAM до 59 байт. (Заметьте, что вывод SDCC предполагает по 2 байта на слово инструкции при том, что содержит всего 13 бит). ![]() Обобщение Реально можно реализовать инференс MNIST с хорошей точностью, используя один из самых дешёвых и простых микроконтроллеров на рынке. Значительный объём памяти и дополнительной обработки обычно уходит на реализацию гибких механизмов инференса, которые могут вместить широкий спектр операторов и структур моделей. Устранение этих издержек и сокращение функциональности до основной позволяет сильно упростить итоговое решение в этом супер эконом-сегменте. Источник: habr.com Комментарии: |
||||||