Streamlining der Lerndaten-Generierung

In diesem Beitrag möchte ich zeigen wie die Erstellung der Lerndaten für das Deep-Learning Modell effizient durchgeführt werden kann. Anhand der unteren Abbildung werde ich alle Schritte kurz erläutern. Pipeline für Lerndaten Generierung

Virtual-Box

Es wurde sich dafür entschieden zwei weitere Instanzen der Virtuellen Maschiene zu erstellen da der Prozessor, trotz Zuweisung aller Kerne, nicht vollständig ausgelastet wurde. Es handelt sich dabei um eine 2-fach geklonte Virtuelle Maschine die zuvor mit den notwendigen Packages für makehuman ausgestatte wurde. Die drei Instanzen greifen auf die selbe virtuelle Festplatte zu und haben alle Zugriff auf einen gemeinsamen Sharedfolder, in den im weiteren Verlauf die Modelle abgespeichert werden. Die Verbindung mit dem Sharedfolder wird mit folgendem Befehl etabliert.

sudo mount -t vboxsf <Name des Ordners> <Pfad zum Ordner in diesem System>

In jeder Instanz wird anschließend eine modifizierte Variante des makehuman Scripts gestartet. Das Script wurde so verändert, dass ein zufälliger 32 Zeichen langer String als Dateinamen festgelegt wird. Dies war notwendig um eine parallele Ausführung zu ermöglichen und eine einfachere Wiederaufnahme der Generierung zu gewährleisten.

Batch-Script

Nun werden kontinuierlich Modelle im Sharedfolder abgelegt die nach und nach in Lerndaten umgewandelt werden können. Hierzu wird ein einfaches Batch-Script benutzt.

:loop
blender --background --python <Pfad zum Script für die Lerndaten Generierung>
<Pfad zum Powershellscript>/renameoutput.ps1
goto loop

Mit diesem Script wird Blender gestartet und das Script aus dem vorherigen Beitrag wird ausgeführt. Nachdem Blender beendet wurde wird ein Powershellscript gestartet welches die Outputdaten verändert. Die Dateinamen werden von Blender mit ‚0001‘ ergänzt um zu zeigen das dies der erste Frame ist. Diese Namenskonvetion konnte nicht abgeändert werden, mit dem Script werden die Dateinamen um die unnötige Erweiterung gekürzt. Im Anschluss wird Blender erneut gestartet. Das Blender-Script wurde erweitert so, dass alle vorhanden Modelle im Ordner erkannt und in Blender verarbeitet werden können.

Blender

Es gab einige Änderungen im Blender-Script die notwendig waren um einen reibungslosen Ablauf zu gewährleisten. Zunächst musste, da wie erwähnt die Namen der Modelle geändert wurden, der Aufruf der einzelnen Modelle abgeändert werden. Hierzu wurde eine Liste aller Dateien mit der Endung .mhx2 erstellt und durchiteriert. Nachdem eine Datei geladen und zu Lerndaten verabeitet wurde, wird sie verschoben in den Ordner ‚./done‘.

Eine weitere Änderung war notwendig damit Blender nicht immer mehr Arbeitsspeicher einfordert. Da die Modelle anscheinend nicht durch Entfernen in der Szene vollständig gelöscht werden sondern weiter im Arbeitspeicher gehalten werden, wird die Szene nach 500 geladenen Modellen neu geladen. So wird der Arbeitsspeicher geleert und das System kann so lange wie es beliebt laufen.

base_path = 'D:/makehumanModels/'

models = glob.glob(base_path + '*.mhx2')

for x, fp in enumerate(models):

    if (x % 500) == 0:
        bpy.ops.wm.open_mainfile(filepath='D:/Dropbox/Studium/Master Informatik/Master Thema/Grundprojekt/material/empty.blend')
        generateDepthmapNodes()

    else:
        clearScene()

    importModel(fp)
    generateInput(fp)
    generateOutput(fp)
    os.chdir(base_path)
    print('move ' + os.path.basename(fp) + ' '+  base_path + 'done')
    os.system('move ' + os.path.basename(fp) + ' ' + base_path + 'done')

Zusammenfassung

Es wurde gezeigt wie mehrere Instanzen unter VirtualBox genutzt werden können um parallel Modelle zu generieren. Mit einem Batch-Script wird Blender wiederholt aufgerufen um die Modelle weiter zu Lerndaten umzuformen. So entsteht eine Pipeline die einen 4 Kern-Prozessor vollständig auslastet und kontinuierlich Lerndaten generiert.
Mit dieser Konstruktion wird ca. alle 3 Sekunden ein Modell generiert und ungefähr im gleichen Zeitraum zu Lerndaten weiterentwickelt. In einer Nacht (ca. 9 Std) wurden so 12.610 Modelle generiert und weiterverarbeitet. In Zukunft werden die Modelle noch differenzierter erstellt werden und diese Pipeline wird dazu beitragen authentische Modelle in entsprechender Menge zu erzeugen um bessere Ergebnisse für das Deep-Learning Modell zu ermöglichen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.