Около года назад ко мне пришла идея создания открытого фреймворка для нейроинтерфейсов.
На данном видео захват ЭМГ сигнала мышц происходит с помощью восьмиканального ЭМГ датчика на предплечье. Таким образом, мы через кожу снимаем нерасшифрованную, усиленную мышцами картину активации двигательных нейронов.
Сырой сигнал с датчика через Bluetooth поступает в Android/Android Things приложение.
Для обучения системы, мы на определенный жест руки будем назначать класс движения. Например, если нам нужно состояние «остановка», а также вращение двух моторов в двух направлениях, всего мы запишем пять жестов. Соберем всё в файлы и отправим на обучение в нейросеть. На входе сети имеем нервную активность, на выходе — распознанный класс движения.
Пример архитектуры сети на Keras:
model = Sequential()
# 8 каналов ЭМГ записаны по 8 раз каждый
model.add(Dense(36, activation='relu', input_dim=64))
model.add(Dense(20, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(16, activation='relu'))
# 5 записанных жестов
model.add(Dense(5, activation='softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
https://www.kaggle.com/kyr7plus/naive-classifier
Для связи приложения и нейросети используется сервер. Клиент-серверное решение позволяет легко скриптовать машинное обучение с использованием TensorFlow, не меняя код приложения и избегая постоянных переустановок в процессе отладки.
Использовать полученные классификаторы можно при помощи TFLite либо TF Serving
В дальнейших планах:
- Cоздание опен сорс многоканального датчика ЭМГ, работающего по USB
- Эксперименты с машинным обучением для повышения надежности управления
Автор: kirillskiy