Hallo Habr.
In diesem Beitrag geht es darum, wie wir neuronale Netze in das wirkliche Leben gebracht haben. Wenn Sie angewandte Robotik und Technik mögen oder Neuronen mögen oder eine LED auf Arduin blinken lassen, wird es interessant sein. Dies ist jedoch eine Geschichte darüber, wie man viele verschiedene Komponenten und Technologien zu einem Ganzen zusammenfügt und daraus eine Idee macht. Details unter dem Schnitt.

Vor anderthalb Jahren haben wir ein Projekt durchgeführt, bei dem wir wiederkehrende neuronale Netze zur Erzeugung von Musik verwendeten.
Es beschreibt, wie es war. In diesem Jahr veranstaltete Eesti Kontsert (die Zielinstitution, der größte Veranstalter von Aufführungen im Land) eine Reihe von Konzerten "Technologie und Musik", und wir wurden eingeladen, im Rahmen dieser Reihe eine Aufführung zu geben. Wir sind die
MODULSHTEIN- Gruppe
(Alexander Zhedelev, Marten Altrov und Alexey Seminikhin) sowie Alexander Potuzhny, der im Maschinenbau tätig war, und ich, Alexander Tavgen, Softwarearchitekt von Playtech. Wenn im letzten Projekt alles in einer Maschine passiert ist und die Signale der Modelle auf Samples angezeigt wurden, besteht die Idee dieses Projekts darin, die Signale herauszubringen und sie mit einem Live-Instrument zu verbinden. Und da wir Modelle verwenden, um Rhythmus zu erzeugen, ist das Instrument, auf dem die Maschine spielt, eine Trommel.
Die Trommel, die wir verwenden werden, ist Teil der Requisiten, die von der audiovisuellen
IDEM -Präsentation übrig geblieben sind.

Eine kleine Einführung
Musik hat wie Sprache, insbesondere gesprochene Sprache, eine vorübergehende Struktur. Dies ist der Rhythmus, die Intervalle, die Dynamik. Wenn wir eine Musiksequenz als Strom bestimmter Symbole simulieren, sind zur Simulation dieser zeitlichen Struktur wiederkehrende neuronale Netze geeignet. Der berühmte
Artikel von Andrej Karpathy ist eine großartige Einführung in die Prinzipien hinter wiederkehrenden neuronalen Netzen, und es gibt einige großartige Beispiele. Was ist das einzige Netzwerk, das auf Linux-Quellcode trainiert ist? Oder ein
Modell, das in Donald Trumps Reden geschult wurde.Das MIDI-Protokoll ist ideal für die Darstellung von Musik als Zeichenstrom. Daher müssen wir die MIDI-Signale in den Eingang für Modelle konvertieren und den Ausgang des Modells wieder in MIDI umwandeln. Und dann kommt das Magenta-Projekt von Google zur Rettung, das 2016 angekündigt wurde.
Im Wesentlichen bietet Magenta eine MIDI-Schnittstelle für TensorFlow-Modelle. Virtuelle MIDI-Ports werden grob gesagt für die Anrufbeantwortung erstellt - Ein- und Ausgabe. Sie können mehrere parallele Ports ausführen. Sie können ein TensorFlow-Modell an jedes Portpaar anschließen. Die sogenannte Bundle-Datei ist der Trainingsprüfpunkt und die Diagrammmetadaten von TensorFlow. So können Sie den Interaktionsprozess kurz beschreiben.

