Interference 1.1.0: новые возможности

26-го июля состоялся релиз новой версии библиотеки Interference. Библиотека реализует интерференционную модель нейронной сети, написана на C++ и является проектом с открытым исходным кодом (лицензия MIT). В версии 1.1.0 она претерпела огромное количество изменений, об основных из которых мы и расскажем.

1. Увеличение производительности в ~15 раз

В новой версии библиотеки мы существенно переработали систему взаимодействия элементов модели: теперь в основном используется динамическое выделение памяти и работа с указателями. Это особенно актуально при расчёте новых координат положений рецепторов. Мы анализировали скорость выполнения каждой операции по отдельности, чтобы понять, какие из них наиболее ресурсоёмкие, и оптимизировали их.

2. Поддержка многопоточности для многоядерных CPU

Новая версия библиотеки получила переработанную архитектуру, которая позволяет распараллеливать работу с данными. Это касается как процесса обучения модели, так и распознавания данных. Теперь каждый нейрон в сети может иметь свой поток выполнения, этот режим активируется вызовом метода doEnableMultithreading() для объекта класса inn::NeuralNet (или inn::Neuron, если нейрон находится вне сети). Без вызова этого метода, нейронная сеть будет работать в однопоточном режиме, как и раньше. В дальнейшем планируется сделать архитектуру более гибкой: появится возможность задавать количество потоков выполнения вручную (станет возможным случай, когда один поток обрабатывает несколько нейронов). Новая архитектура открывает путь появлению поддержки графических ускорителей в ближайшем будущем.


Сравнительная диаграмма скорости обработки данных при обучении модели. 18,2 мбит\сек в многопоточном режиме против 3,8 мбит\сек в однопоточном. При тестировании использовался стенд с CPU Intel Core i5-8500.

3. Поддержка архитектуры ARM

Добавление поддержки библиотекой архитектуры ARM является скорее формальностью — никаких изменений в коде для этого не потребовалось. Достаточно выбрать нужный компилятор и собрать им её. Мы тестировали библиотеку на микроконтроллере Freescale iMX 6 Solo под Linux, даже на таком маломощном чипе модель обучалась и распознавала изображения за разумное время. Это означает, что библиотеку уже можно использовать во встраиваемых решениях и при разработке «умных» устройств.

4. Пример системы распознавания изображений

Теперь в репозитории библиотеки на GitHub имеется директория «samples», которая, как можно догадаться, содержит примеры использования библиотеки. Пример пока только один — inn_vision. Он максимально подробно описывает, как использовать библиотеку Interference для распознавания изображений, а также даёт общее представление о том, как применять библиотеку Interference для решения практических задач с использованием машинного обучения.

Результат работы примера. Обученная на 10 картинках из датасета COIL-100 модель (для каждого объекта была взята только одна картинка) успешно распознала все объекты несмотря на отличающийся ракурс, а иногда и масштаб. Одинаковые объекты выделены рамками одного цвета.

5. Прочие улучшения

Помимо основных нововведений, библиотека также получила некоторые улучшения, связанные с удобством её использования. В репозитории GitHub появилась инструкция по сборке как самой библиотеки, так и примера (для Windows и Linux). Там же можно ознакомиться с полным списком изменений в версии 1.1.0. В ближайшем будущем станет доступна полноценная документация.

Следите за новостями!

 

Открытый репозиторий библиотеки Interference на GitHub

Наши опубликованные исследования