Profile picture
, 44 tweets, 15 min read Read on Twitter
Это тред о том, как мы вывели нейронные сети в реальную жизнь. Если нравится прикладная роботика и инженерия, или любишь нейроночки, или мигаешь LEDом на Ардуине, то будет интересно. Впрочем, это история о том, как собрать множество разных компонентов и технологий в единое целое
И как собрали из этого представление. Стек Tensorflow-Magenta-MIDI-Serial-Arduino-Motors-Drum. @cellular_bud
@cellular_bud Полтора года назад мы делали проект, где использовали рекуррентные нейронные сети для генерации музыки(link). В этом году Eesti Kontsert (целевое учреждение, крупнейший организатор выступлений в стране) проводило серию концертов «Технология и Музыка» habr.com/ru/post/342306/
@cellular_bud Мы — это группа MODULSHTEIN и я. faershtein.com/2017/07/19/mod… Если в прошлом проекте все происходило внутри одной машины и сигналы от моделей отображались на семплы, то идея этого проекта — вывести сигналы наружу и подключить к живому инструменту.
@cellular_bud А поскольку модели мы используем для генерации ритма, то инструмент, на котором машина будет играть — это барабан. Барабан, который мы будем использовать, это часть реквизита, оставшегося с аудио-визуального представления IDEM.
@cellular_bud Музыка, как и язык, особенно язык разговорный, обладает временной структурой. Это ритм, интервалы, динамика. Если моделировать музыкальную последовательность как поток неких символов, то для того, чтобы моделировать эту временную структуру, подходят рекуррентные нейронные сети.
@cellular_bud Известная статья Andrej Karpathy — это отличное введение в принципы, стоящие за рекуррентными нейронными сетями, и там есть отличные примеры. Чего стоит одна только сеть, натренированная на исходном коде Linux. karpathy.github.io/2015/05/21/rnn…
@cellular_bud Протокол MIDI идеально подходит для представления музыки в виде потока символов. Таким образом, нам необходимо преобразовывать сигналы MIDI во вход для моделей, и выход модели трансформировать обратно в MIDI. И тут на помощь приходит проект Magenta Google. magenta.tensorflow.org
@cellular_bud По сути, Magenta предоставляет собой MIDI интерфейс для моделей TensorFlow. Создаются виртуальные MIDI порты для call-response, грубо говоря — входа и выхода. Можно запускать несколько параллельных портов. К каждой паре портов можно подсоединить модель TensorFlow.
@cellular_bud Но если в предыдущем проекте мы отображали сигналы MIDI, идущие от моделей на сэмплы, то в этот раз нам надо выводить их наружу и подключать к моторам. То есть все можно представить как-то так: Tensorflow-Magenta-MIDI-Serial-Microcontroller-Actuators.
@cellular_bud Первый три шага уже были сделаны и все внимание досталось последним трем звеньям. Прежде чем думать, как преобразовывать и посылать сигналы из машины, необходимо выбрать микроконтроллер, который будет получать сигналы и управлять актуаторами.
@cellular_bud Самый простой вариант — это взять Arduino-совместимую платформу, хотя подойдет любой ATMega-based контроллер.

Arduino умеет читать Serial по USB, и задача сводилась к конвертации MIDI сигналов в протокол серийного порта.
@cellular_bud Есть открытый проект hairless-midiserial, который позволяет конвертировать MIDI для Serial устройств, причем как на вход, так и на выход. Удобство MIDI в целом заключается в том, что можно очень гибко управлять и соединять различные устройства.
projectgus.github.io/hairless-midis…
@cellular_bud Ну а дальше нужно доставать инструменты и начинать пробовать различные варианты конструкции.
Первый прототип надо было сделать для того, чтобы оценить возможные задержки и проблемы с синхронизацией.
@cellular_bud Сигнал шел в Ардуино, где в зависимости от высоты ноты отображался на разные выходы. Для тестов я собрал классическую схему на базе MOSFET. MOSFET это грубо говоря транзистор, который позволяет управлять большими токами; подавая управляющий сигнал.
Ну и какой Arduino проект без мигания LED. LED я поставил для того, чтобы в случае проблем понимать где они, идет ли сигнал из Arduino на вход MOSFET. В целом это выглядело так, котикам очень понравилось.
В целом не было существенных задержек и проблемы с подключением, но выяснились проблемы другого плана. Соленоиды не подходят для извлечения звука из нашего большого барабана, им не хватает силы удара. Сами соленоиды 5-вольтовые. Было решено поискать что-то помощнее.
Следующий выбор — это моторы, которые используются в автомобильных замках. Они достаточно мощные, с хорошей тягой, и дешевые. Но тут есть один момент. Мотор для двери автомобиля имеет не только ход вперед, но и ход назад.
Чтобы им бить, нужно выполнять очень быстро движение вперед-пауза-назад, а для вперед-назад уже одним MOSFET не обойдешься, так как надо менять направление тока для мотора (H-Bridge), чтобы он двигался в обе стороны en.wikipedia.org/wiki/H_bridge
Поэтому я купил motor shield для Arduino, совместимый с Adafruit. Такого типа, только на одном чипе.
Вот версия уже с моторным мостом и мотором от автомобильной двери.
А теперь об общей механике

Мигать LED на Ардуино это одно, но нам необходимо было построить систему, которая отыграет час концерта. И вот какие трудности имеются.

Жесткость конструкции.
Моторы достаточно мощные, и крепления, на которые они должны крепиться, должны выдержать вибрацию в течении часа.
Мы перепробовали 3 или 4 варианта конструкции, пока не нашли приемлемую. Сцепка с палочкой не должна быть жесткой, поскольку палочка должна иметь упругий отскок от барабана, а жесткая сцепка очень ухудшит звук. Мы использовали строительные стяжки.
Сама механика удара. Она состояла из быстрого движения вперед, паузы и движения назад. Но насколько большими должны быть быть интервалы этого движения? Это можно выяснить только опытным путем. Причем интервалы зависели от места крепления палочки, отображенных нот.
Мы определяли интервалы методом проб и ошибок. Чтобы было понятно, часть кода на Ардуино, отвечающая за удары, выглядела так.
Все моторы разные. Сами моторы имеют механический привод и поэтому дают достаточно ощутимый шум. Но шум становится намного сильнее, стоит мотору отклонится от оси удара, и это увеличивает риск поломки мотора. Учитывая вибрацию и силы удара, мы опять упирались в жесткость.
Сброс контроллера от паразитных помех. Поскольку вокруг будет множество устройств, кабелей, да и сами моторы дают шум.
Поскольку моторы управляются музыкой, то из этого можно было бы сделать секс игрушки. Поставил свою любимую музыку, например Имперский марш, и… МашинЛернинг может быть и таким @XOR0sha2wine
@XOR0sha2wine Окончательную сборку и репетиции проводили в музыкальной студии Русского Театра Эстонии.
Проблема репетиций с нейронной сетью еще и в том, что сама сеть недетерминирована. Взаимодействие происходит в режиме call-response, и каждый раз ответы сети будут разными — поэтому невозможно прорепетировать финальный вариант.
Для выступления мы также подготовили видеоряд. Изначально думали управлять видеопотоком тоже по MIDI, чтобы играть оверлеями и сводить видео, сгенерированное GAN — но мы не успевали сделать environment для второй машины и соединение с моделями.
Поэтому видео для каждой части выступления было заранее пререндерено; использовались GAN и управление оверлеями. Все синхронизировалось с главным midi_clock.
Для лайва я использовал VDMX5, через которую шел видео поток.
Незадолго до выступления сделали презентацию на телевидении.
И было очень необычно видеть плакаты на концертном зале Эстония (это как Большой театр для Москвы)
Само выступление проходило на сцене Sõltumatu Tantsu Lava, это небольшой зал (чуть больше 100 человек) в творческом квартале Теллискиви в комплексе Vaba Lava. Одна только установка и настройка всего оборудования заняла более 4 часов. Полностью подключились уже практически ночью.
И без света чек
Зал был полон, несмотря на позднюю рекламу. Я находился сбоку сцены и контролировал видео поток. Сам концерт удался отлично — то, как работала модель, как шел звук и видео. Зрители говорили, что их отправило в трип где-то на 10-15 минуте. :)
Все получилось очень атмосферно.
И на хабре в развёрнутом виде habr.com/ru/post/463237/
Missing some Tweet in this thread?
You can try to force a refresh.

Like this thread? Get email updates or save it to PDF!

Subscribe to AlexTavgen
Profile picture

Get real-time email alerts when new unrolls are available from this author!

This content may be removed anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!