TinyML, ИИ && Микроконтроллеры
На фото изображен микроконтроллер нового поколения с аппаратным обеспечением для ИИ, Eta Compute.
![Wanna more? No, TinyML - 1 Wanna more? No, TinyML - 1](https://www.pvsm.ru/images/2022/03/09/Wanna-more-No-TinyML.jpg)
ИИ
Если задать вопрос "Что такое искусственный интеллект?" дилетанту и инженеру-строителю, то получатся два совсем разных, непохожих друг на друга ответа. В этом и есть вся сложность с ИИ. От дилетанта будет рассказ-антиутопия, где уже вот-вот роботы отберут все работы у людей. Но, ответ такой неверен, ведь у ИИ нет такого человеческого качества, как воображение.
Инженер-строитель же, в свою очередь, ответит скорее всего грубовато, резко, заученной фразой своего босса. Ведь босс уже все уверенно тому рассказал про то, что сам разузнал об ИИ из журнала-руководства. Босс теперь обязательно хочет внедрить ИИ и в свой продукт.
Где вообще искать верный ответ? С точки зрения электротехники на текущий момент концепция ИИ заключается в работе математического алгоритма для распознавания изображений, который основан на нейронной сети, работающей по принципам функционирования человеческого
Есть три неотъемлемых задачи при создании нейронной сети: составление модели, тренировка сети, вывод (интерпретация) полученных результатов модели.
Модель
Есть такая нейросеть со специальной архитектурой, Сверточная нейронная сеть (CNN) и она состоит из взаимосвязанных перцептронов (картинка снизу). Это стандартный пример, на нем изображены 4 слоя, 2-е средних или «скрытых» слоев и 2-е внешних. Начиная построение модели, как определить необходимое количество inputs, outputs, слоев?
![Wanna more? No, TinyML - 2 Wanna more? No, TinyML - 2](https://www.pvsm.ru/images/2022/03/09/Wanna-more-No-TinyML-2.jpg)
Итак, с inputs все довольно легко. К примеру: нам нужно получить по цифровой камере, 320х200 пикселей изображения автоматическое распознавание/классификацию какого-либо объекта в трехцветном RGB режиме. Перемножим: 320 * 200 * 3 = 192k inputs!
Слой же output будет отображать число объектов, которые система будет натренирована распознавать. Предположим, что имеем 11 outputs для 10 объектов, в том числе для одного «ничего не было распознано». Скрытые слои будут содержать минимум 192k узлов, и занятный вопрос: сколько всего слоев потребуется? В модели, в которой так плотно каждый узел присоединен к следующему из другого слоя, требуется выполнить большой объем низкоуровневой обработки данных. Для каждого узла из скрытых слоев будут нужны умножения в следующий слой в размере 192k. Для обработки процессору в любом случае понадобится Floating-Point Unit (FPU). А теперь, представьте себе вычислительную мощность, необходимую для управления сетью, обученную распознавать сотни различных объектов в HD видео, при этом кадры меняются на 30 fps. В каждом фрэйме — десятки объектов. Если нужна автономная система наблюдения в беспилотнике — имеет такие вычислительные характеристики… Придется обзавестись очень дорогой мульти-процессорной системой, которая будет работать на скорости многих petaFLOPS только на этапе тренировки модели. Что ж, ну, возьмем D1 в количестве 120 штук, будем стремиться к exaFLOPS…
Это был MegaML, что насчет TinyML?
Возможно в мире никогда не появятся системы видеонаблюдения на CNN, которые станут подходящими для использования их в беспилотниках.
А что можно сделать с одним единственным, на одном микропроцессоре, несчастным SBC? На самом деле предостаточно, важно только не сдаваться сразу же при ответах на подобные вопросы, где может так внезапно появится TinyML — любимец мира IoT…
Итак, когда-то идея подключения миллионов девайсов в Облако через интернет показалась всем отличной. Но были проблемы с передачей данных, задержки при их отправке — это было просто-напросто недопустимо для корректной работы некоторых систем. То есть надо было сделать так, чтобы можно было как-то обойти эти нужды в том, чтобы сделать запрос у облака. Появился «Edge», способ обработки данных — более совершенный в плане сохранности данных.
Пример ИИ на Edge
Автоматизированные заводы — часть ждущей всех нас 4-ой Индустриальной Революции. Машины на заводах будут находиться под контролем датчиков, которые будут управляться компьютерами. Вместо логики If-Then-Else, берется гораздо более крутая на ИИ, которая использует информацию, полученную с датчиков для последующей тренировки CNN.
Мало того, что все существующие баги будут исправлены, так еще и будут указаны те невидимые ранее неверные закономерности в работе системы, как лишние inputs. Кстати, если input выдаст «ложноположительные» или «ложноотрицательные» результаты, то это сообщит о необходимости добавить дополнительный сенсор.
В общем-то, TinyML можно понять интуитивно по названию: разработано для небольших систем, с маленьким числом inputs, outputs и количеством визуальных объектов для распознавания. Это позволяет делать встраиваемые «Things» — полностью IoT умными, снижая при этом нагрузку на коммуникационные линии Интернета и сервера.
Hardware для реализации ИИ
SBCs
ARM Cortex-M microcontroller boards, Raspberry Pi 4, BeagleBone AI, Sony SPRESENSE, Arduino Nano 33 Sense и даже Raspberry Pi Pico.
Совсем базовые ИИ программы можно выполнить и на 32-битных, с 16KB памяти компьютерах — Raspberry Pi Pico как раз имеет такие слабенькие характеристики.
Тренировка модели
Используется всеми разработчиками для тренировки — TensorFlow. Изначально платформа была создана для проектов, где были необходимы суперкомпьютеры. На сегодняшний момент есть упрощенная версия, названная TensorFlow Lite. Ну а для самых базовых проектов, с объемом памяти в 16KB и с/без FPU — TensorFlow Lite for Microcontrollers.
CNN тренировать это задача из легких, но только если делать это лишь бы хоть бы как нейросеть заработала. Если же все-таки хочется избежать смертельно опасных для системы ошибок в работе, то, да, тренировка модели это тяжело. Это тяжело, да еще и неэффективно.
Сколько уже у нас нет нормально работающего распознавания объектов нейросетью в беспилотниках? В последние годы много смертей случилось в результате неправильной интерпретации визуальных данных CNN во время поездки.
К счастью, TinyML сети гораздо более просты в сравнении с ML больших размеров (которые MegaML) в тренировке. Большие сети в TinyML используют вместе с инструментами, основанными на «облачных» технологиях в силу необходимости быть с компьютерами высокой мощности потребления. Некоторые из инструментов, тем не менее, запускаются и на локальном компьютере.
Сам ход тренировки до безумия несложен:
-
коллекция данных c каждого датчика, при этом с учетом машин, к которым они подключены
-
активация смоделированной сети TinyML
-
программа предоставляет нейросети CNN данные для дальнейшей обработки с окончательным выпуском их на outputs. Пока не будут получены нужные, верные с математической точки зрения работы самой CNN outputs — данные будут вновь, и вновь проходить одну и ту же окончательную переработку в outputs. Процесс такой, если случился, то называется методом обратного распространения ошибки. Он является крайне витальным для тренировки нейронной сети.
Время, затраченное на тренировку нейросети, пока что не заставляет думать о себе, как о скоростном… Да, и еще часто приходится вмешиваться в процесс 3-шаговой тренировки человеку, чтобы сделать полностью верными значения, которые выдает на итоге сеть.
Часть данных, находящихся на inputs начинает быть обработанными сетью сразу на процессе моделирования. То есть часть данных от начала тренировки нейросети специально переносится еще и наперед 3-шагового круга.
Возвращаясь к беспилотникам, в лаборатории во время тренировки системы автоматического анализа визуальных данных результат уровня корректности работы был 90%. На дороге получают до сих пор всего 50%. Как будто бы данных для того, чтобы натренировать модель, уже никогда не смогут получить в достаточном для нее объеме.
Вывод результата
После окончания тренировки, система переходит в режим «мышления». Система находится какое-то время в поиске закономерностей для своей дальнейшей работы, сравнивая данные в режиме реального времени с теми, что были сгенерированы ее обучением (тренировкой).
Результаты именно «домысляются», они не не высчитываются системой, как может на первый раз интуитивно показаться, словно на калькуляторе.
Если все прошло хорошо, то сеть загружает данные в память Flash у встраиваемого микроконтроллера, и осуществляется переход работы системы целиком в режим реального времени.
Обман, смещение и глубоко
CNN хоть и берут пример в своем поведении от человеческих мозгов, могут вам показаться странно скучно-нервирующими в своих действиях. Во-первых, они «словно хулиганье перед учителем в школе» врут, давая «верный» ответ из-за неверных причин. Такое бывает, когда во время тренировки модели данные были чересчур скудны.
Не понятно?) Пример: Робот-склад может быть обучен распознавать коробки из зеленого картона. Итак, в комплект входит изображение всех форм и размеров зеленой коробки. В первый раз робот хватает человека на складе. Почему? Потому что человек носил зелёный комбинезон. Во время обучения сеть пришла к выводу, что всё, что окрашено в зелёный цвет, должно быть коробочкой, красивой, но потенциально фатальной.
Во-вторых, по схожим причинам машина может выдавать смещенные результаты. Помните ту машину, что решила во время работы с базами данных о судимости сажать людей в тюрьмы, опираясь на их цвет кожи? До неприличия много чернокожих оказались за решеткой.
В-третьих, напоследок закончим уточнив положительное свойство. CNN как никогда лучше справляются с поисками глубоко от человека запрятанных вредительных закономерностей для их последующего исправления. Пример: тончайшие повадки поведения людей, по которым теперь можно с уверенностью вычислять серийных убийц среди огромной базы данных личностей.
Финал
Тяжеловесные нейронные сети на суперкомпьютерах — выигрывают людей в шахматы и шашки. Гораздо более маленький TinyML может и не так хорошо себя может показать в упомянутых играх, в науке, в медицине, но зато TinyML уже спасло ни одну жизнь, всего-то на-всего выдавая свои незамысловато вычисленные outputs.
Автор: MARIYA MASHKOVSKAYA