Skip to content

Interpolation

Alexander Melde edited this page Dec 7, 2020 · 3 revisions

Ablauf der Interpolation

In diesem Kapitel wird gezeigt, wie mithilfe des coms-projects [RP17] innerhalb einer Objekt-Klasse zwischen zwei Objekten interpoliert werden kann. In der darunter stehenden Erklärung werden weitere Details sowie die hierfür notwendigen Befehle beschrieben.

Ablauf_Interpolation

Quickstart: Interpolation mit dem coms-project

  1. Einrichten der Entwicklungsumgebung
  2. Passenden Ordner auswählen cd lfm_coms
  3. Docker-Container bauen: ./build.sh
  4. Docker-Container ausführen: ./run.sh
  5. Training & Interpolation: cd include && ./interpolation.sh

Im Folgenden werden die einzelnen Schritte des Skripts ./interpolation.sh näher beschrieben.

1) Training des 3DGANs

In einem ersten Schritt wird unser 3DGAN trainiert. Als Trainingsdaten wurden die 3D-Objekte des 3D ShapeNets-Projekts der Princeton University verwendet. Das trainierte Modell unseres GANs wird alle 200 Epochen abgespeichert, um das Training später von diesen Checkpoints fortsetzen zu können. Ein weiterer Vorteil des Speicherns des trainierten Modells ist, dass die weiteren Schritte dieses Modell einfach laden können, sodass nicht bei jeder Inferenz ein Training erforderlich ist.

Zum Aufruf des Trainings kann im Docker-Image „lfm_coms“ der folgende Befehl verwendet werden:

cd /root/interpolation/chairs && python 3dgan_mit_biasfree.py --train True

Um von einem bestehenden Checkpoint aus zu trainieren, sollte ein zusätzlicher Parameter an das Python-Skript übergeben werden:

cd /root/interpolation/chairs && python 3dgan_mit_biasfree.py --train True --ckpath models/biasfree_tfbn.ckpt-4200

2) Generieren mehrerer zufälliger Zufallsvektoren und deren zugehörigen 3D-Objekte

Beim Testen unseres GANs werden vom Generator 3D-Objekte generiert. Als Eingangswert für das Testen werden zufällig generierte Vektoren („Z-Vektoren“) verwendet. Wir speichern sowohl die Z-Vektoren als auch die 3D-Objekte ab, um später mit diesen weiterarbeiten zu können.

Der Algorithmus generiert in einem ersten Schritt die Z-Vektoren und verwendet diese anschließend, um deren zugehörigen 3D-Objekte zu generieren.

In der getesteten Implementierung werden die Zufallsvektoren direkt vor dem Test, im gleichem Skript generiert. Zur Ausführung des zweiten Schrittes ist daher nur ein Befehl erforderlich:

cd /root/interpolation/chairs && python 3dgan_mit_biasfree.py --ckpath models/biasfree_tfbn.ckpt-4200 --savename lfmTest_4200

3) Extrahieren von zwei Zufallsvektoren

Aus den generierten Zufallsvektoren, die jeweils ein individuelles 3D-Modell repräsentieren, können nun zwei beliebige ausgesucht werden, zwischen denen im Folgenden interpoliert wird.

Zur Auswahl geeigneter Beispiele können die Zufallsvektoren mit MeshLab als 3D-Modelle visualisiert werden:

python /root/visualize.py "/root/coms4995-project/chairs/output/lfmTest_4200.npy"

Wenn zwei passende Vektoren gefunden wurden, sollten deren Indizes notiert und im nächsten Schritt verwendet werden.

Beim Experimentieren und Visualisieren verschiedener Zufallsvektoren ist aufgefallen, das sich nicht alle Paare von Zufallsvektoren gleich gut zur Interpolation eignen. Bei einzelnen Kombination kam es zu einer vermehrten Bildung von Voxel-Artefakten am Rand des 3D-Raums. Die Ursache hierfür konnte im Rahmen dieser Arbeit nicht abschließend geklärt werden. Eine moch nicht begründete Vermutung ist, dass sich Vektoren, die am Rand der Wahrscheinlichkeitsverteilung erzeugt wurden, weniger gut für die Interpolation eignen.

4) Generieren von neuen Zufallsvektoren, die zwischen den beiden extrahierten Zufallsvektoren interpolieren

Mithilfe des Interpolations-Skripts können die Zwischenschritte zwischen zwei Zufallsvektoren berechnet werden.

Angenommen, wir haben in Schritt 3) die Vektoren zwei und vier ausgewählt, sieht der Befehlsaufruf wie folgt aus:

cd /root/coms4995-project && python interpolation.py -p chairs/output -n "lfmTest_4200" -f "2" -t "4"

In der Datei chairs/output/lfmTest_4200_intpol_2_4_zvectors.npy werden nun die interpolierten Zufallsvekoren gespeichert.

5) Generieren von 3D-Objekten anhand der interpolierenden Zufallsvektoren

Um die, den neuen Z-Vektoren zugehörigen, 3D-Modelle zu generieren ist nur noch ein Befehl notwendig. Mit diesem wird der Generator mit den interpolierten Z-Vektoren initialisiert, sodass interpolierende 3D-Modelle generiert werden:

cd /root/coms4995-project/chairs && python 3dgan_mit_biasfree.py --ckpath "models/biasfree_tfbn.ckpt-4200" --interpolatd_zs "output/lfmTest_4200_intpol_2_4_zvectors.npy" --savename "lfmTest_4200_intpol_2_4"

Die finalen 3D-Modelle werden hierdurch in die Datei lfmTest_4200_intpol_2_4__interpolated_results.npy gespeichert.

Visualisierung der Ergebnisse:

Zur Visualisierung können die auf der Seite „Entwicklungsverlauf“ beschriebenen Methoden zur Visualisierung von .npy-Dateien verwendet werden:

#meshlab (interactive)
python /root/visualize.py "/root/coms4995-project/chairs/output/lfmTest_4200_intpol_2_4__interpolated_results.npy"

#blender (video)
blender -b --python  blenderLoadNpy.py -- lfmTest_4200_intpol_2_4__interpolated_results.npy

Blender Visualisierung model.mp4

1912chair02_14600_intpol_2_4__interpolated_results.npy lfmTest4200_intpol_2_4__interpolated_results.npy
animation animation
2112chair01_36800_intpol_2_5__interpolated_results.npy (Simpler Holzstuhl 2 -> Schreibtischstuhl 5) 2012chair01_36000_intpol_9_10__interpolated_results.npy (Schreibtischstuhl 9 -> Holzstuhl 10)
animation animation