Ich habe es
hier ausführlich beschrieben.
Wenn wir jedoch im vorherigen Projekt MIDI-Signale von den Modellen zu den Samples angezeigt haben, müssen wir sie diesmal ausgeben und an die Motoren anschließen. Das heißt, alles kann irgendwie so dargestellt werden: Tensorflow-Magenta-MIDI-Serial-Microcontroller-Aktoren. Die ersten drei Schritte wurden bereits unternommen und die ganze Aufmerksamkeit wurde auf die letzten drei Links gerichtet.
Bevor Sie überlegen, wie Sie Signale von der Maschine konvertieren und senden, müssen Sie einen Mikrocontroller auswählen, der Signale empfängt und die Aktuatoren steuert. Am einfachsten ist es, eine Arduino-kompatible Plattform zu verwenden, obwohl jeder ATMega-basierte Controller geeignet ist.
Arduino kann Serial über USB lesen, und die Aufgabe bestand darin, MIDI-Signale in das Protokoll der seriellen Schnittstelle umzuwandeln. Es gibt ein offenes Projekt hairless-midiserial
projectgus.imtqy.com/hairless-midiserial , mit dem Sie MIDI sowohl für die Ein- als auch für die Ausgabe in serielle Geräte konvertieren können. Der Komfort von MIDI als Ganzes besteht darin, dass Sie verschiedene Geräte sehr flexibel steuern und verbinden können.

Nun, dann müssen Sie die Werkzeuge besorgen und verschiedene Designoptionen ausprobieren.
Der erste Prototyp musste erstellt werden, um mögliche Verzögerungen und Probleme bei der Synchronisation zu bewerten.
Das Signal ging an Arduino, wo es je nach Höhe der Noten an verschiedenen Ausgängen angezeigt wurde. Für Tests habe ich eine klassische MOSFET-basierte Schaltung zusammengestellt. Der MOSFET ist ungefähr ein Transistor, mit dem Sie hohe Ströme steuern können. Wenn Sie ein Steuersignal geben, können Sie den Transistor öffnen und schließen.

Nun, was für ein Arduino-Projekt ist ohne blinkende LED. Ich stelle die LED so ein, dass ich bei Problemen verstehe, wo sie sich befinden, ob das Signal vom Arduino zum MOSFET-Eingang geht. Im Allgemeinen sah es so aus, die Katzen mochten es wirklich.
Im Allgemeinen gab es keine wesentlichen Verzögerungen und Verbindungsprobleme, aber Probleme eines anderen Plans wurden geklärt. Magnetspulen eignen sich nicht zum Extrahieren von Schall aus unserer großen Trommel, es fehlt ihnen die Schlagkraft. Die 5-Volt-Magnete selbst. Es wurde beschlossen, nach etwas Mächtigerem zu suchen. Die nächste Wahl sind die Motoren, die in Autoschlössern verwendet werden. Sie sind stark genug, mit guter Traktion und billig.

Aber es gibt einen Punkt. Der Motor für die Autotür hat nicht nur einen Vorwärtshub, sondern auch einen Rückwärtshub. Um sie zu schlagen, müssen Sie eine sehr schnelle Vorwärts-Pause-Rückwärts-Bewegung ausführen, aber für Vorwärts-Rückwärts können Sie nicht nur einen MOSFET ausführen, da Sie die aktuelle Richtung für den Motor (
H-Brücke ) ändern müssen, damit er sich in beide Richtungen bewegt, also habe ich gekauft Motorschild für Arduino, kompatibel mit Adafruit. Dieser Typ nur auf einem Chip.

Hier ist die Version bereits mit einer Motorbrücke und einem Motor von einer Autotür.
Und jetzt zur allgemeinen Mechanik
Das Blinken von LEDs auf Arduino ist eine Sache, aber wir mussten ein System bauen, das die Stunde des Konzerts spielt. Und hier sind die Schwierigkeiten.
- Starrheit eines Designs. Die Motoren sind stark genug und die Halterungen, an denen sie montiert werden müssen, müssen eine Stunde lang Vibrationen standhalten.

Wir haben 3 oder 4 Designoptionen ausprobiert, bis wir eine akzeptable gefunden haben. Die Anhängerkupplung mit dem Steuerknüppel sollte nicht starr sein, da der Steuerknüppel einen elastischen Rückprall von der Trommel haben sollte und eine starre Anhängerkupplung den Klang stark verschlechtern wird. Wir haben Estriche gebaut.
- Die Mechanik des Aufpralls selbst. Es bestand aus schneller Vorwärtsbewegung, Pause und Rückwärtsbewegung. Aber wie groß sollten die Intervalle dieser Bewegung sein? Dies kann nur empirisch ermittelt werden. Darüber hinaus hingen die Intervalle vom Ort der Befestigung des Sticks ab, die angezeigten Notizen. Wir haben die Intervalle durch Versuch und Irrtum bestimmt. Um es klar zu machen, sah der Teil des Arduino-Codes, der für die Schläge verantwortlich ist, so aus.

