Оказывается, ещё в январе, в стандартную библиотеку — CMSIS (Cortex Microcontroller Software Interface Standard) включили функционал для реализации нейронных сетей — CMSIS-NN.
Основанием для внесения подобного функционала в стандартную библиотеку, стало признание того, что с развитием интеллектуальных периферийных устройств, IoT и т.п. — нейронные сети становятся всё более популярными для выполнения задач аналитики данных сразу на месте, что позволяет уменьшить латентность системы, а также уменьшить энергопотребление, которое можно будет не затрачивать на передачу данных.
CMSIS-NN представляет собой набор функций для реализации нейронных сетей, разработанных для максимизации производительности и минимизации объема потребляемой памяти на процессорных ядрах ARM Cortex-M.
Библиотека содержит функционал:
свёрки (Convolution Functions),
активации (Activation Functions) (Sigmoid, Tanh, ReLU),
полносвязный слой (Fully-connected Layer Functions),
пулинг (Pooling Functions),
софтмакс (Softmax Functions),
вспомогательные функции.
Представление чисел
Традиционно, нейросетевые модели обучаются с использованием 32-битного представления данных числами с плавающей запятой (float32). Однако, при работе модели, такая высокая точность, как правило, не требуется.
Исследования показали, что нейронные сети хорошо работают даже с менее точным представлением данных.
В CMSIS-NN, операции проводятся над целыми числами (Fixed-point quantization), что помогает избежать дорогостоящих вычислений над числами с плавающей запятой, а также уменьшает требуемый объём памяти для хранения весов и активаций, что имеет решающее значение для платформ с ограниченными ресурсами.
@brief 8-bit fractional data type in 1.7 format. typedef int8_t q7_t; @brief 16-bit fractional data type in 1.15 format. typedef int16_t q15_t;
Квантование выполняется с учетом формата с фиксированной запятой до степени двойки, то есть представленное значение будет равно A * 2**n
, где A — целое число, n — представляет собой целое число, указывающее основание счисления.
Коэффициенты масштабирования передаются для смещения (bias) и выхода в качестве параметров функций. Само масштабирование реализуются как побитовые сдвиги.
Быстродействие
Измеренное быстродействие для CIFAR-10 (цветная картинка 32×32, выход — 10 классов) на плате NUCLEO-F746ZG Mbed board с ядром Arm Cortex-M7, работающем на частоте 216 MHz, для 7-слойной свёрточной сети (3 раза — Convolution+Max Pooling) составило 99.1 ms на картинку (точность — 79.9%).
Ссылки
New CMSIS-NN Neural Network Kernels Boost Efficiency in Microcontrollers by ~5x
CMSIS-NN: Efficient Neural Network Kernels for Arm Cortex-M CPUs
CMSIS NN Software Library
https://github.com/ARM-software/CMSIS_5
Quant_guide
CMSIS-NN CIFAR10 Example
По теме
От Arduino к STM32
STM32: Урок 2 — Quickstart
uTensor — AI на микроконтроллерах
Глубокие нейронные сети как следующий этап развития программного обеспечения
Будущее глубокого обучения
Проблемы применения машинного обучения для решения реальных задач
Нейронная сеть
Нейронная сеть — введение
Принцип обучения многослойной нейронной сети с помощью алгоритма обратного распространения
Пример работы самоорганизующейся инкрементной нейронной сети SOINN