Experiment 2 angefangen
This commit is contained in:
131
.obsidian/workspace.json
vendored
131
.obsidian/workspace.json
vendored
@@ -4,41 +4,37 @@
|
|||||||
"type": "split",
|
"type": "split",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "5aebae9c95df8385",
|
"id": "5b2e8ee5ed97f289",
|
||||||
"type": "tabs",
|
"type": "tabs",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "5160c41cbad83466",
|
"id": "59d92020d0753901",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "Was ich so gemacht habe/Arbeitszeit und so.md",
|
"file": "Paperung/Experimente/Experiment 2 - NN performance.md",
|
||||||
"mode": "source",
|
"mode": "source",
|
||||||
"source": false
|
"source": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "Arbeitszeit und so"
|
"title": "Experiment 2 - NN performance"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "13fe538d7f1e4bdb",
|
|
||||||
"type": "tabs",
|
|
||||||
"children": [
|
|
||||||
{
|
{
|
||||||
"id": "dedc0e08f05953c2",
|
"id": "dbaf33142b3948a4",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "pdf",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "Prewrite/Compositor Rewrite.md",
|
"file": "Paperung/Augenfeatures/Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf",
|
||||||
"mode": "source",
|
"page": 262,
|
||||||
"source": false
|
"left": -5,
|
||||||
|
"top": 415,
|
||||||
|
"zoom": 2.727731092436975
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file-text",
|
||||||
"title": "Compositor Rewrite"
|
"title": "Wisetchat - Description-Based Visualisation of Ethnic Facial Types"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -64,7 +60,7 @@
|
|||||||
"autoReveal": false
|
"autoReveal": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-folder-closed",
|
"icon": "lucide-folder-closed",
|
||||||
"title": "Files"
|
"title": "Dateiexplorer"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -180,13 +176,13 @@
|
|||||||
},
|
},
|
||||||
"left-ribbon": {
|
"left-ribbon": {
|
||||||
"hiddenItems": {
|
"hiddenItems": {
|
||||||
"switcher:Open quick switcher": false,
|
"switcher:Schnellauswahl öffnen": false,
|
||||||
"graph:Open graph view": false,
|
"graph:Graph-Ansicht öffnen": false,
|
||||||
"canvas:Create new canvas": false,
|
"canvas:Neuen Canvas erstellen": false,
|
||||||
"daily-notes:Open today's daily note": false,
|
"daily-notes:Heutige Notiz öffnen": false,
|
||||||
"templates:Insert template": false,
|
"templates:Vorlage einfügen": false,
|
||||||
"command-palette:Open command palette": false,
|
"command-palette:Befehlspalette öffnen": false,
|
||||||
"bases:Create new base": false,
|
"bases:Neue Base erstellen": false,
|
||||||
"obsidian-git:Open Git source control": false,
|
"obsidian-git:Open Git source control": false,
|
||||||
"obsidian-excalidraw-plugin:New drawing": false,
|
"obsidian-excalidraw-plugin:New drawing": false,
|
||||||
"pdf-plus:PDF++: Toggle auto-copy": false,
|
"pdf-plus:PDF++: Toggle auto-copy": false,
|
||||||
@@ -194,52 +190,53 @@
|
|||||||
"pdf-plus:PDF++: Toggle auto-paste": false
|
"pdf-plus:PDF++: Toggle auto-paste": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"active": "5160c41cbad83466",
|
"active": "59d92020d0753901",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"Prewrite/Compositor Rewrite.md",
|
|
||||||
"Attachments/Images/Comparing_three_images.png",
|
|
||||||
"Attachments/Images/final_skin_shader.png",
|
|
||||||
"Attachments/Images/final_skin_shader.png.0.pdnSave",
|
|
||||||
"Attachments/Images/final_skin_shader.tif",
|
|
||||||
"Attachments/Images/final_compositing_tree.png",
|
|
||||||
"Attachments/Images/final_compositing_tree.png.0.pdnSave",
|
|
||||||
"Attachments/Images/final_compositing_tree.tif",
|
|
||||||
"Attachments/Images/final_compositing_tree",
|
|
||||||
"Attachments/Images/Untitled",
|
|
||||||
"Attachments/Untitled",
|
|
||||||
"Was ich so gemacht habe/Arbeitszeit und so.md",
|
|
||||||
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-nostep-cubic.png",
|
|
||||||
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-step-cubic.png",
|
|
||||||
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-step-linear.png",
|
|
||||||
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-nostep-linear.png",
|
|
||||||
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-step-closest.png",
|
|
||||||
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-nostep-closest.png",
|
|
||||||
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-noaa-cubic.png",
|
|
||||||
"Attachments/Images/AntialisingAndInterpolateMasks",
|
|
||||||
"Untitled.md",
|
|
||||||
"Zu recherchierende Dinger.md",
|
|
||||||
"Zeitplan.excalidraw.md",
|
|
||||||
"TODO.md",
|
|
||||||
"Motivator.excalidraw.md",
|
|
||||||
"Modellieren in Blender.md",
|
|
||||||
"Linux.md",
|
|
||||||
"Exposé.md",
|
|
||||||
"Drawing 2025-10-31 18.39.54.excalidraw.md",
|
|
||||||
"Bekerman et al. - 2014 - Variations in Eyeball Diameters of the Healthy Adults.pdf",
|
|
||||||
"Prewrite/Hair Node System für Wimpern und Augenbrauen.md",
|
|
||||||
"Prewrite/2. Grundlagen.md",
|
"Prewrite/2. Grundlagen.md",
|
||||||
"Prewrite/1. Einleitung.md",
|
"Paperung/Experimente/Experiment 2 - NN performance.md",
|
||||||
"Paperung/Zusammenfassung Facial Features.md",
|
"Paperung/Experimente/Experiment 1 - Renderzeit.md",
|
||||||
|
"Linux.md",
|
||||||
|
"Paperung/Augenfeatures/Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf",
|
||||||
|
"Prewrite/Änderungen an Szene und Code/Compositor Rewrite.md",
|
||||||
|
"Paperung/Medizinischer Hintergrund/Äquator_Auge.avif",
|
||||||
"Paperung/Größe des Augapfels.md",
|
"Paperung/Größe des Augapfels.md",
|
||||||
"Paperung/Genome-wide mapping of global-to-local genetic effects on human facial shape.md",
|
"Untitled.base",
|
||||||
"Paperung/Facial modeling and measurement based upon homologous topographical features.md",
|
"Prewrite/Änderungen an Szene und Code/Random Änderungen.md",
|
||||||
"Paperung/Drawing 2025-11-30 22.08.28.excalidraw.md",
|
"Prewrite/Änderungen an Szene und Code/Hair Node System für Wimpern und Augenbrauen.md",
|
||||||
|
"Prewrite/Änderungen an Szene und Code",
|
||||||
|
"Prewrite/Untitled.md",
|
||||||
|
"Paperung/Augenfeatures/Augenfeatures.md",
|
||||||
|
"Paperung/Experimente",
|
||||||
|
"Drawings/cropped_Bekerman et al. - 2014 - Variations in Eyeball Diameters of the Healthy Adults.md",
|
||||||
|
"Attachments/Video_Augenlider_und_vertikale_Blickrichtung_2.mp4",
|
||||||
|
"Attachments/Video_Augenlider_und_vertikale_Blickrichtung.mp4",
|
||||||
"Paperung/Medizinischer Hintergrund/René - 2006 - Update on orbital anatomy.pdf",
|
"Paperung/Medizinischer Hintergrund/René - 2006 - Update on orbital anatomy.pdf",
|
||||||
"Paperung/Medizinischer Hintergrund/Der Periorbitalbereich.excalidraw.md",
|
"Paperung/Medizinischer Hintergrund/Der Periorbitalbereich.excalidraw.md",
|
||||||
"1_Trash/CompositorUp0date/Compositor.excalidraw.md",
|
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-noaa-linear.png",
|
||||||
"Notizen/Untitled 1.md",
|
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-noaa-cubic.png",
|
||||||
"Notizen/Untitled.md",
|
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-noaa-closest.png",
|
||||||
|
"Attachments/Images/CryptoMatte/Blender_2.81_splash_screen-render.jpg",
|
||||||
|
"Eyelid_Mask.png",
|
||||||
"Notizen/Compositor.md",
|
"Notizen/Compositor.md",
|
||||||
"Notizen/16.10.2025.md"
|
"Attachments/Images/final_compositing_tree.png",
|
||||||
|
"Paperung/Augenfeatures",
|
||||||
|
"Attachments/Images/final_skin_shader.png",
|
||||||
|
"Attachments/Images/CryptoMatte/cryptomatte_masked_image.png",
|
||||||
|
"Attachments/Images/CryptoMatte/cryptomatte_matte.png",
|
||||||
|
"Attachments/Images/CryptoMatte",
|
||||||
|
"Attachments/Images/AntialisingAndInterpolateMasks",
|
||||||
|
"1_Trash/CompositorUp0date/Compositor.excalidraw.md",
|
||||||
|
"Drawing 2025-10-31 18.39.54.excalidraw.md",
|
||||||
|
"Exposé.md",
|
||||||
|
"Modellieren in Blender.md",
|
||||||
|
"Motivator.excalidraw.md",
|
||||||
|
"Paperung/Zusammenfassung Facial Features.md",
|
||||||
|
"Was ich so gemacht habe/Arbeitszeit und so.md",
|
||||||
|
"Paperung/Drawing 2025-11-30 22.08.28.excalidraw.md",
|
||||||
|
"Paperung/Untitled.md",
|
||||||
|
"Paperung/Facial modeling and measurement based upon homologous topographical features.md",
|
||||||
|
"Zu recherchierende Dinger.md",
|
||||||
|
"Untitled.md",
|
||||||
|
"TODO.md"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
25
Linux.md
25
Linux.md
@@ -1,3 +1,28 @@
|
|||||||
# WSL
|
# WSL
|
||||||
1. Install Blender `sudo snap install blender --classic` (--classic hebt die isolation auf, die normalerweise bei snap verwendet wird)
|
1. Install Blender `sudo snap install blender --classic` (--classic hebt die isolation auf, die normalerweise bei snap verwendet wird)
|
||||||
2. Install UV `curl -LsSf https://astral.sh/uv/install.sh | sh`
|
2. Install UV `curl -LsSf https://astral.sh/uv/install.sh | sh`
|
||||||
|
|
||||||
|
|
||||||
|
# Auf dem server
|
||||||
|
## Blender installieren
|
||||||
|
```sh
|
||||||
|
# 1. Blender herunterladen
|
||||||
|
wget https://ftp.halifax.rwth-aachen.de/blender/release/Blender5.0/blender-5.0.1-linux-x64.tar.xz
|
||||||
|
# 2. Blender-Archiv entpacken
|
||||||
|
sudo tar -xvf blender-5.0.1-linux-x64.tar.xz
|
||||||
|
# 3. Inhalt des entpackten Ordners in den opt-Ordner schieben
|
||||||
|
sudo mv blender-5.0.1-linux-x64 /opt/blender-5.0.1
|
||||||
|
# 4. Verknüpfung in /usr/local/bin erstellen
|
||||||
|
sudo ln -sf /opt/blender-5.0.1/blender /usr/local/bin/blender5
|
||||||
|
# 5. Abhangägkeiten installieren
|
||||||
|
sudo apt install libxrender1 libxfixes3 libxi6 libsm6 libgl-dev
|
||||||
|
|
||||||
|
## GPU Treiber instalieren:
|
||||||
|
# 1. kernel header installieren
|
||||||
|
sudo apt install linux-headers-$(uname -r)
|
||||||
|
# 2. Nvidia Treiber installieren (580 ist der Legacy Treiber, der die GPU auf dem Server noch unterstützt (Tesla V100))
|
||||||
|
sudo apt install nvidia-driver-580
|
||||||
|
```
|
||||||
|
(das selbe für Blender 4.4.3) (https://ftp.halifax.rwth-aachen.de/blender/release/Blender4.4/blender-4.4.3-linux-x64.tar.xz)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
Für das Modellieren wurde das LoopTools-Plugin verwendet
|
~~Für das Modellieren wurde das LoopTools-Plugin verwendet~~
|
||||||
|
|
||||||
|
Für Screenshots von NodeTrees wurde https://extensions.blender.org/add-ons/node-tree-screenshot/ verwendet
|
||||||
|
|||||||
65
Paperung/Augenfeatures/Augenfeatures.md
Normal file
65
Paperung/Augenfeatures/Augenfeatures.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
Quellen:
|
||||||
|
1. Description-based visualisation of ethnic facial types
|
||||||
|
|
||||||
|
# Einleitung
|
||||||
|
In diesem Abschnitt werden die visuellen Merkmale des periorbitalbereichts Beschrieben, die im Rahmen dieser Arbeit modelliert wurden. Als Grundlage für die Auswahl der Features gilt die Arbeit von Wisetchat (1). Während ihre Arbeit eine Menge von Parametern definiert mit denen das gesamte Gesicht kontrolliert werden kann, konzentrieren wir uns für diese Arbeit auf den Periorbitalbereich, also die Region um das Auge herum.
|
||||||
|
|
||||||
|
# Referenzbilder
|
||||||
|
![[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=112&rect=108,358,551,763&color=yellow|p.112]]
|
||||||
|
![[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=113&rect=108,244,553,671&color=yellow|p.113]]
|
||||||
|
|
||||||
|
|
||||||
|
# Augenmerkmale
|
||||||
|
Im Vergleich zur Gesichtsmitte und der Kieferregion gibt es besonders im Nasen-, Mund- und Augenbereich eine höhere Dichte an visuellen Merkmalen ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=108&selection=26,0,31,44&color=yellow|p.108]]).
|
||||||
|
|
||||||
|
TODO: Dort ist ein Bild, dass für vier Ethnische Gruppen für jeweils Männliche, Weiblich und Beide Geschlechter Durchscnittsbilder zeigt. Wenn das für uns interessant ist, dann sollten wird das hier auch reinschreiben.
|
||||||
|
|
||||||
|
Die Tabelle zeigt die modellierten Merkmale im Augenbereich. Das Bild zeigt den Ort dieser Features. Hinweis, es ist auf ein Durchschnittsbild von EAS (Ostasiaten), da dort die Epikantusfalte vorhanden ist, welche bei Afrikanern nur bedingt und bei Europäern praktisch nicht vorhanden ist. Andere Features sind bei allen ethnischen Gruppen Vorhanden, variieren aber in ihrer Ausprägung. Daher ist die Differenzierung zwischen verschiedenen ethnischen Gruppen nicht anhand des Vorhanden- oder Abwesend-seins bestimmter Merkmale möglich ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=110&selection=35,72,40,41&color=yellow|p.110]]).
|
||||||
|
![[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=111&rect=110,205,550,711|Wisetchat - Description-Based Visualisation of Ethnic Facial Types, p.111]]
|
||||||
|
|
||||||
|
TODO: Für all diese Features gucken, ob es Bilder auf Google gibt, die sie gut zeigen (insbesondere die Furchen (Sulcus)). Im Paper sind Bilder, auf denen man teilweise die Features sehen kann.
|
||||||
|
|
||||||
|
TODO: Wir brauchen wohl auch ein paar Features von den umliegenden Regionen
|
||||||
|
|
||||||
|
Es wird ein Basis Mesh verwendet, das eine generische Gesichtsform hat. Dabei ist wichtig hervorzuheben, dass dieses Modell keinen Ethnotypen oder Durchschnitt eines Ethnotypen darstellt. ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=124&selection=28,0,37,10&color=yellow|p.124]])
|
||||||
|
|
||||||
|
Es gibt verschiedene Arten von Merkmalen. Einige Merkmale sind einfach dimensional, wie z. B. die Breite der Lidspalte (PF_width). Andere Merkmale definieren die Position von bestimmten Eigenschaften, wie z.B. die Position des Endokantus (ENC). Des weiteren gibt es Merkmale, die weder die Position noch das Ausmaß, sondern die Form eines Merkmals beschreiben. Das sind Kurven, Falten, hohle Regionen, und Ausstülpungen oder Ausbuchtungen. Diese Merkmale variieren in ihrer Ausprägung. ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=126&selection=43,14,45,11&color=yellow|p.126]])
|
||||||
|
|
||||||
|
Einige Merkmale, wie z. B. die Epikantusfalte, haben nur ein Extremum. Minimal ist sie nicht vorhanden und maximal ist sie vollständig ausgeprägt. Wisetchat modellieren diese Merkmale in einem Wertebereich von 0 (nicht vorhanden) bis 1 (maximal ausgeprägt) ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=126&selection=57,81,59,29&color=yellow|p.126]]). Dem gegenüber stehen die dimensionalen, Positionalen und Form-Merkmale mit zwei Extrema. Diese Merkmale sind immer vorhanden und variieren nur in ihrer Ausprägung. Wisetchat modelliert dieses Merkmale in einem Bereich von -1 bis 1 ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=126&selection=70,16,70,32&color=yellow|p.126]]). Wichtig ist anzumerken, dass der Mittelpunkt, der bei 0 liegt, wahrscheinlich mit keinem statistischen Mittelwert entspricht.
|
||||||
|
|
||||||
|
|
||||||
|
# Modellierung:
|
||||||
|
Die Form der Augenregion wird durch ein subdivision Mesh Surface repräsentiert. ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=127&selection=11,0,11,63&color=yellow|p.127]])
|
||||||
|
Je simpler das basis Mesh ist, desto glatter ist die resultierende Oberfläche. Allerdings muss sichergestellt werden, dass im Basis Mesh genügen Detail (also Vertices) vorhanden ist, damit alle Merkmale (Furchen, Falten usw.) modelliert werden können.
|
||||||
|
|
||||||
|
Die Grundlegende Form des Gesichts wird durch die zugrundeliegende Knochenstruktur gegeben (Siehe das relevante Kapitel). Durch die darüber liegenden weichen Gewebe entsteht eine glatte Oberfläche ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=127&selection=64,48,64,88&color=yellow|p.127]]).
|
||||||
|
|
||||||
|
In der Animation von digitalen Charakteren werden häufig Blend Shapes (Shape-Keys) verwendet, um die feinen Details der Mimik zu modellieren. Digitale Animationswerkzeuge wie Blender liefern Werkzeuge, um solche Blend Shapes zu erstellen ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=131&selection=35,1,51,26&color=yellow|p.131]]). Bei Blend Shapes, oder Shape-Keys wie sie in Blender genannt werden, gibt es eine Basis-Form (Base Shape) und eine Reihe von Ziel Formen (Target Shapes). Diese Zielformen haben die selbe Topologie wie die Basisform, allerdings sind einzelne Vertices an andere Positionen verschoben worden. ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=132&selection=19,0,19,85&color=yellow|p.132]])
|
||||||
|
|
||||||
|
TODO: Bla bla das ist alles Grundlagen
|
||||||
|
|
||||||
|
Durch die Lineare Kombination von Blend Shapes kann in Regionen, in denen der Einfluss mehrerer Blend Shapes überlappt, unerwünschtes Verhalten auftreten, indem ein Vertex zu stark verschoben wird und ein verzerrtes Ergebnis entsteht. Um solche Fälle zu verhindern, werden häufig sogenannte korrektive Blend Shapes eingesetzt. Das sind zusätzliche Blend Shapes, die je nach Aktivierung zu korrigierenden Shapes automatisch mehr oder weniger stark aktiviert werden um die Artefakte zu verhindern. Animateure bekommen über diese korrektiven Blend Shapes für gewöhnlich keine Kontrolle, sondern werden versteckt und basierend auf den zu korrigierenden Blend Shapes gesteuert ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=133&selection=19,14,19,38&color=yellow|p.133]]).
|
||||||
|
|
||||||
|
Bei Merkmalen, die zwischen zwei Extrema steuern gibt es zwei Blend Shapes. Eines für das Exremum bei -1.0 und eine andere form für das Extremum bei 1.0. Da sie Gegenteile darstellen, dürfen sie nicht gleichzeitig aktiviert werden. Blender bietet dafür die Möglichkeit das Minimum und Maximum für den Regler festzulegen und an den beiden Extrema des Interpolationswerten verschiedene Blend Shapes zu definieren.
|
||||||
|
Bei Merkmalen, die von 0 bis 1 definiert sind (existiert nicht bis existiert) ist nur ein Blend Shape am Maximum nötig.
|
||||||
|
Blender ermöglicht auch, nach dem erstellen der Blendshapes den maximalen und minimalen Interpolationswert zu ändern, und somit Merkmale über den ursprünglich modellierten Bereich hinaus zu extrapolieren.
|
||||||
|
|
||||||
|
Wisetchat definiert quasi-orthogonalität für Merkmale. Angelehnt an senkrechte Vektoren, etc.
|
||||||
|
Merkmale ist orthogonal, wenn die Regionen des Gesichts, die sie modifizieren nicht überlappen. Wenn sie überlappen, dann können sie orthogonal sein, wenn ein Attribut z. B. die Breite und ein anderes die Höhe eines Merkmals verändert. Wenn sie überlappen und die gleichen Vertices in ähnlicher Weise modifizieren, dann sind sie nicht orthogonal (Beispiel: Stirn Vorstand und Krümmung). In extremen Kombinationen können die Ergebnisse unplausibel sein, aber die meisten Kombinationen sind plausibel ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=137&selection=15,34,19,34&color=yellow|p.137]]).
|
||||||
|
|
||||||
|
Wisetchat verwendet ein festes Paar Augen als festen Bezugsrahmen um den herum das Gesichtsmesh gebaut wurde. +X -> Links, +Y -> Hoch, +Z -> Vorwärts. Koordinatenursprung des Modells ist der Punkt in der Mitte zwischen dem vordersten Punkt auf der Hornhaut beider Augen. Beide augen sind IPD_x weit von einander entfernt. Das Modell des Gesichts wird nicht mehr bewegt. Nur die individuellen Vertices werden bewegt ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=137&selection=21,0,21,22&color=yellow|p.137]]).
|
||||||
|
|
||||||
|
Wisetchat verwendete Autodesk Maya in ihrer Arbeit. Dort muss für jedes Blend Shape eine Kopie vom Basis-Mesh erzeugt werden ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=132&selection=21,0,25,14&color=yellow|p.132]]). Nachträgliche Änderungen an der Topologie sind dort aufwändig, da diese in jede Kopie des Basis-Meshes übernommen werden müssen.
|
||||||
|
In dieser Arbeit wird das Shape-Key-Feature von Blender verwendet. Dieses hat den entscheidenden Vorteil, dass es nur ein Mesh gibt und die einzelnen Shape-Keys praktisch Eigenschaften dieses Objekts sind. Dadurch können Änderungen an der Topologie vorgenommen werden, nachdem bereits Shape-Keys erstellt wurden, und es nur ggf. etwas Nachbesserung an einzelnen tatsächlich betroffenen Shape-Keys nötig.
|
||||||
|
|
||||||
|
# Eye Attribute Basis Shapes ([[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=137&selection=60,0,60,38&color=yellow|p.137]])
|
||||||
|
17 Features:
|
||||||
|
10 Unsigned
|
||||||
|
![[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=138&rect=109,96,549,489&color=yellow|p.138]]
|
||||||
|
7 Signed
|
||||||
|
![[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=139&rect=110,86,548,451&color=yellow|p.139]]
|
||||||
|
![[Wisetchat - Description-Based Visualisation of Ethnic Facial Types.pdf#page=140&rect=105,223,549,773&color=yellow|p.140]]
|
||||||
|
|
||||||
|
TODO: Im Idealfall werden wir auch ein paar Features von Nase und Stirn modellieren müssen?
|
||||||
|
|
||||||
|
Insbesondere das obere Augenlid ist schwierig zu modellieren, da es einerseits die dünnen Falten des Tarsus (https://flexikon.doccheck.com/de/Tarsus_(Auge), Lidgerüst) (durch ECF und STF) auf sehr dünner Haut liegen, während umliegende Furchen, Falten und Konvexitäten (SPS, STC, SPC, PNS, PTF) die Eigenschaften des zugrundeliegenden Fettgewebes darstellen müssen.
|
||||||
Binary file not shown.
85
Paperung/Experimente/Experiment 1 - Renderzeit.md
Normal file
85
Paperung/Experimente/Experiment 1 - Renderzeit.md
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
Während der Implementierung der ViewLayers ist aufgefallen, dass die Zeit, die es dauert ein Bild und die Segmentierungsmasken zu rendern, gesunken ist im Vergleich zur Ausgangslage des Projekts. Um dieses Beobachtung zu validieren und deren Ursache zu finden wurde das folgende Experiment durchgeführt.
|
||||||
|
|
||||||
|
Ein Durchlauf des Scripts erzeugt eine definierte Anzahl an Bildern und den dazugehörigen Segmentierungsmasken.
|
||||||
|
|
||||||
|
Listing ... zeigt als Pseudo-Code den Groben Ablauf des Scripts. Anfangs wird einmalig die Konfiguration sowie geladen. Diese definiert einerseits die Wertebereiche für die später zufällig gewählten Parameter wie z. B. die möglichen Grauwerte für Haut, Sclera, Iris usw. Dort wird auch definiert, wie viele Bilder generiert werden sollen. Darauf folgt eine Schleife, die so viele Iterationen hat, wie Bilder generiert werden sollen (X). Für jede dieser Iterationen wird dann die zufällige Konfiguration bestimmt, also die Blickrichtung des Auges, die Grauwerte der Objekte in der Szene, wie weit das Augenlid geöffnet ist. Mit diesen Werten werden dann die Objekte in den Szenen modifiziert. Es werden auch Node-Trees für die Materialen und das Compositing neu erzeugt. Nachdem die Konfiguration abgeschlossen ist, wird das Bild und dessen Segmentierungsmasken gerendert.
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Initialiserung
|
||||||
|
2. Wiederhole x mal
|
||||||
|
3. Modifiziere Blender-Szene mit zufälliger Konfiguration
|
||||||
|
4. Rendere ein Bild und Segmentierungsmasken
|
||||||
|
```
|
||||||
|
Daraus ergeben sich mehrere Punkte, an denen die Laufzeit verbessert worden sein kann:
|
||||||
|
|
||||||
|
Da in der im Rahmen dieser Arbeit erweiterten Implementierung nur eine Szene existiert und in der Initialisierung für alle Szenen Logik ausgeführt wird, kann die Initialisierungszeit verkürzt sein. Da diese allerdings nur einmalig ausgeführt wird, kann sie höchstens Einfluss auf die Gesamtlaufzeit haben. Allerdings wurden Verbesserungen in der Render-Zeit einzelner Bilder beobachtet, somit müssen diese signifikanten Verbesserungen in der Schleife auftreten.
|
||||||
|
|
||||||
|
Der nächste mögliche Aspekt ist die Zeit, die für die Konfiguration der Szene nötig ist. In diesem Teil des Scripts wurden große Änderungen vorgenommen, da durch den Umstieg auf ViewLayer Objekte nur noch einmalig und nicht in mehreren Szenen angepasst werden müssen. Allerdings sind nun auch deutlich mehr zufällig gewählte Variablen vorhanden, was die Laufzeit dieses Schritts verlängern könnte.
|
||||||
|
|
||||||
|
Zuletzt müssen die Bilder gerendert werden. Das ist mit Abstand der aufwendigste Teil dieses Prozesses, der demensprechend die meiste Laufzeit in Anspruch nimmt. Daher ist auch zu erwarten, dass die Laufzeitverbesserungen in diesen Schritt entstehen. Sie können entweder durch den Wechsel von mehreren Szenen auf die ViewLayer entstanden sein, oder durch den Wechsel von Blender-Version 4.x auf die zum Zeitpunkt dieser Arbeit neueste Version 5.0.
|
||||||
|
|
||||||
|
Unter diesen Gesichtspunkten ergeben sich folgende Laufzeiten die direkt gemessen werden können:
|
||||||
|
- Initialisierungszeit ($t_{init}$):
|
||||||
|
Wie lange dauert der Initialisierungsschritt. Aufgrund der geringen Arbeit, die in diesem Schritt passiert ist besten Falls eine minimale Verringerung der Laufzeit zu erwarten.
|
||||||
|
- Zeit für die zufällige Konfiguration der Szene ($t_{config}$):
|
||||||
|
Die Zeit, die es dauert die Szene mit zufälligen Parametern für ein einzelnes Bild zu modifizieren. Es ist eine moderate Verbesserung der Laufzeit zu erwarten, da das Verändern der Iris-Geometrie nur noch einmal durchgeführt wird, statt wie vorher dreimal. Generell entfallen Szenen-Wechsel. Es wird kaum mehr Laufzeit erwartet durch das setzen der zufälligen Gewichte für die Blend-Shapes wie die Schließung des Augenlids und der anderen Veränderungen an der Periorbital-Geometrie, sodass insgesamt eine Verbesserung zu beobachten sein dürfte.
|
||||||
|
- Zeit für das Rendern der Szene ($t_{render}$):
|
||||||
|
Die Zeit, die es dauert vom Befehl das Bild und die Masken zu rendern, bis dieses Fertig gerendert ist. Da dies der aufwändigste Schritt ist, wird hier die meiste Verbesserung erwartet.
|
||||||
|
- Gesamtlaufzeit eines Bildes ($t_{frame}$):
|
||||||
|
Dies ist die Laufzeit einer Iteration der Schleife, also die zufällige Konfiguration der Szene plus die Render-Zeit. Mathematisch ist also $t_{frame} = t_{config} + t_{render}$ zu erwarten
|
||||||
|
- Gesamtlaufzeit des Scripts ($t_{script}$):
|
||||||
|
Die Gesamtlaufzeit innerhalb des Scripts. Hier spielen also die einmalige Laufzeiten wie z. B. die Initialisierung eine Rolle, aber insbesondere die Laufzeit der $x$ Iterationen in denen die Bilder generiert werden. Mathematisch ist also $t_{script} = t_{init} + \sum_{i = 0}^{x}t_{image,i}$ oder wenn man berücksichtigt, dass die Laufzeit $t_{image}$ pro Bild nach einer Aufwärmphase innerhalb einer Standardabweichung konstant sein sollte $t_{script} \approx t_{init} + x \cdot t_{image}$ zu erwarten.
|
||||||
|
- Gesamtlaufzeit des Befehls ($t_{total}$)
|
||||||
|
Zu Ausführen des Scripts wird per Kommandozeile Blender als Head-Less Instanz, also ohne sichtbares Fenster, gestartet. Dabei bekommt es sowohl den Pfad zur zu ladende Szene sowie zum auszuführenden Script übergeben. Diese ist für unsere Betrachtung keine sonderlich relevanten Informationen, da lediglich die einmalige Startzeit (und Stoppzeit) von Blender zusätzlich gemessen wird. Da dies allerdings einfach zu messen ist wird es der wissenschaftlichen Vollständigkeit zusätzlich erfasst. Mathematisch kann folgende Laufzeit erwartet werden: $t_{total} = t_{startup} + t_{script} + t_{shutdown}$.
|
||||||
|
|
||||||
|
|
||||||
|
Es ist zu erwarten, dass die Laufzeiten der Iterationen einer Aufwärmphase unterliegen, in der anfangs Iterationen relativ lange dauern und kürzer werden, bevor sie sich relativ zuverlässig um eine Asymptote sammeln. Daher müssen ausreichend viele Iterationen durchgeführt werden um einerseits die Aufwärmphase zu überwinden und dann ausreichend Datenpunkte für die Bestimmung von Mittelwert und Standardabweichung zu sammeln.
|
||||||
|
In vorläufigen Tests wurde festgestellt, dass die Aufwärmphase nach etwa 10 Iterationen zuverlässig überwunden ist und die Laufzeit der Iterationen dann relativ stabil ist. Es wurde 120 als Anzahl der Iterationen, also der zu generierenden Bilder, gewählt. Das sollten genügend Iterationen sein, um zuverlässige Mittelwerte und Standardabweichungen unter Ausschluss der Aufwärmphase zu liefern.
|
||||||
|
|
||||||
|
Es wurden fünf Durchläufe durchgeführt, um einerseits mehrere Messwerte für die einmaligen Messwerte wie Initialisierungszeit und Gesamtlaufzeit zu sammeln. Außerdem erlaubt dies unerwartete Auswirkungen die Generierungszeit auszuschließen.
|
||||||
|
|
||||||
|
# Testdurchläufe:
|
||||||
|
Es werden grundsätzlich zwei Versionen von HEyes mit einander verglichen: Die original Implementierung von HEyes, auf der die vorliegende Arbeit aufbaut, und die fertige Implementierung dieser Arbeit mit allen zusätzlichen Funktionalitäten. Dabei ist anzumerken, dass die original Implementierung so angepasst wurde, dass die Messung alle nötigen Laufzeiten möglich ist.
|
||||||
|
|
||||||
|
1. Og Implementierung + Blender 4.5:
|
||||||
|
Die praktisch unveränderte Implementierung wird mit der alten Blender Version getestet. Einzig um sicherzustellen, dass die Ergebnisse reproduzierbar sind, wurde wie in Abschnitt ... beschrieben die Möglichkeit implementiert, die Zufallsgeneratoren mit einem festen Seed-Wert zu initialisieren. Die hierdurch gewonnenen Messwerte stellen die Baseline-Laufzeit dar, anhand welcher Verbesserungen in nachfolgenden Experimenten erkannt werden können.
|
||||||
|
2. Og Implementierung + Blender 5.0:
|
||||||
|
Die Implementierung aus Test 1 wurde minimal angepasst, um mit der API der von Blender 5.0 kompatibel zu sein. Alle anderen Aspekte bleiben Unverändert. Dadurch werden die Performance-Veränderungen, die durch die Blender Version verursacht werden sichtbar gemacht.
|
||||||
|
3. Neue Implementierung + Blender 4.5:
|
||||||
|
Die neue Implementierung wurde wieder mit Blender 4.5 kompatibel gemacht und getestet. Das erlaubt zusätzlich den Vergleich, ob die Änderungen in der Implementierung in verschiedenen Blender-Versionen ggf. effizienter wurden.
|
||||||
|
4. Neue Implementierung + Blender 5.0:
|
||||||
|
Dies stellt die endgültige Version der neuen Implementierung und somit die endgültige Performance dar.
|
||||||
|
|
||||||
|
Um die zusätzlichen Messwerte erfassen zu können, musste das Script angepasst werden. Um sicherzustellen, dass die Messung minimalen Einfluss auf die Laufzeiten hatte, wurde zusätzlich der Test ... auch ohne Instrumentalisierung durchgeführt und nur die Gesamtlaufzeit erfasst. Wenn die Ergebnisse zeigen, dass die Gesamtlaufzeiten innerhalb der Standardabweichung praktisch gleich sind, kann davon ausgegangen werden, dass die Instrumentalisierung des Codes keinen Einfluss auf die Gesamtlaufzeit sowie die Teillaufzeiten hatte.
|
||||||
|
|
||||||
|
> [!question]- TODO, falls ich Bock habe
|
||||||
|
> Zusätzlich wurde die Konfiguration aus Test 4 mit unterschiedlichen Blender-Einstellungen getestet:
|
||||||
|
>
|
||||||
|
>
|
||||||
|
>
|
||||||
|
> | Parameter | |
|
||||||
|
> | ----------- | --------------------- |
|
||||||
|
> | Compositing | 1. CPU<br>2. GPU |
|
||||||
|
> | Rendering | 1. CPU<br>2. GPU |
|
||||||
|
> | Renderer | 1. Eevee<br>2. Cycles |
|
||||||
|
>Das wären 35 weitere Tests (eigentlich 36, aber die Standard-Config ist CPU Comp, GPU Eevee Render)
|
||||||
|
|
||||||
|
Bereits im Laufe der Vorbereitung dieses Experiments fiel auf, dass die Vorbereitung der Szene für das Generieren eines Bildes deutlich mehr Zeit in Anspruch nimmt, als zunächst angenommen wurde. Daher wurde dieser zunächst vernachlässigte Schritt genauer untersucht.
|
||||||
|
|
||||||
|
Variablen:
|
||||||
|
Blender: 4.5 vs 5.0
|
||||||
|
Code: Alt vs Neu
|
||||||
|
Cache Luminance (lum): Yes vs No
|
||||||
|
Optimized Texture Generation (optitex): Yes vs No
|
||||||
|
|
||||||
|
|
||||||
|
Tests:
|
||||||
|
1. Alt mit 4.5
|
||||||
|
2. Alt mit 5.0
|
||||||
|
3. Neu mit 4.5, lum und Optitex aus
|
||||||
|
4. Neu mit 5.0, lum und Optitex aus
|
||||||
|
-> betrachtet isoliert Performanceverbesserungen durch Blender 5
|
||||||
|
5. Neu mit 5.0, lum und Optitex an
|
||||||
|
-> blender 5, lum und optitex sind orthogonal zueinander, daher gleichzeitig messbar und tortzdem individuell vergleichbar. Betrachtet isoliert die Optimierung, auch auf alt Anwendbar
|
||||||
|
|
||||||
|
-> Wenn ich für _Experiment 2_ Bilder erzeuge, dann kann ich das ggf. mit Blender 5, lum und optitex machen
|
||||||
53
Paperung/Experimente/Experiment 2 - NN performance.md
Normal file
53
Paperung/Experimente/Experiment 2 - NN performance.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
Hypothese: (besser formulieren, kommt irgendwo an den Anfang der Arbeit, mal Gucken, wo Meiko das hingepackt hatte...)
|
||||||
|
LightEyes stellt Augen nur sehr grundlegende Formen dar, im Grunde graue Kreise und erzielt dabei verhältnismäßig gute Performance beim Training von Neuronalen Netzen. Daher ist davon auszugehen, dass das detailliertere Modellieren der Periorbitalregion keinen nennenswerten Einfluss auf die Leistung von Neuronalen Netzen hat.
|
||||||
|
|
||||||
|
## Einleitung
|
||||||
|
In der vorliegenden Arbeit wurde die bestehende Implementierung von HEyes erweitert, sodass nun die Form der Periorbitalregion zufällig verändert werden kann. In Experiment 1 wird untersucht, wie sich die Änderungen auf die Laufzeit der Generierungspipeline auswirken. In diesem Experiment soll untersucht werden, ob diese Erweiterung einen Einfluss auf die Erkennungsleistung von KI-basierten Segmentierungsmodellen hat. Dazu wird ein Vergleich
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Von Timms Arbeit:
|
||||||
|
Über alle Experimente hinweg wurden die gleichen, in der medizinischen Bildsegmentierung etablierten Metriken erfasst [71]. Im Mittelpunkt stehen der Dice Score (auch F1 Score) und die IoU (auch Jaccard Index genannt) als Flächenüberlappungsmaße sowie Precision und Recall als Fehlerratenmaße. Besonders der Dice-Score fand in verwandten Arbeiten, wie etwa bei M. Calisto et al. (2021) [10] und Z. Fan et al. (2020) [19], Verwendung.
|
||||||
|
|
||||||
|
Meiko hat auch Dice und IoU überprüft. Nach jeder Epoche berehcnet.
|
||||||
|
|
||||||
|
|
||||||
|
Sachen, die ich mache:
|
||||||
|
- Modell: Yolo26-seg small
|
||||||
|
- Zwei Modelle trainieren:
|
||||||
|
1. Alte Implementierung
|
||||||
|
2. Neue Implementierung
|
||||||
|
- 80 - 20 Split? Meiko hat 85 - 15?! für Training und Validierung
|
||||||
|
- Test-Set mit ???
|
||||||
|
- entweder 500k oder Daten aus TEyeD?
|
||||||
|
- Vom Testset hängt auch die zu generierende Auflösung der synthetischen Bilder ab
|
||||||
|
- Störfaktoren sind nicht wirklich Teil meiner Arbeit, daher möchte ich am besten einen kontrollierten Datensatz, aber mit verschiedenen Ethnien
|
||||||
|
- Synthetische Daten generieren
|
||||||
|
- Es werden explizit Bilder mit verdeckter Pupille erzeugt
|
||||||
|
- TODO: Müssen wir die Helligkeitswerte aus den Test-Set extrahieren?
|
||||||
|
- Um Überrepräsentation von verdeckten Pupillen zu vermeiden wird der Exponentielle-Faktor für den Lidschluss verwendet, damit mehr Bilder ein offenes Auge haben
|
||||||
|
|
||||||
|
# Sachen, die ich am Ende sehen möchte:
|
||||||
|
Graphen:
|
||||||
|
Plotten über alle Epochen:
|
||||||
|
- Train Loss
|
||||||
|
- Validation Loss (Meiko hat das auch irgendwie für jede Epoche berechnet)
|
||||||
|
- Precision und Recall
|
||||||
|
- Okay für Yolo hat er Mask Precision und Recall, was auch immer das sein soll
|
||||||
|
Meiko hatte auch:
|
||||||
|
- Validation mAP50
|
||||||
|
- Validation mAP50-95
|
||||||
|
|
||||||
|
Für das Finale Modell:
|
||||||
|
- IoU und Dice für die Test-Set-Bilder berechnen
|
||||||
|
- Tabelle: Mean + SD für IoU und Dice für beide Modelle
|
||||||
|
- Ich möchte auch einen Boxplot zeigen können für IoU und Dice und einzelne Bilder und ihre Masken (Ground Truth und predicted) + Scores zeigen können
|
||||||
|
# Todo!!!!!!!!!!
|
||||||
|
- Meiko und Jan haben aus den Daten die Helligkeitswerte extrahiert
|
||||||
|
|
||||||
|
|
||||||
|
# Genutzte Hardware:
|
||||||
|
Beide Experimente wurden auf einem Computer mit folgender Hardware ausgeführt:
|
||||||
|
- CPU: AMD Ryzen 7 2700x mit 8 Kernen (16 Threads)
|
||||||
|
- GPU: NVIDIA RTX 3080 mit 10 GB VRAM
|
||||||
|
- RAM: 32 GB DDR4
|
||||||
11
Prewrite/Änderungen an Szene und Code/Random Änderungen.md
Normal file
11
Prewrite/Änderungen an Szene und Code/Random Änderungen.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Gesamten Code mit Type-Annotations voll gekleistert
|
||||||
|
TODO: Schreibi schreibi
|
||||||
|
|
||||||
|
# Random Optimierungen
|
||||||
|
Bei der Vorbereitung der Benchmarks ist aufgefallen, dass weit mehr Zeit als erwartet mit dem Vorbereiten des Renderns verbracht wird. Dies umfasst neben dem Verändern der Blender Szene mit zufälligen Werte für z. B. die Blickrichtung und Kamera-Position auch das erzeugen der Materialien sowie des Compositing-Graphen und auch das Erzeugen von Texturen für die Sclera und Cornea mit den Glanzlichter darauf und das Erzeugen der Iris Textur.
|
||||||
|
|
||||||
|
Im Material für die Haut wird die Luminanz-Kurve angepasst, dafür wird erstmal die min und max Luminanz der Haut-Textur berechnet. Die alte Implementierung berechnet diese Werte in jeder Iteration erneut. Da diese Textur sich aber nie ändert, können sie gecached werden.
|
||||||
|
|
||||||
|
Um die Sclera-Textur zu erzeugen wird in der alten Implementierung zunächst eine weiße Textur erzeugt, dann werden die RGB-Werte aller Pixel durch einen zufällig bestimmten Grauwert ersetzt. Anschließend wird ein transparenter Kreis für die Cornea erzeugt und die Glints auf die Textur gemalt.
|
||||||
|
|
||||||
|
Die ersten beiden Schritte lassen sich zusammenfassen. Statt erst eine weiße Textur zu erzeugen (`np.ones`) und die Pixel dann grau (`tex[::3] = grau`) zu machen, kann in einem einzigen Schritt ein Array mit den korrekten Grauwerten erzeugt werden (`np.full(size, [grau,grau,grau,1])`). Tatsächlich kommt der meiste Performance-Vorteil durch das ersetzen von `tex[::3]`
|
||||||
0
Untitled.base
Normal file
0
Untitled.base
Normal file
Reference in New Issue
Block a user