CMSIS-NN - библиотека для работы с нейронными сетями для микроконтроллеров ARM Cortex-M

STM32
Оказывается, ещё в январе, в стандартную библиотеку — 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),
вспомогательные функции.

CMSIS-NN блок-схема

Представление чисел


Традиционно, нейросетевые модели обучаются с использованием 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 (цветная картинка 32x32, выход — 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
  • 0
  • 5 июля 2018, 16:00
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.