- Alle Motoren sind unterschiedlich. Die Motoren selbst haben einen mechanischen Antrieb und geben daher ein ziemlich wahrnehmbares Geräusch ab. Das Geräusch wird jedoch viel stärker, wenn der Motor von der Aufprallachse abweicht, und dies erhöht das Risiko eines Motorausfalls. Angesichts der Vibrations- und Aufprallkräfte stützten wir uns erneut auf die Steifigkeit der Struktur. Alexander Potuzhny hat hier viel getan, um die Spielpaarungen zu verbessern.
- Setzen Sie den Controller auf Störstörungen zurück. Da es viele Geräte geben wird, geben Kabel und die Motoren selbst Geräusche.
Da die Motoren von Musik angetrieben werden, wäre es möglich, daraus Sexspielzeug zu machen. Er inszenierte seine Lieblingsmusik wie den kaiserlichen Marsch und ...
Versammlung und Probe
Die Endmontage und die Proben wurden im Musikstudio des Russischen Theaters von Estland durchgeführt.

Das Problem bei Proben mit einem neuronalen Netzwerk ist auch, dass das Netzwerk selbst nicht deterministisch ist. Die Interaktion findet in einem Anrufbeantwortungsmodus statt, und jedes Mal, wenn die Netzwerkantworten unterschiedlich sind, ist es unmöglich, die endgültige Version zu proben.
Musikkonzept
Für die Aufführung haben wir auch ein Video vorbereitet. Ursprünglich wollten wir den Videostream auch über MIDI steuern, um Overlays abzuspielen und das vom GAN erzeugte Video zu reduzieren. Wir hatten jedoch keine Zeit, eine Umgebung für die zweite Maschine zu erstellen und eine Verbindung zu den Modellen herzustellen. Daher wurde das Video für jeden Teil der Aufführung vorgerendert. GAN und Overlay-Management wurden verwendet. Alles synchronisiert mit der Haupt-Midi_clock.
Für Live habe ich VDMX5 verwendet, durch das der Videostream ging.

Kurz vor der Aufführung hielten sie eine Präsentation im Fernsehen.
Und es war sehr ungewöhnlich, Plakate im estnischen Konzertsaal zu sehen (dies ist wie das Bolschoi-Theater für Moskau).


Leistung
Die Aufführung selbst fand auf der Bühne von Sõltumatu Tantsu Lava statt. Dies ist ein kleiner Saal (etwas mehr als 100 Personen) im Kreativviertel von Telliskivi im Vaba Lava-Komplex. Die Installation und Einrichtung aller Geräte dauerte mehr als 4 Stunden. Schon fast nachts voll verbunden.
Und schon ohne Licht.
Die Halle war trotz der späten Werbung voll. Ich war auf der Seite der Bühne und kontrollierte den Videostream. Das Konzert selbst war ein großer Erfolg - wie das Modell funktionierte, wie Ton und Video liefen. Das Publikum sagte, dass sie in 10-15 Minuten irgendwohin zur Reise geschickt wurden. :) Alles war sehr atmosphärisch.




www.Audiokinetica.comAleksandr Tavgen - IT-Lösung, Softwareentwicklung
Aleksandr Potužnoi - technischer Support
Modulshtein:
www.Modulshtein.comAuf spotifyAleksandr Žedeljov alias FAERSHTEIN - Gitarre, Ableton, analoger Synthesizer
Marten Altrov - Klarinette, Bassklarinette
Aleksei Semenihhin alias DJ Bandit - Fx, Samples, Scratches