# Klassifikation von Liegepositionen - Paperzusammenfassungen
## <a name="1"></a>3D Human Pose Estimation on a Configurable Bed from a Pressure Image
- Bestimmung von 3D-Joint-Position aus Pressure Images
- Zuerst Bilderkennung mit Convolutional Neural Networks
- Danach zusätzlich Joint-Erkennung anhand eines kinematischen Modells
- [5], [22], [23] könnten interessante Referenzen sein
- Daten und Code verfügbar
- ftp://ftp-hrl.bme.gatech.edu/pressure_mat_pose_data
- https://github.com/gt-ros-pkg/hrl-assistive/tree/indigo-devel/hrl_pose_estimation
### Input/Preprocessing
- Input sind 3 Bilder:
- Pressure Image,
- Pressure Image mit Sobelfilter
- Höhe der Matratze an jeder Position (verändert z.B. durch Kopfteil-erhöhung) als Bild
- Data Augmentation: Flipping, Scaling, Shifting, Noise um mehr Daten zu bekommen
### Vorgehen
- Bilderkennung auf Eingabebildern mit Convolutional Neural Network erkennt 3D-Position der Joints
- Aus diesen Joints wird dann ein kinematisches Modell erzeugt, aus dem nochmal Joints erkannt werden
- Hat den Vorteil dass das kinematische Modell bestimmte physiologische Constraints erfüllt und "näher" am Menschen dran ist
- außerdem könnte man dieses Modell glaube ich auch ohne Pressure Images benutzen, wenn man das kinematische Modell eines Menschen hat
- Zusätzlich Messung von Ambiguity und Uncertainty, sodass schlecht messbare Körperteile verworfen werden können
- Ist zum Beispiel sehr hoch, wenn Körperteil in der Luft sind
## <a name="2"></a>A pressure map dataset for posture and subject analysis
- Hab ich im Vortrag vorgestellt
- Verfolgen anderes Ziel (Personenerkennung)
- Sehr gute Daten (https://physionet.org/content/pmd/1.0.0/)
- [8], [9] könnte interessant sein
### Vorgehen
- Aus den pressure images werden alle non-zero values betrachtet und dann statistische features extrahiert/berechnet (z.B. min/max/avg-Wert etc.)
- Deep Learning dann auf diesen Features
- Model wird ungefähr beschrieben aber kein Code mit dabei
## <a name="3"></a>Bodypart Localization for Pressure Ulcer Prevention
- Versuchen Körperteile im Pressure Image zu erkennen mithilfe "Pictorial Structure Model"
- Loss-Function wird ausführlich erklärt, passt aber nicht unbedingt zu unserem Thema
- [9], [10] könnte interessant sein
## <a name="4"></a>Continuous eight-posture classification for bed-bound patients
- Klassifizierung von Pressure Images von Sensormatratzen in 8 verschiedene Schlafpositionen
- Macht genau das was wir wollen und hat geringen Rechenaufwand und hohe Präzision (zumindest in ihrem Experiment)
- Negativ: Feste Anzahl von Positionen
### Preprocessing
- Filtering: Sensordaten werden zuerst gesmoothed (symmetric Gaussian low pass filter) und dann in binary Arrays (binary Filter) umgewandelt
- Morphologic Operations: Durch Closing und Bridging werden einzelne Körperteile verbunden, sodass ein fast zusammenhängedes Bild entsteht
- Scaling: Auf feste Länge von 2048 Datenpunkte, sodass aus den Rohdaten immer ein 2048 Bits langes Array mit 1en (Druck) und 0en (kein Druck) entsteht
### Posture Signature Extraction
- Aus den bekannten (gelabelten) Pressure Images werden "Signature Vectors" für jede der 8 Positionen bestimmt: Wenn auf einem Pixel in mehr als der Hälfte aller Samples zu dieser Position Druck liegt, hat der im Signature Vector eine 1, sonst 0
- -> Vom Datentyp gleich wie das Ergebnis vom Preprocessing, damit gibt es jetzt für jede Position ein "Standardarray"
### Pattern Matching/Kategorisierung
- Mithilfe von k-Nearest-Neighbours: Neues Pressure Image wird preprocessed und mit allen 8 Standardarrays verglichen
- Das mit den meisten Übereinstimmungen wird zur Klassifizierung ausgewählt
## <a name="5"></a>In-bed pose Estimation: Deep Learning With Shallow Dataset
- Reine Bilderkennung von Kameraaufnahmen u.a. mit Infrarot, können wir denke ich ignorieren
## <a name="6"></a>In-Bed Posture Classification and Limb Identification
### Intro
- Pressure Mats better preserve privacy compared to video cameras
- pressure mats are commercially available as a thin layer of sensors on the matress
- pressure mats can measure the pressure on each individual body limb in a given posture
- 2D Gaussian Mixture Model (GMM) with a boosting system based on a tree classifier for posture classification
- [4], [5], [9] might be interesting for further reading
- template for each posture, which adopts due to efficient learning later in the process
### Pressure Image preprocessing
- sleep postures vary significantly from one person to another due to different limb arrangements and position and orientation in bed
#### Binary image extraction
- binary image is obtained by thresholding the blurred gray-scaled original
- blurring is done by low-pass gaussian filter
- isolated pixels are removed by morphological erosion
- threshold is mean of pixel values sum
#### Image adjustment
- Principal Component Analysis on the binary images gives eigenvectors that specify the direction of the image
- rotate image by the angle between the eigenvector and the long edge
- crop image after rotation by finding a bounding box
- do those steps with the original image
### Limb Identification Using GMM
- es gibt mehrere positionsklassen, von denen abhängig das GMM clustering mehrmals ausgeführt wird. diese cluster werden dann genutzt um die position herauszufinden. anhand dieser positionen kann dann das GMM trainiert werden (?)
- das ergibt alles absolut keinen Sinn
### Posture detection
- Apply body maps BS and BR on the pressure image
- extract two features from the resulting GMM clusters
- Feature FS is used to distinguish supine from non-supine postures
- Feature FR is used to distinguish right from left postures
- Classification: tree classifier
- "For a given unknown posture, P, first, BS , the supine body map initialization is applied for GMM clustering. Feature set FS is extracted from the resulting Gaussian mixtures. Then, in the first level of tree classifier, P is assigned to supine or non-supine class. If it is a supine class, classification is over at this point. Otherwise, BR, the side body map initialization is applied and FR is extracted. Finally, the second level of tree classifier will classify this non-supine labeled posture to right or left posture. In case of body/limb movements during sleep, the algorithm adaptively converges to the new positions by partially rerunning the clustering algorithm."
## <a name="7"></a>In-bed Pressure-based Pose Estimation using Image Space Represantation Learning
### Concept
- use an off-the-shelf pose estimator and feed prepared pressure data to it
- deep trainable neural network pre-processes pressure data to images that are a common input for the pose estimator
- it also reconstructs unclear body parts
- 
### PolishNet
- fully-convolutional hourglass neural network
- processes input pressure maps to conventional pose-estimator inputs
- trained to minimize Part Affinity Field (PAF) and heatmap losses between annotated images and predicted outputs and pixel mean-squared error
- can be trained on small dataset
### OpenPose
- pre-learned pose estimator on camera images
- parameters are kept frozen
- can be swapped out by DeeperCut and the whole prediction still has great performance -> modularity
## <a name="8"></a>Patient 3D body pose estimation from pressure imaging
- Ouput of all is a skeleton
### Hashing-based Pose estimation
- Lookup Table mit Druck-bild zugeordnet auf Pose mit entsprechenden Joints
- Für ein unbekanntes Bild werden dann die Knn im Table nachgeschaut und die Ergebnisse gemittelt
- Für schnelleres Vergleichen werden die Druckbilder gehasht (über Iterative Quantization um Vergleichbarkeit zu behalten)
- 
### ConvNets-based pose estimation
- uses Convolutional Neural Networks
## <a name="9"></a>Simultaneously-Collected Multimodal Lying Pose Dataset: Towards In-Bed Human Pose Monitoring under Adverse Vision Conditions
- 16Gb, lol
- [Hier](https://web.northeastern.edu/ostadabbas/2019/06/27/multimodal-in-bed-pose-estimation/)
## <a name="10"></a>Bodies at Rest: 3D Human Pose and Shape Estimation from a Pressure Image using Synthetic Data
### PressurePose
- Dataset with 3D human body poses and their pressure images
- synthetically created
### PressureNet
- deep learning model
- estimates 3D body pose and shape from low-res pressure image
- uses a series of two networks modules (both CNN)
- kinematic embedding model -> produces 3D body from pressure data
- pressure map reconstruction network (PMR) -> calculates a pressure map from a 3D body -> used for loss function
# Thematische Sortierungen
## Preprocessing
- Data Augmentation: Flipping, Scaling, Shifting, Noise ([1](#1))
- Non-Zero Filter und Statistical feature extraction ([2](#2))
- Sobel-Filter zur Kantenerkennung ([1](#1))
- Scaling der Bilder auf gleiche Länge ([4](#4))
- Smoothing und Binary Filter ([4](#4)), ([6](#6))
- Binary Image Extraction: Blurring, Binary Filter, Morphologic Isolated Pixel Removal ([6](#6))
- Image adjustment: Principal Component Analysis and rotation+cropping of image ([6](#6))
- Neural Network to highlight body contures and preprocess the whole pressure Image ([7](#7))
- Morphologic Operations ([4](#4))
- Synthentically created by physics simulations ([10](#10))
## Klassifizierungsmethoden
- Bilderkennung ([1](#1))
- Pictorial Structure Models ([3](#3))
- k-Nearest-Neighbours ([4](#4))
- Tree Classifier ([6](#6))
- Conventional pose estimator (OpenPose, DeeperCut) -> Neural Network ([7](#7))
- Hash Table mit Knn ([8](#8))
- Convolutional Neural Network ([8](#8))
- Encoder-Decoder Ding ([10](#10))
# Unser Versuch
## Data
- https://physionet.org/content/pmd/1.0.0/
- Self-recorded and self labeled Dataset
- Person split
- undersampling, oversampling oder wie das hieß
## Preprocessing
- Filtering: Sensordaten werden zuerst gesmoothed (symmetric Gaussian low pass filter) und dann in binary Arrays (binary Filter) umgewandelt
- Morphologic Operations: Durch Closing und Bridging werden einzelne Körperteile verbunden, sodass ein fast zusammenhängedes Bild entsteht
- isolated pixels are removed by morphological erosion
- Scaling: Auf feste Länge von 2048 Datenpunkte, sodass aus den Rohdaten immer ein 2048 Bits langes Array mit 1en (Druck) und 0en (kein Druck) entsteht
## Model
- CNN
## vielleicht später ausprobieren
- Sobel filter zur Kantenerkennung [1](#1)
- image adjustment [6](#6)
- kNN um zu gucken wie viel schneller das is [4](#4)
# Stichpunkte für Folien
## Was ist Posture Classification?
- Generell die Klassifizierung der Haltung/Position einer Person in eine von mehreren Kategorien
- In unserem Fall wollen wir anhand aufgenommener Druckbilder die Haltungs-Kategorie einer Person voraussagen
- Beispielsweise soll erkannt werden, dass die Person hier [Hier Bild einfügen] in Rückenlage liegt, oder eine der vielen anderen (Auflistung verschiedener Haltungen mit "...")
- Damit kommen wir direkt zu der Frage, welche Positionen nun überhaupt betrachtet werden sollen:
### Welche Positionen mit entsprechenden Parametern gibt es?
- Vorab sei gesagt, dass in vielen Papern tatsächlich nur ziemlich grob zwischen Rücken-, Bauch- und den Seitenlagen unterschieden wird.
- Allerdings kann man hier noch viel detaillierter unterteilen: (Große Auflistung verschiedener Positionen aus dem Excel + Bilder)
- Theoretisch gäbe es zwischen diesen ganzen Positionen jeweils noch die Bewegung bzw Rotation von der einen zur anderen, also noch sehr viel Möglichkeiten mehr.
- Da stellt sich dann allerdings die Frage, inwieweit diese anhand der Druckbilder selbst für einen Menschen unterscheidbar sind, und ob die Unterscheidung einen Mehrwert bringen würde, zumal dafür meist mehrere Bilder im Kontext zueinander betrachtet werden müssen. (Evtl Anekdote zum Labeling: Ich musste beim Labeln oft zwischendurch vor und zurückschalten um mir mehrere Bilder im Zusammenhang anzuschauen UND brauchte zusätzlich das Video dazu)
- Wir haben uns in diesem Fall nur auf Positionen beschränkt, die über längere Zeit gehalten werden können, also keine Rotationen oä, weil nur diese Positionen auch Dekubitusgefahr bergen
- Für die meisten Positionen kann es zusätzlich noch einen Unterscheidung geben, ob die Person ein Kissen unter dem Kopf hat, oder nicht
- Und beispielsweise bei der Rückenlage kann noch die Steigung des Kopfbereiches betrachtet werden, die auch Einfluss auf den Druck am Steißbein beispielsweise hat, um dort später auch richtig die Gefahr der Entstehung eines Dekubitus zu ermitteln
## Welche sind besonders interessant für Dekubitusprävention? (Posture Classification für Dekubitusprävention)
- [6](#6), [9](#9):
- Beobachtung des Schlafverhaltens ist ein kritischer Aspekt für viele Gesundheitsvoraussagen, Diagnose und Behandlungen
- Die Haltung im Bett beeinflusst die Symptome vieler Medizinischer Komplikationen wie Schlafapnoe, Druckgeschwüre und auch Karpaltunnelsyndrom
- Daher kann ein automatisches Überwachungssystem hier ständig die Schlafposition der Patienten beobachten und Pfleger warnen bevor es zu Komplikationen kommt
- Gerade wenn viele Patienten regelmäßige Betreuung am Tag brauchen durch Coronamona
- durch Druckmatratzen kann sehr unauffällig die Schlafposition erkannt werden
- Hat hohe Privatsphären-vorteile gegenüber Kameras
- Um schnell reagieren zu können muss ein solches System natürlich in Real-Time funktionieren, um den Dekubitus nicht erst nach seiner Entstehung zu erkennen
- Generell gibt es natürlich nicht DIE richtige Auswahl an Positionen, weshalb es in vielen Papern unterschiedlich ist und wir uns jetzt nicht darauf festlegen werden. Wir kommen später nochmal kurz dazu, wenn wir die Positionen vorstellen, die wir für unser Modell betrachtet haben.
- [6](#6):
- Bettlägerige Patienten sind jederzeit der Gefahr von Druckgeschwüren ausgesetzt
- Diese sind schwer zu behandeln und sind eine große last für das Gesundheitssystem
- Daher ist ein System, das unauffällig die Schlafposition von Menschen erkennen und die Pfleger vorwarnen kann von hoher Bedeutung für die Verwaltung der Krankenhausressourcen
- Gibt den Druck, dem jedes Körperteil ausgesetzt ist
- Hat hohe Privatsphären-vorteile gegenüber Kameras
- [7](#7):
- Bewegung und Schläfposition während des Schlafes haben kritischen Einfluss auf Störungen wie Schlafapnoe und Druckgeschwüre
- Daher ist das Monitoring der Schlafhaltung von großer Bedeutung um solche Störungen zu erkennen oder vorzubeugen
- [8](#8)
- Krankheits und Störungs diagnose, Erkennung von bed-exit und fall events, Druckgeschwür prävention
- schnell und genau Änderungen der Position erkennen
- [9](#9)
- Beobachtung des Schlafverhaltens ist ein kritischer Aspekt für viele Gesundheitsvoraussagen, Diagnose und Behandlungen
- Die Haltung im Bett beeinflusst die Symptome vieler Medizinischer Komplikationen wie Schlafapnoe, Druckgeschwüre und auch Karpaltunnelsyndrom
- Daher kann ein automatisches Überwachungssystem hier ständig die Schlafposition der Patienten beobachten und Pfleger warnen bevor es zu Komplikationen kommt
- Gerade wenn viele Patienten regelmäßige Betreuung am Tag brauchen durch Coronamona
- Unauffällige automatische Monitoringsysteme zu Hause oder im Krankenhaus könnten die Krankenhausbesuche und damit die Infektionsverbreitung senken und den schon so überforderten Pflegern Arbeit abnehmen
## Welche Ansätze gibt es bisher?
- Haben uns 10 Paper genauer angeschaut u.a. aus der Literatursammlung von Weronika
### Datengewinnung (Wenn überhaupt nur kurz zur Vollständigkeit erwähnen):
- Aufnahme von realen Daten mit Testpersonen, dazu z.B. Kameraaufnahmen für Labeling und Konfiguration des Betts (z.B. Kopferhöhung)
- Simulation von Daten (hat Benedikt ja auch schon gezeigt) ([10](#10))
- Data Augmentation: Flipping, Scaling, Shifting, Noise ([1](#1))
- Bei der Posture Classification muss man hier allerdings vorsichtig sein, da durch Flippint/Rotating/Shifting sich auch die Labels ändern könnten!
### Vorhandene Datensätze
- kein standardisierter großer Datensatz verfügbar
- In den letzten Jahren stellen immer mehr Forschungsteams ihre eigenen Experiment-Daten zur Verfügung, dadurch viele unterschiedliche kleinere Datensätze
- Physionet Datensatz (der den Nils schon vorgestellt hatte)
- 13 Personen, 17 Positionen, Pressure Frames als Text-Dateien gespeichert
- Simultaneously-Collected Multimodal Lying Pose Dataset (SLP) (16Gb)
- über 100 Personen, RGB, infrarot und pressure mat
- Bodies at Rest Dataset
- Synthetisch erzeugt, zum Testen auch Real aufgenommen
- Selbst aufgenommene Daten der Betreuer (Nennen wir Ambienta)
- kein standardisiertes Vorgehen, verschiedene Positionen, Pressure Frames als CSV
- bisher 3 Personen von uns gelabelt
### Preprocessing
- Verschiedene Filter auf das Bild anwenden:
- Sobel Filter (Kantenerkennung) ([1](#1))
- ([4](#4))
- Smoothing ([4](#4)), ([6](#6))
- Non-zero Filter ([2](#2))
- Binary Filter mit Threshold ([4](#4)), ([6](#6))
- Morphologic Operations: Bridging/Closing (durch Dilation/Erosion realisiert) ([4](#4)), ([6](#6))
- Zuschneiden der Bilder/Adjustment
- z.B. dass Person immer in der gleichen "Richtung" liegt (Kopf oben Füße unten), muss nicht immer sinnvoll sein ([6](#6))
- Bild immer gleiche Größe ([4](#4)), ([6](#6))
- Normalisierung der Pressure-Werte (wird besonders wichtig wenn verschiedene Datensätze/Matratzen verwendet werden)
- Feature Extraction ([2](#2))
- Dann wird gar nicht das ganze Pressure-Image als Eingabe verwendet sondern aus dem Bild werden mathematische Features berechnet die dann den Input zur Klassifizierung darstellen
- Wurde in einem Paper aber auch nur zur Personenerkennung verwendet, wir haben nicht überprüft ob das für Posture Classification auch sinnvoll wäre
- Automatisches Preprocessing mit Neuronalem Netz ([7](#7))
### Klassifizierungsmethoden
- Klassische Bilderkennung mit Convolutional Neural Network ([1](#1))
- Werden sowohl für Pose Estimation als auch für Posture Classification verwendet
- Als Eingabe Pressure-Image, optional mit Filtern
- Als Ausgabe Klassifizierung in eine der definierten Liegepositionen
- Variante: Auto-Encoder ([10](#10))
- k-Nearest-Neighbour mit Signature Vectors ([4](#4))
- Input: Binary Pressure Image mit fester Länge
- Posture Signature Extraction
- Aus den bekannten (gelabelten) Pressure Images werden "Signature Vectors" für jede der 8 Positionen bestimmt: Wenn auf einem Pixel in mehr als der Hälfte aller Samples zu dieser Position Druck liegt, hat der im Signature Vector eine 1, sonst 0
- damit gibt es jetzt für jede Position ein "Standardarray" (Signature Vector)
- Pattern Matching/Kategorisierung
- Mithilfe von k-Nearest-Neighbours: Neues Pressure Image wird preprocessed und mit allen 8 Standardarrays verglichen
- Das mit den meisten Übereinstimmungen wird zur Klassifizierung ausgewählt
- Variante: k-Nearest-Neighbour mit Hash-Table durch Iterative Quantization ([8](#8))
## Unser Experiment
### Übersicht
### Preprocessing
## Auswertung & Vergleich
- Wir nutzen Confusion Matrix und F1-Scores zum Auswerten und vergleichen unserer Ergebnisse
- Pro Modell immer 10 Trainingsdurchläufe mit jeweils 20 Epochen, Learning Rate 0.005 und Batch Size 100
- Confusion Matrix zeigt, welche Pressure Frames vom Modell wie kategorisiert wurden, je höher die Werte in der Diagonalen desto besser
- Confusion Matrix zeigt in jedem Feld den Durchschnitt über alle 10 Durchläufe
- Baseline:
- Mean-F1-Score von 0.74
- Viele Klassen werden zuverlässig erkannt
- "Rechts" mit "Supine" vertauscht
- Linke Positionen untereinander vertauscht
- Prone klappt gar nicht
- Generell aber wenige "Ausreißer", meistens nur verwandte Positionen vertauscht
- Adjustments:
- Haben mehrere Parameter und Preprocessing-Schritte variiert
- Binarize mit Median Threshold hat keinen wirklichen Effekt gehabt
- No Dropout auch fast keinen Effekt auf das Endergebnis
- Dann haben wir alle Preprocessing Schritte aus der Baseline weggelassen und nacheinander wieder hinzugefügt
- Keine Filter:
- Wir haben wieder Average Confusion Matrix über alle 10 Durchläufe erstellt, hier zu sehen ist der direkte Vergleich mit der Baseline
- Dieses mal nur das notwendige resizing der Bilder (sonst keine Training möglich)
- Generell starke Verschlechterungen, linke Positionen noch stärker vertauscht, viele andere Klassen werden in Supine einsortiert
- Allerdings wird Prone fast komplett richtig kategorisiert
- Unsere Erklärung: Die Bilder aus den zwei Datensätzen sind stark unterschiedlich, die zusammengeführten Klassen sind also nicht mehr so homogen, die nicht zusammengeführten schon
- Schon mal eine interessante Richtung gefunden
- Mit Normalize:
- Bilder haben jetzt gleichen Wertebereich aber immer noch unterschiedliche Helligkeit
- Weniger extreme Verschiebungen, dafür viele kleine Verwechslungen
- Prone klappt immer noch deutlich besser, aber nicht mehr ganz so gut wie vorher
- Mit Normalize und Equalize:
- Fast ausschließlich Verbesserungen
- Prone Verbesserung wieder etwas schwächer geworden aber immer noch deutich besser als Baseline
- Mit Blur:
- Ganz leichte Verbesserungen zur Baseline
- Prone Klassifizierung leicht besser aber immer noch ziemlich schlecht
- Anderes Modell:
- Haben zum Vergleich noch ein ganz anderes Modell ausprobiert aus einem anderen Paper
- Architektur etwas abgeschwächt, da wir sonst die Bilder extrem stark vergößern müssten
- Um Vergleichbarkeit zu wahren wieder mit allen Filtern aktiviert
- Insgesamt deutlich schlechter als Baseline
- ein paar starke Ausreißer, Prone auch hier sehr schlecht
- Insgesamt weniger konsistent, die einzelnen Durchläufe hatten teilweise sehr verschiedene Ergebnisse
## Fazit & Ausblick
### Fazit
- Hier nochmal Confusion Matrix von bestem Modell, ohne Vergleich zur Baseline
- Viele Klassifizierungen funktionieren sehr gut oder sogar perfekt
- Leichte Verwechslungen bei linken Positionen, rechts/supine und prone nur zur Hälfte richtig
- Wir sehen: Datensätze angleichen ist wichtig und verbessert Ergebnisse, Bildfilter waren in unserem Versuch aber eher kontraproduktiv
### Ausblick
- Test im realen Umfeld wäre spannend
- Wie kann das Modell jetzt am besten genutzt werden?
- Bewegungserkennung
- Mehr Daten
- Hyperparameter Optimization
- Knn Ansatz als Vergleich