Skip to content
Snippets Groups Projects
Commit df97a468 authored by at2n19's avatar at2n19
Browse files

Upload New File

parent 104ecbee
No related branches found
No related tags found
No related merge requests found
%% Cell type:code id: tags:
``` python
from google.colab import drive
drive.mount('/content/drive')
```
%% Output
Mounted at /content/drive
%% Cell type:code id: tags:
``` python
%cd drive/MyDrive/3d-pose-2d-keypoints-present/
```
%% Output
/content/drive/MyDrive/3d-pose-2d-keypoints-present
%% Cell type:code id: tags:
``` python
import numpy as np
np.set_printoptions(suppress=True)
import pandas as pd
%matplotlib inline
```
%% Cell type:code id: tags:
``` python
test_file = 'logs/train_test/Subject{0}test{1}.npy'
weight_file = '{0}-{1}{2}.hdf5' # norm_type, modelTrueTr
weight_root = 'logs/weights/'
weight_loc = weight_root + weight_file
```
%% Cell type:code id: tags:
``` python
from scipy import spatial
def procustes_distance(test, pred):
proc = np.zeros((test.shape[0]))
for i in range(test.shape[0]):
a, b, proc[i] = spatial.procrustes(test[i], pred[i])
return proc
def test_predictions(subject_num, norm_mode, model, weights, optional=''):
model.load_weights(weights)
coordinate_log = test_file.format(subject_num, norm_mode)
if subject == 86:
coordinate_log = 'logs/train_test/Subject{0}train{1}.npy'.format(subject_num, norm_mode)
test = np.load(coordinate_log)
y_test = test[:,:,2]
X_data = test[:,:,0:2]
X_test = X_data.reshape(X_data.shape[0], X_data.shape[1] * X_data.shape[2])
pred = model.predict(X_test)
pred_3d = test.copy()
pred_3d[:,:,2] = pred
return test, pred_3d
def procrustes_test(subject_num, norm_mode, model, optional=''):
weights = weight_loc.format(norm_mode, model, optional)
model = k_models[model]
model.compile(loss=euc_dist_keras, optimizer='rmsprop')
test, pred = test_predictions(subject_num, norm_mode, model, weights)
proc = procustes_distance(test, pred)
print(subject_num, proc.mean(), )
return proc, pred, test
```
%% Cell type:code id: tags:
``` python
import keras
from keras.models import Model
from keras.layers import Dense, Activation, Dropout, Input
from keras.optimizers import SGD
from keras.callbacks import ModelCheckpoint
from keras.models import model_from_json
from keras.layers import Concatenate, Add
from keras import backend as K
def euc_dist_keras(y_true, y_pred):
return K.sqrt(K.sum(K.square(y_true - y_pred), axis=-1, keepdims=True))
```
%% Cell type:code id: tags:
``` python
def base():
input1 = Input(shape=(30,))
x = Dense(30)(input1)
x = Activation("tanh")(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(15)(x)
final = Activation("tanh")(x)
model = Model(inputs=input1,outputs=final)
return model
# SIMPLE DROPOUT
def dropout():
input1 = Input(shape=(30,))
x = Dense(30)(input1)
x = Activation("tanh")(x)
x = Dropout(0.3)(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dropout(0.2)(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dropout(0.2)(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(15)(x)
final = Activation("tanh")(x)
model = Model(inputs=input1,outputs=final)
return model
# MULTI-STAGE MODEL
def multi():
input1 = Input(shape=(30,))
x = Dense(30)(input1)
x = Activation("tanh")(x)
x = Dropout(0.20)(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dropout(0.20)(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(15)(x)
x = Activation("tanh")(x)
x = Concatenate()([input1, x])
x = Dense(45)(x)
x = Activation("tanh")(x)
x = Dense(45)(x)
x = Activation("tanh")(x)
x = Dropout(0.10)(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(15)(x)
x = Activation("tanh")(x)
x = Concatenate()([input1, x])
x = Dense(45)(x)
x = Activation("tanh")(x)
x = Dense(45)(x)
x = Activation("tanh")(x)
x = Dropout(0.10)(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(15)(x)
x = Activation("tanh")(x)
x = Concatenate()([input1, x])
x = Dense(45)(x)
x = Activation("tanh")(x)
x = Dense(45)(x)
x = Activation("tanh")(x)
x = Dropout(0.10)(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(15)(x)
x = Activation("tanh")(x)
x = Concatenate()([input1, x])
x = Dense(45)(x)
x = Activation("tanh")(x)
x = Dense(45)(x)
x = Activation("tanh")(x)
x = Dropout(0.10)(x)
x = Dense(30)(x)
x = Activation("tanh")(x)
x = Dense(15)(x)
final = Activation("tanh")(x)
model = Model(inputs=input1,outputs=final)
return model
k_models = {
'base' : base(),
'dropout' : dropout(),
'multi' : multi(),
}
```
%% Cell type:code id: tags:
``` python
scenario = {}
settings = [
# (normalization mode, model, optional param for augmented data)
('frame', 'base'),
('sequence', 'multi', 'mirror-seated'),
('frame', 'multi', 'mirror-seated')
]
for run in settings:
print(run)
scenario[run] = {}
option = ''
if len(run) == 3:
option = '-' + run[2]
for subject in [13,14, 15]:
scenario[run][subject] = procrustes_test(subject, norm_mode=run[0], model=run[1], optional=option)
```
%% Output
('frame', 'base')
338/338 [==============================] - 1s 2ms/step
13 0.021978279842198047
348/348 [==============================] - 1s 1ms/step
14 0.020342736339673068
456/456 [==============================] - 1s 2ms/step
15 0.012317634764888277
('sequence', 'multi', 'mirror-seated')
338/338 [==============================] - 1s 2ms/step
13 0.013923522028543132
348/348 [==============================] - 1s 2ms/step
14 0.011720896994829746
456/456 [==============================] - 1s 2ms/step
15 0.007090088469298017
('frame', 'multi', 'mirror-seated')
338/338 [==============================] - 1s 2ms/step
13 0.01547684330812897
348/348 [==============================] - 1s 2ms/step
14 0.015748800869819828
456/456 [==============================] - 1s 2ms/step
15 0.009700461101398751
%% Cell type:code id: tags:
``` python
import pickle
data, df = {}, {}
df_list = []
for subject in [13,14, 15]:
subject_num = subject
blender_file = 'logs/blender_dicts/Subject{}.p'.format(subject_num)
bvh_logs = pickle.load( open( blender_file, "rb" ) )
data[subject] = []
for key, value in bvh_logs.items():
_, bvh_sequence = key.split("_")
sequence, _ = bvh_sequence.split(".")
sequence = int(sequence)
for i, frame in enumerate(value):
data[subject].append([subject, sequence, i])
df[subject] = pd.DataFrame(data=data[subject], columns=['subject', 'sequence', 'frame'])
df[subject]['orig_index'] = df[subject].index.copy(deep=True)
df_list.append(df[subject])
```
%% Cell type:code id: tags:
``` python
for run in settings:
for subject in [13,14,15]:
df[subject][str(run)] = scenario[run][subject][0].tolist()
```
%% Cell type:markdown id: tags:
### General summary of aggregate performance
---
%% Cell type:code id: tags:
``` python
# General summary of aggregate performance
all_data = pd.concat([df[13], df[14], df[15]])
all_data = all_data.reset_index()
summary = all_data.filter(like='(', axis=1).describe(percentiles=[0.10, 0.15, 0.25,0.5,0.75,0.9,0.95,0.99,0.995, 0.998, 0.999])
summary.to_latex()
#all_data.describe(percentiles=[0.25,0.5,0.75,0.9,0.95,0.99,0.995])
```
%% Output
"\\begin{tabular}{lrrr}\n\\toprule\n{} & ('frame', 'base') & ('sequence', 'multi', 'mirror-seated') & ('frame', 'multi', 'mirror-seated') \\\\\n\\midrule\ncount & 36506.000000 & 36506.000000 & 36506.000000 \\\\\nmean & 0.017623 & 0.010524 & 0.013254 \\\\\nstd & 0.023077 & 0.017905 & 0.016020 \\\\\nmin & 0.000334 & 0.000231 & 0.000311 \\\\\n10\\% & 0.003087 & 0.001465 & 0.002410 \\\\\n15\\% & 0.003783 & 0.001786 & 0.002982 \\\\\n25\\% & 0.005249 & 0.002477 & 0.004073 \\\\\n50\\% & 0.010106 & 0.004953 & 0.007695 \\\\\n75\\% & 0.020238 & 0.010578 & 0.015687 \\\\\n90\\% & 0.040538 & 0.023622 & 0.030747 \\\\\n95\\% & 0.057629 & 0.038913 & 0.045224 \\\\\n99\\% & 0.116373 & 0.094522 & 0.080378 \\\\\n99.5\\% & 0.143658 & 0.118510 & 0.096798 \\\\\n99.8\\% & 0.186057 & 0.154066 & 0.113959 \\\\\n99.9\\% & 0.238149 & 0.180831 & 0.131468 \\\\\nmax & 0.367077 & 0.417387 & 0.225644 \\\\\n\\bottomrule\n\\end{tabular}\n"
%% Cell type:code id: tags:
``` python
all_data["('frame', 'multi', 'mirror-seated')"].plot.kde(xlim=(-.01,0.22))
```
%% Output
<matplotlib.axes._subplots.AxesSubplot at 0x7fc1dc5ee9d0>
%% Cell type:code id: tags:
``` python
# I might not need it
all_data["('frame', 'multi', 'mirror-seated')"].plot.kde(logx=True)
```
%% Output
<matplotlib.axes._subplots.AxesSubplot at 0x7fc1daf9c880>
%% Cell type:markdown id: tags:
### Identify high-error poses
%% Cell type:code id: tags:
``` python
a = str(settings[2])
high_error = {}
for subject in [13,14,15]:
idx = df[subject].groupby(['subject','sequence'])[a].transform(max) == df[subject][a]
# Exclude sequence 14-36 because it appears to be an exact duplicate of 14-31
if subject == 14:
df[subject] = df[subject][df[subject]['sequence'] != 36]
#df[subject][idx].sort_values(by=['base'], ascending=False)[0:50]
high_error[subject] = df[subject][idx].nlargest(10,a)
high_errors = pd.concat([high_error[13], high_error[14], high_error[15]])
# 'seats' is hard-coded based on the visualizations later. Update if necessary
#seats = [True, True, True, False, True, True, True, True, True, False, False, False]
#high_errors.insert(4, 'seated', seats, allow_duplicates=False)
high_errors
```
%% Output
<ipython-input-62-4ad28937f719>:10: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
high_error[subject] = df[subject][idx].nlargest(10,a)
subject sequence frame orig_index ('frame', 'base') \
6261 13 29 196 6261 0.100702
10104 13 4 171 10104 0.141754
6826 13 3 158 6826 0.114753
303 13 18 262 303 0.114456
9192 13 26 297 9192 0.009163
3851 13 17 246 3851 0.106593
8501 13 30 117 8501 0.035852
5046 13 31 248 5046 0.084261
7309 13 28 271 7309 0.089964
2643 13 6 90 2643 0.119409
256 14 6 182 256 0.090117
10501 14 1 377 10501 0.143461
5736 14 2 158 5736 0.093621
7582 14 15 158 7582 0.064697
4649 14 3 45 4649 0.126673
8647 14 14 146 8647 0.069056
1676 14 13 126 1676 0.054442
1091 14 30 209 1091 0.095095
1495 14 28 149 1495 0.085359
6810 14 20 110 6810 0.082090
2722 15 6 193 2722 0.130825
12928 15 13 224 12928 0.152422
3719 15 12 831 3719 0.037926
8241 15 2 1278 8241 0.362257
4656 15 8 310 4656 0.020231
1899 15 4 1899 1899 0.074985
11855 15 3 404 11855 0.032151
5056 15 7 326 5056 0.017772
10127 15 5 969 10127 0.005770
14314 15 11 679 14314 0.009450
('sequence', 'multi', 'mirror-seated') \
6261 0.043361
10104 0.187564
6826 0.120377
303 0.086160
9192 0.003290
3851 0.125251
8501 0.148434
5046 0.072190
7309 0.020845
2643 0.073248
256 0.059797
10501 0.053112
5736 0.036431
7582 0.024606
4649 0.084130
8647 0.083888
1676 0.096755
1091 0.036065
1495 0.143717
6810 0.021913
2722 0.154068
12928 0.249848
3719 0.140073
8241 0.362136
4656 0.118147
1899 0.145895
11855 0.037595
5056 0.018433
10127 0.003757
14314 0.003088
('frame', 'multi', 'mirror-seated')
6261 0.168697
10104 0.136077
6826 0.113167
303 0.110495
9192 0.105240
3851 0.098624
8501 0.092016
5046 0.090038
7309 0.089346
2643 0.087647
256 0.198975
10501 0.143791
5736 0.132951
7582 0.128306
4649 0.125267
8647 0.123644
1676 0.116784
1091 0.115192
1495 0.108192
6810 0.103561
2722 0.225644
12928 0.175328
3719 0.150692
8241 0.139882
4656 0.111607
1899 0.108318
11855 0.067614
5056 0.063495
10127 0.061650
14314 0.041699
%% Cell type:markdown id: tags:
### Supplement selected poses with the two poses before and after them in their sequence
%% Cell type:code id: tags:
``` python
df_high = pd.DataFrame()
for index, row in high_errors.iterrows():
subject = row['subject']
orig_index = row['orig_index']
new_slice = df[subject].loc[df[subject]['orig_index'].isin(range(int(orig_index)-2,int(orig_index)+3))]
#new_slice['seated'] = row['seated']
df_high = pd.concat([df_high, new_slice])
high_error_groups = df_high.groupby(['subject','sequence']).mean()
high_error_groups
```
%% Output
frame orig_index ('frame', 'base') \
subject sequence
13 3 158.0 6826.0 0.106888
4 171.0 10104.0 0.140981
6 90.0 2643.0 0.117075
17 246.0 3851.0 0.093508
18 262.0 303.0 0.101177
26 297.0 9192.0 0.009009
28 271.0 7309.0 0.059753
29 196.0 6261.0 0.073214
30 117.0 8501.0 0.035566
31 248.0 5046.0 0.034613
14 1 377.0 10501.0 0.118429
2 158.0 5736.0 0.054408
3 45.0 4649.0 0.075509
6 182.0 256.0 0.072954
13 126.0 1676.0 0.041578
14 146.0 8647.0 0.055413
15 158.0 7582.0 0.053011
20 110.0 6810.0 0.068734
28 149.0 1495.0 0.080001
30 209.0 1091.0 0.090548
15 2 1278.0 8241.0 0.261834
3 404.0 11855.0 0.015519
4 1899.0 1899.0 0.060230
5 969.0 10127.0 0.008147
6 193.0 2722.0 0.100541
7 326.0 5056.0 0.016744
8 310.0 4656.0 0.017395
11 679.0 14314.0 0.011151
12 831.0 3719.0 0.030421
13 224.0 12928.0 0.098001
('sequence', 'multi', 'mirror-seated') \
subject sequence
13 3 0.115146
4 0.185382
6 0.073610
17 0.077770
18 0.060356
26 0.003742
28 0.015000
29 0.035204
30 0.091443
31 0.023531
14 1 0.052397
2 0.022189
3 0.053284
6 0.097876
13 0.056939
14 0.071545
15 0.017921
20 0.045347
28 0.139864
30 0.036759
15 2 0.201097
3 0.016781
4 0.072610
5 0.003651
6 0.117081
7 0.016347
8 0.046004
11 0.008459
12 0.110475
13 0.080057
('frame', 'multi', 'mirror-seated')
subject sequence
13 3 0.108269
4 0.131916
6 0.082539
17 0.077094
18 0.068011
26 0.026404
28 0.057831
29 0.085461
30 0.072744
31 0.029682
14 1 0.109134
2 0.046213
3 0.066171
6 0.167820
13 0.077528
14 0.108556
15 0.096077
20 0.087334
28 0.095297
30 0.104269
15 2 0.062720
3 0.030279
4 0.076165
5 0.028721
6 0.154106
7 0.058596
8 0.046927
11 0.022050
12 0.060707
13 0.090009
%% Cell type:markdown id: tags:
### Average error on seated poses and non-seated poses
%% Cell type:code id: tags:
``` python
high_summary = high_errors.groupby(['seated']).mean()
high_filtered = high_summary.filter(like='(', axis=1)
high_filtered
```
%% Output
('frame', 'base') ('sequence', 'multi', 'mirror-seated') \
seated
False 0.166765 0.209554
True 0.109991 0.084915
('frame', 'multi', 'mirror-seated')
seated
False 0.144099
True 0.155951
%% Cell type:code id: tags:
``` python
high_summary_group = high_error_groups.groupby(['seated']).mean()
high_filtered_group = high_summary_group.filter(like='(', axis=1)
high_filtered_group
```
%% Output
('frame', 'base') ('sequence', 'multi', 'mirror-seated') \
seated
0.0 0.122858 0.112996
1.0 0.090053 0.080400
('frame', 'multi', 'mirror-seated')
seated
0.0 0.070362
1.0 0.112375
%% Cell type:markdown id: tags:
### Visualize high-error poses
%% Cell type:code id: tags:
``` python
import matplotlib.pyplot as plt
import math
import mpl_toolkits.mplot3d.axes3d as p3
```
%% Cell type:code id: tags:
``` python
high_error_dict = {}
for subject in [13,14,15]:
high_error_dict[subject] = []
for index, line in high_errors.iterrows():
subject = int(line['subject'])
frame = int(line['orig_index'])
high_error_dict[subject].append(frame)
high_error_dict
```
%% Output
{13: [6261, 10104, 6826, 303, 9192, 3851, 8501, 5046, 7309, 2643],
14: [256, 10501, 5736, 7582, 4649, 8647, 1676, 1091, 1495, 6810],
15: [2722, 12928, 3719, 8241, 4656, 1899, 11855, 5056, 10127, 14314]}
%% Cell type:code id: tags:
``` python
def inder(char):
return ord(char) - 97
def draw_pose(keypoints, ax, color):
ax.scatter(keypoints[2], keypoints[0], keypoints[1], c=color)
ax.plot(keypoints[2][[inder('a'), inder('b')]], keypoints[0][[inder('a'), inder('b')]], keypoints[1][[inder('a'), inder('b')]], c=color)
ax.plot(keypoints[2][[inder('b'), inder('c')]], keypoints[0][[inder('b'), inder('c')]], keypoints[1][[inder('b'), inder('c')]], c=color)
ax.plot(keypoints[2][[inder('c'), inder('d')]], keypoints[0][[inder('c'), inder('d')]], keypoints[1][[inder('c'), inder('d')]], c=color)
ax.plot(keypoints[2][[inder('d'), inder('e')]], keypoints[0][[inder('d'), inder('e')]], keypoints[1][[inder('d'), inder('e')]], c=color)
ax.plot(keypoints[2][[inder('b'), inder('f')]], keypoints[0][[inder('b'), inder('f')]], keypoints[1][[inder('b'), inder('f')]], c=color)
ax.plot(keypoints[2][[inder('f'), inder('g')]], keypoints[0][[inder('f'), inder('g')]], keypoints[1][[inder('f'), inder('g')]], c=color)
ax.plot(keypoints[2][[inder('g'), inder('h')]], keypoints[0][[inder('g'), inder('h')]], keypoints[1][[inder('g'), inder('h')]], c=color)
ax.plot(keypoints[2][[inder('i'), inder('j')]], keypoints[0][[inder('i'), inder('j')]], keypoints[1][[inder('i'), inder('j')]], c=color)
ax.plot(keypoints[2][[inder('j'), inder('k')]], keypoints[0][[inder('j'), inder('k')]], keypoints[1][[inder('j'), inder('k')]], c=color)
ax.plot(keypoints[2][[inder('l'), inder('m')]], keypoints[0][[inder('l'), inder('m')]], keypoints[1][[inder('l'), inder('m')]], c=color)
ax.plot(keypoints[2][[inder('m'), inder('n')]], keypoints[0][[inder('m'), inder('n')]], keypoints[1][[inder('m'), inder('n')]], c=color)
ax.plot(keypoints[2][[inder('o'), inder('i')]], keypoints[0][[inder('o'), inder('i')]], keypoints[1][[inder('o'), inder('i')]], c=color)
ax.plot(keypoints[2][[inder('o'), inder('l')]], keypoints[0][[inder('o'), inder('l')]], keypoints[1][[inder('o'), inder('l')]], c=color)
ax.plot(keypoints[2][[inder('o'), inder('b')]], keypoints[0][[inder('o'), inder('b')]], keypoints[1][[inder('o'), inder('b')]], c=color)
ax.set_xlim([-2,2])
ax.set_ylim([-2,2])
ax.set_zlim([-2,2])
def plot_pose(keypointsTrue, keypointsFalse, ax):
draw_pose(keypointsTrue, ax, 'b')
draw_pose(keypointsFalse, ax, 'r')
```
%% Cell type:code id: tags:
``` python
for subject in [13,14,15]:
fig = plt.figure(figsize=(100, 20))#plt.figure(figsize = (36,9))
n = len(high_error_dict[subject])
ax = {}
for i, frame in enumerate(high_error_dict[subject]):
#fig.axis('off')
run = ('frame', 'multi','mirror-seated')
mode = scenario[run]
ax[i] = fig.add_subplot(1,n,i+1, projection = '3d')
ax[i].set_title((run, 'Subject: ', subject, frame, 'Error: ', round(mode[subject][0][frame],2)))
plot_pose(mode[subject][2][frame].transpose(), mode[subject][1][frame].transpose(), ax[i])
```
%% Output
%% Cell type:markdown id: tags:
### Show before/after change
%% Cell type:code id: tags:
``` python
for subject in [13,14,15]:
for frame in high_error_dict[subject]:
fig = plt.figure(figsize = (18,9))
n = 2
ax = {}
for i, run in enumerate([
('frame', 'base'),
#('frame', 'base', 'archive'),
#('sequence', 'base'),
#('frame', 'dropout'),
#('sequence', 'dropout'),
#('frame', 'multi'),
#('sequence', 'multi'),
#('sequence', 'multi', 'seated'),
#('sequence', 'multi', 'mirror-seated'),
('frame', 'multi', 'mirror-seated'),
]):
mode = scenario[run]
ax[i] = fig.add_subplot(1,n,i+1, projection = '3d')
ax[i].set_title((run, 'Subject: ', subject, frame, 'Error: ', round(mode[subject][0][frame],3)))
plot_pose(mode[subject][2][frame].transpose(), mode[subject][1][frame].transpose(), ax[i])
```
%% Output
%% Cell type:markdown id: tags:
### Draw representative poses at different error percentiles
%% Cell type:code id: tags:
``` python
import os
import pandas as pd
percent = [0.1, 0.15, 0.25, 0.5, 0.75, 0.9, 0.99, 0.995, 0.998, 0.999]
poses = {}
a = str(settings[2])
sorted_all = all_data.sort_values(by=[a], ascending=True)
for point in percent:
poses[point] = []
ind = int(len(all_data) * point)
if point == 0.999:
my_list = pd.concat((sorted_all[ind+6:ind+10], sorted_all[ind+11:ind+12]))
elif point == 0.998:
my_list = pd.concat((sorted_all[ind-4: ind-2], sorted_all[ind : ind +2], sorted_all[ind+7:ind+8]))
else:
my_list = sorted_all[ind-2:ind+3]
for index, line in my_list.iterrows():
poses[point].append([int(line['subject']), int(line['orig_index'])])
for l, error_list in enumerate(poses.values()):
fig = plt.figure(figsize = (45,9))
#fig.axis('off')
n = len(poses[point])
ax = {}
for i, pose in enumerate(error_list):
subject = pose[0]
frame = pose[1]
ax[i] = fig.add_subplot(1,n,i+1, projection = '3d')
#ax[i].axis('off')
#ax[i].set_title((run, subject, frame, round(mode[subject][0][frame],2)))
plot_pose(mode[subject][2][frame].transpose(), mode[subject][1][frame].transpose(), ax[i])
fig.savefig(os.path.join("logs", "evaluation", "PercentilePoses",("fig"+str(l)+".png")), bbox_inches='tight')
```
%% Output
%% Cell type:code id: tags:
``` python
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment