Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
R
Real-time 3D multi-person human pose estimation using an omnidirectional camera and three mm-Wave radars
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
at2n19
Real-time 3D multi-person human pose estimation using an omnidirectional camera and three mm-Wave radars
Commits
df97a468
Commit
df97a468
authored
2 years ago
by
at2n19
Browse files
Options
Downloads
Patches
Plain Diff
Upload New File
parent
104ecbee
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
3Dposeestimates_3_.ipynb
+1
-0
1 addition, 0 deletions
3Dposeestimates_3_.ipynb
with
1 addition
and
0 deletions
3Dposeestimates_3_.ipynb
0 → 100644
+
1
−
0
View file @
df97a468
{
"cells"
:
[{
"cell_type"
:
"code"
,
"execution_count"
:
null
,
"metadata"
:
{
"colab"
:
{
"base_uri"
:
"https://localhost:8080/"
},
"executionInfo"
:
{
"elapsed"
:
27930
,
"status"
:
"ok"
,
"timestamp"
:
1670920608019
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
},
"user_tz"
:-
60
},
"id"
:
"q3OnW8g8VO_C"
,
"outputId"
:
"8c91069e-32c7-498e-e7c6-1d60ffc5735c"
},
"outputs"
:
[{
"output_type"
:
"stream"
,
"name"
:
"stdout"
,
"text"
:
[
"Mounted at /content/drive
\n
"
]}],
"source"
:
[
"from google.colab import drive
\n
"
,
"drive.mount('/content/drive')"
]},{
"cell_type"
:
"code"
,
"execution_count"
:
null
,
"metadata"
:
{
"colab"
:
{
"base_uri"
:
"https://localhost:8080/"
},
"executionInfo"
:
{
"elapsed"
:
833
,
"status"
:
"ok"
,
"timestamp"
:
1670920611744
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
},
"user_tz"
:-
60
},
"id"
:
"ODXKyWj8VHRh"
,
"outputId"
:
"6ec278d2-be38-4fe7-cb85-c98ece9f201d"
},
"outputs"
:
[{
"output_type"
:
"stream"
,
"name"
:
"stdout"
,
"text"
:
[
"/content/drive/MyDrive/3d-pose-2d-keypoints-present
\n
"
]}],
"source"
:
[
"%cd drive/MyDrive/3d-pose-2d-keypoints-present/"
]},{
"cell_type"
:
"code"
,
"execution_count"
:
53
,
"metadata"
:
{
"id"
:
"xno3aPbeUN3h"
,
"executionInfo"
:
{
"status"
:
"ok"
,
"timestamp"
:
1670939884140
,
"user_tz"
:-
60
,
"elapsed"
:
425
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
}}},
"outputs"
:
[],
"source"
:
[
"import numpy as np
\n
"
,
"np.set_printoptions(suppress=True)
\n
"
,
"import pandas as pd
\n
"
,
"%matplotlib inline"
]},{
"cell_type"
:
"code"
,
"execution_count"
:
54
,
"metadata"
:
{
"id"
:
"8z8KKUJ1UN3o"
,
"executionInfo"
:
{
"status"
:
"ok"
,
"timestamp"
:
1670939887925
,
"user_tz"
:-
60
,
"elapsed"
:
1110
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
}}},
"outputs"
:
[],
"source"
:
[
"test_file = 'logs/train_test/Subject
{
0}test{1
}
.npy'
\n
"
,
"weight_file = '
{
0}-{1}{2
}
.hdf5' # norm_type, modelTrueTr
\n
"
,
"weight_root = 'logs/weights/'
\n
"
,
"weight_loc = weight_root + weight_file"
]},{
"cell_type"
:
"code"
,
"execution_count"
:
55
,
"metadata"
:
{
"id"
:
"DPprUYHWUN3p"
,
"executionInfo"
:
{
"status"
:
"ok"
,
"timestamp"
:
1670939889311
,
"user_tz"
:-
60
,
"elapsed"
:
7
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
}}},
"outputs"
:
[],
"source"
:
[
"from scipy import spatial
\n
"
,
"
\n
"
,
"def procustes_distance(test, pred):
\n
"
,
" proc = np.zeros((test.shape[0]))
\n
"
,
" for i in range(test.shape[0]):
\n
"
,
" a, b, proc[i] = spatial.procrustes(test[i], pred[i])
\n
"
,
"
\n
"
,
" return proc
\n
"
,
"
\n
"
,
"def test_predictions(subject_num, norm_mode, model, weights, optional=''):
\n
"
,
"
\n
"
,
" model.load_weights(weights)
\n
"
,
" coordinate_log = test_file.format(subject_num, norm_mode)
\n
"
,
" if subject == 86:
\n
"
,
" coordinate_log = 'logs/train_test/Subject
{
0}train{1
}
.npy'.format(subject_num, norm_mode)
\n
"
,
"
\n
"
,
" test = np.load(coordinate_log)
\n
"
,
" y_test = test[:,:,2]
\n
"
,
" X_data = test[:,:,0:2]
\n
"
,
" X_test = X_data.reshape(X_data.shape[0], X_data.shape[1] * X_data.shape[2])
\n
"
,
" pred = model.predict(X_test)
\n
"
,
" pred_3d = test.copy()
\n
"
,
" pred_3d[:,:,2] = pred
\n
"
,
" return test, pred_3d
\n
"
,
"
\n
"
,
"def procrustes_test(subject_num, norm_mode, model, optional=''):
\n
"
,
" weights = weight_loc.format(norm_mode, model, optional)
\n
"
,
" model = k_models[model]
\n
"
,
" model.compile(loss=euc_dist_keras, optimizer='rmsprop')
\n
"
,
" test, pred = test_predictions(subject_num, norm_mode, model, weights)
\n
"
,
" proc = procustes_distance(test, pred)
\n
"
,
" print(subject_num, proc.mean(), )
\n
"
,
" return proc, pred, test"
]},{
"cell_type"
:
"code"
,
"execution_count"
:
56
,
"metadata"
:
{
"id"
:
"Qtc09oxrUN3r"
,
"executionInfo"
:
{
"status"
:
"ok"
,
"timestamp"
:
1670939892860
,
"user_tz"
:-
60
,
"elapsed"
:
1137
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
}}},
"outputs"
:
[],
"source"
:
[
"import keras
\n
"
,
"from keras.models import Model
\n
"
,
"from keras.layers import Dense, Activation, Dropout, Input
\n
"
,
"from keras.optimizers import SGD
\n
"
,
"from keras.callbacks import ModelCheckpoint
\n
"
,
"from keras.models import model_from_json
\n
"
,
"from keras.layers import Concatenate, Add
\n
"
,
"from keras import backend as K
\n
"
,
"def euc_dist_keras(y_true, y_pred):
\n
"
,
" return K.sqrt(K.sum(K.square(y_true - y_pred), axis=-1, keepdims=True))"
]},{
"cell_type"
:
"code"
,
"execution_count"
:
57
,
"metadata"
:
{
"id"
:
"t1soLy-9UN3t"
,
"executionInfo"
:
{
"status"
:
"ok"
,
"timestamp"
:
1670939894563
,
"user_tz"
:-
60
,
"elapsed"
:
1099
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
}}},
"outputs"
:
[],
"source"
:
[
"def base():
\n
"
,
" input1 = Input(shape=(30,))
\n
"
,
"
\n
"
,
" x = Dense(30)(input1)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(15)(x)
\n
"
,
" final = Activation(
\"
tanh
\"
)(x)
\n
"
,
"
\n
"
,
"
\n
"
,
" model = Model(inputs=input1,outputs=final)
\n
"
,
" return model
\n
"
,
"
\n
"
,
"
\n
"
,
"# SIMPLE DROPOUT
\n
"
,
"
\n
"
,
"def dropout():
\n
"
,
" input1 = Input(shape=(30,))
\n
"
,
"
\n
"
,
" x = Dense(30)(input1)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dropout(0.3)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dropout(0.2)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dropout(0.2)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(15)(x)
\n
"
,
" final = Activation(
\"
tanh
\"
)(x)
\n
"
,
"
\n
"
,
"
\n
"
,
" model = Model(inputs=input1,outputs=final)
\n
"
,
" return model
\n
"
,
"
\n
"
,
"# MULTI-STAGE MODEL
\n
"
,
"
\n
"
,
"def multi():
\n
"
,
" input1 = Input(shape=(30,))
\n
"
,
"
\n
"
,
" x = Dense(30)(input1)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dropout(0.20)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dropout(0.20)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(15)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
"
\n
"
,
" x = Concatenate()([input1, x])
\n
"
,
" x = Dense(45)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(45)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dropout(0.10)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(15)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
"
\n
"
,
" x = Concatenate()([input1, x])
\n
"
,
" x = Dense(45)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(45)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dropout(0.10)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(15)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
"
\n
"
,
" x = Concatenate()([input1, x])
\n
"
,
" x = Dense(45)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(45)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dropout(0.10)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(15)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
"
\n
"
,
" x = Concatenate()([input1, x])
\n
"
,
" x = Dense(45)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(45)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dropout(0.10)(x)
\n
"
,
" x = Dense(30)(x)
\n
"
,
" x = Activation(
\"
tanh
\"
)(x)
\n
"
,
" x = Dense(15)(x)
\n
"
,
" final = Activation(
\"
tanh
\"
)(x)
\n
"
,
"
\n
"
,
" model = Model(inputs=input1,outputs=final)
\n
"
,
" return model
\n
"
,
"
\n
"
,
"k_models = {\n"
,
" 'base' : base(),
\n
"
,
" 'dropout' : dropout(),
\n
"
,
" 'multi' : multi(),
\n
"
,
"}
\n
"
,
"
\n
"
]},{
"cell_type"
:
"code"
,
"execution_count"
:
58
,
"metadata"
:
{
"colab"
:
{
"base_uri"
:
"https://localhost:8080/"
},
"executionInfo"
:
{
"elapsed"
:
24564
,
"status"
:
"ok"
,
"timestamp"
:
1670939923626
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
},
"user_tz"
:-
60
},
"id"
:
"tOA5UGnHUN3v"
,
"outputId"
:
"92b946ba-1afa-4930-a1a0-b4143bbb370c"
},
"outputs"
:
[{
"output_type"
:
"stream"
,
"name"
:
"stdout"
,
"text"
:
[
"('frame', 'base')
\n
"
,
"338/338 [==============================] - 1s 2ms/step
\n
"
,
"13 0.021978279842198047
\n
"
,
"348/348 [==============================] - 1s 1ms/step
\n
"
,
"14 0.020342736339673068
\n
"
,
"456/456 [==============================] - 1s 2ms/step
\n
"
,
"15 0.012317634764888277
\n
"
,
"('sequence', 'multi', 'mirror-seated')
\n
"
,
"338/338 [==============================] - 1s 2ms/step
\n
"
,
"13 0.013923522028543132
\n
"
,
"348/348 [==============================] - 1s 2ms/step
\n
"
,
"14 0.011720896994829746
\n
"
,
"456/456 [==============================] - 1s 2ms/step
\n
"
,
"15 0.007090088469298017
\n
"
,
"('frame', 'multi', 'mirror-seated')
\n
"
,
"338/338 [==============================] - 1s 2ms/step
\n
"
,
"13 0.01547684330812897
\n
"
,
"348/348 [==============================] - 1s 2ms/step
\n
"
,
"14 0.015748800869819828
\n
"
,
"456/456 [==============================] - 1s 2ms/step
\n
"
,
"15 0.009700461101398751
\n
"
]}],
"source"
:
[
"scenario = {}
\n
"
,
"
\n
"
,
"settings = [
\n
"
,
" # (normalization mode, model, optional param for augmented data)
\n
"
,
" ('frame', 'base'),
\n
"
,
" ('sequence', 'multi', 'mirror-seated'),
\n
"
,
" ('frame', 'multi', 'mirror-seated')
\n
"
,
"]
\n
"
,
"
\n
"
,
"for run in settings:
\n
"
,
" print(run)
\n
"
,
" scenario[run] = {}
\n
"
,
" option = ''
\n
"
,
" if len(run) == 3:
\n
"
,
" option = '-' + run[2]
\n
"
,
" for subject in [13,14, 15]:
\n
"
,
" scenario[run][subject] = procrustes_test(subject, norm_mode=run[0], model=run[1], optional=option)"
]},{
"cell_type"
:
"code"
,
"execution_count"
:
59
,
"metadata"
:
{
"id"
:
"dpkniSa8UN3x"
,
"executionInfo"
:
{
"status"
:
"ok"
,
"timestamp"
:
1670939931240
,
"user_tz"
:-
60
,
"elapsed"
:
2153
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
}}},
"outputs"
:
[],
"source"
:
[
"import pickle
\n
"
,
"data, df = {}, {}
\n
"
,
"df_list = []
\n
"
,
"for subject in [13,14, 15]:
\n
"
,
" subject_num = subject
\n
"
,
" blender_file = 'logs/blender_dicts/Subject{}.p'.format(subject_num)
\n
"
,
" bvh_logs = pickle.load( open( blender_file,
\"
rb
\"
) )
\n
"
,
"
\n
"
,
" data[subject] = []
\n
"
,
" for key, value in bvh_logs.items():
\n
"
,
" _, bvh_sequence = key.split(
\"
_
\"
)
\n
"
,
" sequence, _ = bvh_sequence.split(
\"
.
\"
)
\n
"
,
" sequence = int(sequence)
\n
"
,
" for i, frame in enumerate(value):
\n
"
,
" data[subject].append([subject, sequence, i])
\n
"
,
"
\n
"
,
"
\n
"
,
" df[subject] = pd.DataFrame(data=data[subject], columns=['subject', 'sequence', 'frame'])
\n
"
,
" df[subject]['orig_index'] = df[subject].index.copy(deep=True)
\n
"
,
"
\n
"
,
" df_list.append(df[subject])"
]},{
"cell_type"
:
"code"
,
"execution_count"
:
60
,
"metadata"
:
{
"id"
:
"sSqtnkRFUN3y"
,
"executionInfo"
:
{
"status"
:
"ok"
,
"timestamp"
:
1670939947331
,
"user_tz"
:-
60
,
"elapsed"
:
695
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
}}},
"outputs"
:
[],
"source"
:
[
"for run in settings:
\n
"
,
" for subject in [13,14,15]:
\n
"
,
" df[subject][str(run)] = scenario[run][subject][0].tolist()"
]},{
"cell_type"
:
"markdown"
,
"metadata"
:
{
"id"
:
"9o_sGLa5UN30"
},
"source"
:
[
"### General summary of aggregate performance
\n
"
,
"
\n
"
,
"---
\n
"
,
"
\n
"
]},{
"cell_type"
:
"code"
,
"execution_count"
:
61
,
"metadata"
:
{
"colab"
:
{
"base_uri"
:
"https://localhost:8080/"
,
"height"
:
140
},
"executionInfo"
:
{
"elapsed"
:
578
,
"status"
:
"ok"
,
"timestamp"
:
1670939959919
,
"user"
:
{
"displayName"
:
"Edmondo Tamajo"
,
"userId"
:
"15585946477788184417"
},
"user_tz"
:-
60
},
"id"
:
"TMg9BUeGUN34"
,
"outputId"
:
"ce5e25dd-2918-4e90-aa16-6a482babf2e6"
},
"outputs"
:
[{
"output_type"
:
"execute_result"
,
"data"
:
{
"text/plain"
:
[
"
\"\\\\
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\""],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":61
}
],"
source
":["
# General summary of aggregate performance\n","\n","all_data = pd.concat([df[13], df[14], df[15]])\n","all_data = all_data.reset_index()\n","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])\n","summary.to_latex()\n","#all_data.describe(percentiles=[0.25,0.5,0.75,0.9,0.95,0.99,0.995])"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":282},"executionInfo":{"elapsed":4127,"status":"ok","timestamp":1670875532272,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"},"user_tz":-60},"id":"Hp_rpw28UN35","outputId":"c35e655b-2ae5-4f60-d5c8-87511617c0eb"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["<matplotlib.axes._subplots.AxesSubplot at 0x7fc1dc5ee9d0>"]},"metadata":{},"execution_count":13},{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}],"source":["all_data[\"('frame', 'multi', 'mirror-seated')\"].plot.kde(xlim=(-.01,0.22))"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":286},"executionInfo":{"elapsed":3035,"status":"ok","timestamp":1670875535289,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"},"user_tz":-60},"id":"HaSp9aWlUN36","outputId":"726da38d-c020-46be-f182-6e2bf289ebca"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["<matplotlib.axes._subplots.AxesSubplot at 0x7fc1daf9c880>"]},"metadata":{},"execution_count":14},{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}],"source":["# I might not need it \n","all_data[\"('frame', 'multi', 'mirror-seated')\"].plot.kde(logx=True) "]},{"cell_type":"markdown","metadata":{"id":"c7zS16ZZUN37"},"source":["### Identify high-error poses"]},{"cell_type":"code","execution_count":62,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"elapsed":536,"status":"ok","timestamp":1670939976361,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"},"user_tz":-60},"id":"MVzk2ah9UN38","outputId":"6e0c2f42-2cee-45e4-f1f1-f3cca262aad8"},"outputs":[{"output_type":"stream","name":"stderr","text":["<ipython-input-62-4ad28937f719>:10: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n"," high_error[subject] = df[subject][idx].nlargest(10,a)\n"]},{"output_type":"execute_result","data":{"text/plain":[" subject sequence frame orig_index ('frame', 'base') \\\n","6261 13 29 196 6261 0.100702 \n","10104 13 4 171 10104 0.141754 \n","6826 13 3 158 6826 0.114753 \n","303 13 18 262 303 0.114456 \n","9192 13 26 297 9192 0.009163 \n","3851 13 17 246 3851 0.106593 \n","8501 13 30 117 8501 0.035852 \n","5046 13 31 248 5046 0.084261 \n","7309 13 28 271 7309 0.089964 \n","2643 13 6 90 2643 0.119409 \n","256 14 6 182 256 0.090117 \n","10501 14 1 377 10501 0.143461 \n","5736 14 2 158 5736 0.093621 \n","7582 14 15 158 7582 0.064697 \n","4649 14 3 45 4649 0.126673 \n","8647 14 14 146 8647 0.069056 \n","1676 14 13 126 1676 0.054442 \n","1091 14 30 209 1091 0.095095 \n","1495 14 28 149 1495 0.085359 \n","6810 14 20 110 6810 0.082090 \n","2722 15 6 193 2722 0.130825 \n","12928 15 13 224 12928 0.152422 \n","3719 15 12 831 3719 0.037926 \n","8241 15 2 1278 8241 0.362257 \n","4656 15 8 310 4656 0.020231 \n","1899 15 4 1899 1899 0.074985 \n","11855 15 3 404 11855 0.032151 \n","5056 15 7 326 5056 0.017772 \n","10127 15 5 969 10127 0.005770 \n","14314 15 11 679 14314 0.009450 \n","\n"," ('sequence', 'multi', 'mirror-seated') \\\n","6261 0.043361 \n","10104 0.187564 \n","6826 0.120377 \n","303 0.086160 \n","9192 0.003290 \n","3851 0.125251 \n","8501 0.148434 \n","5046 0.072190 \n","7309 0.020845 \n","2643 0.073248 \n","256 0.059797 \n","10501 0.053112 \n","5736 0.036431 \n","7582 0.024606 \n","4649 0.084130 \n","8647 0.083888 \n","1676 0.096755 \n","1091 0.036065 \n","1495 0.143717 \n","6810 0.021913 \n","2722 0.154068 \n","12928 0.249848 \n","3719 0.140073 \n","8241 0.362136 \n","4656 0.118147 \n","1899 0.145895 \n","11855 0.037595 \n","5056 0.018433 \n","10127 0.003757 \n","14314 0.003088 \n","\n"," ('frame', 'multi', 'mirror-seated') \n","6261 0.168697 \n","10104 0.136077 \n","6826 0.113167 \n","303 0.110495 \n","9192 0.105240 \n","3851 0.098624 \n","8501 0.092016 \n","5046 0.090038 \n","7309 0.089346 \n","2643 0.087647 \n","256 0.198975 \n","10501 0.143791 \n","5736 0.132951 \n","7582 0.128306 \n","4649 0.125267 \n","8647 0.123644 \n","1676 0.116784 \n","1091 0.115192 \n","1495 0.108192 \n","6810 0.103561 \n","2722 0.225644 \n","12928 0.175328 \n","3719 0.150692 \n","8241 0.139882 \n","4656 0.111607 \n","1899 0.108318 \n","11855 0.067614 \n","5056 0.063495 \n","10127 0.061650 \n","14314 0.041699 "],"text/html":["\n"," <div id=\"df-4400a64d-8693-4dcc-9f5e-ed52ad53c049\">\n"," <div class=\"colab-df-container\">\n"," <div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>subject</th>\n"," <th>sequence</th>\n"," <th>frame</th>\n"," <th>orig_index</th>\n"," <th>('frame', 'base')</th>\n"," <th>('sequence', 'multi', 'mirror-seated')</th>\n"," <th>('frame', 'multi', 'mirror-seated')</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>6261</th>\n"," <td>13</td>\n"," <td>29</td>\n"," <td>196</td>\n"," <td>6261</td>\n"," <td>0.100702</td>\n"," <td>0.043361</td>\n"," <td>0.168697</td>\n"," </tr>\n"," <tr>\n"," <th>10104</th>\n"," <td>13</td>\n"," <td>4</td>\n"," <td>171</td>\n"," <td>10104</td>\n"," <td>0.141754</td>\n"," <td>0.187564</td>\n"," <td>0.136077</td>\n"," </tr>\n"," <tr>\n"," <th>6826</th>\n"," <td>13</td>\n"," <td>3</td>\n"," <td>158</td>\n"," <td>6826</td>\n"," <td>0.114753</td>\n"," <td>0.120377</td>\n"," <td>0.113167</td>\n"," </tr>\n"," <tr>\n"," <th>303</th>\n"," <td>13</td>\n"," <td>18</td>\n"," <td>262</td>\n"," <td>303</td>\n"," <td>0.114456</td>\n"," <td>0.086160</td>\n"," <td>0.110495</td>\n"," </tr>\n"," <tr>\n"," <th>9192</th>\n"," <td>13</td>\n"," <td>26</td>\n"," <td>297</td>\n"," <td>9192</td>\n"," <td>0.009163</td>\n"," <td>0.003290</td>\n"," <td>0.105240</td>\n"," </tr>\n"," <tr>\n"," <th>3851</th>\n"," <td>13</td>\n"," <td>17</td>\n"," <td>246</td>\n"," <td>3851</td>\n"," <td>0.106593</td>\n"," <td>0.125251</td>\n"," <td>0.098624</td>\n"," </tr>\n"," <tr>\n"," <th>8501</th>\n"," <td>13</td>\n"," <td>30</td>\n"," <td>117</td>\n"," <td>8501</td>\n"," <td>0.035852</td>\n"," <td>0.148434</td>\n"," <td>0.092016</td>\n"," </tr>\n"," <tr>\n"," <th>5046</th>\n"," <td>13</td>\n"," <td>31</td>\n"," <td>248</td>\n"," <td>5046</td>\n"," <td>0.084261</td>\n"," <td>0.072190</td>\n"," <td>0.090038</td>\n"," </tr>\n"," <tr>\n"," <th>7309</th>\n"," <td>13</td>\n"," <td>28</td>\n"," <td>271</td>\n"," <td>7309</td>\n"," <td>0.089964</td>\n"," <td>0.020845</td>\n"," <td>0.089346</td>\n"," </tr>\n"," <tr>\n"," <th>2643</th>\n"," <td>13</td>\n"," <td>6</td>\n"," <td>90</td>\n"," <td>2643</td>\n"," <td>0.119409</td>\n"," <td>0.073248</td>\n"," <td>0.087647</td>\n"," </tr>\n"," <tr>\n"," <th>256</th>\n"," <td>14</td>\n"," <td>6</td>\n"," <td>182</td>\n"," <td>256</td>\n"," <td>0.090117</td>\n"," <td>0.059797</td>\n"," <td>0.198975</td>\n"," </tr>\n"," <tr>\n"," <th>10501</th>\n"," <td>14</td>\n"," <td>1</td>\n"," <td>377</td>\n"," <td>10501</td>\n"," <td>0.143461</td>\n"," <td>0.053112</td>\n"," <td>0.143791</td>\n"," </tr>\n"," <tr>\n"," <th>5736</th>\n"," <td>14</td>\n"," <td>2</td>\n"," <td>158</td>\n"," <td>5736</td>\n"," <td>0.093621</td>\n"," <td>0.036431</td>\n"," <td>0.132951</td>\n"," </tr>\n"," <tr>\n"," <th>7582</th>\n"," <td>14</td>\n"," <td>15</td>\n"," <td>158</td>\n"," <td>7582</td>\n"," <td>0.064697</td>\n"," <td>0.024606</td>\n"," <td>0.128306</td>\n"," </tr>\n"," <tr>\n"," <th>4649</th>\n"," <td>14</td>\n"," <td>3</td>\n"," <td>45</td>\n"," <td>4649</td>\n"," <td>0.126673</td>\n"," <td>0.084130</td>\n"," <td>0.125267</td>\n"," </tr>\n"," <tr>\n"," <th>8647</th>\n"," <td>14</td>\n"," <td>14</td>\n"," <td>146</td>\n"," <td>8647</td>\n"," <td>0.069056</td>\n"," <td>0.083888</td>\n"," <td>0.123644</td>\n"," </tr>\n"," <tr>\n"," <th>1676</th>\n"," <td>14</td>\n"," <td>13</td>\n"," <td>126</td>\n"," <td>1676</td>\n"," <td>0.054442</td>\n"," <td>0.096755</td>\n"," <td>0.116784</td>\n"," </tr>\n"," <tr>\n"," <th>1091</th>\n"," <td>14</td>\n"," <td>30</td>\n"," <td>209</td>\n"," <td>1091</td>\n"," <td>0.095095</td>\n"," <td>0.036065</td>\n"," <td>0.115192</td>\n"," </tr>\n"," <tr>\n"," <th>1495</th>\n"," <td>14</td>\n"," <td>28</td>\n"," <td>149</td>\n"," <td>1495</td>\n"," <td>0.085359</td>\n"," <td>0.143717</td>\n"," <td>0.108192</td>\n"," </tr>\n"," <tr>\n"," <th>6810</th>\n"," <td>14</td>\n"," <td>20</td>\n"," <td>110</td>\n"," <td>6810</td>\n"," <td>0.082090</td>\n"," <td>0.021913</td>\n"," <td>0.103561</td>\n"," </tr>\n"," <tr>\n"," <th>2722</th>\n"," <td>15</td>\n"," <td>6</td>\n"," <td>193</td>\n"," <td>2722</td>\n"," <td>0.130825</td>\n"," <td>0.154068</td>\n"," <td>0.225644</td>\n"," </tr>\n"," <tr>\n"," <th>12928</th>\n"," <td>15</td>\n"," <td>13</td>\n"," <td>224</td>\n"," <td>12928</td>\n"," <td>0.152422</td>\n"," <td>0.249848</td>\n"," <td>0.175328</td>\n"," </tr>\n"," <tr>\n"," <th>3719</th>\n"," <td>15</td>\n"," <td>12</td>\n"," <td>831</td>\n"," <td>3719</td>\n"," <td>0.037926</td>\n"," <td>0.140073</td>\n"," <td>0.150692</td>\n"," </tr>\n"," <tr>\n"," <th>8241</th>\n"," <td>15</td>\n"," <td>2</td>\n"," <td>1278</td>\n"," <td>8241</td>\n"," <td>0.362257</td>\n"," <td>0.362136</td>\n"," <td>0.139882</td>\n"," </tr>\n"," <tr>\n"," <th>4656</th>\n"," <td>15</td>\n"," <td>8</td>\n"," <td>310</td>\n"," <td>4656</td>\n"," <td>0.020231</td>\n"," <td>0.118147</td>\n"," <td>0.111607</td>\n"," </tr>\n"," <tr>\n"," <th>1899</th>\n"," <td>15</td>\n"," <td>4</td>\n"," <td>1899</td>\n"," <td>1899</td>\n"," <td>0.074985</td>\n"," <td>0.145895</td>\n"," <td>0.108318</td>\n"," </tr>\n"," <tr>\n"," <th>11855</th>\n"," <td>15</td>\n"," <td>3</td>\n"," <td>404</td>\n"," <td>11855</td>\n"," <td>0.032151</td>\n"," <td>0.037595</td>\n"," <td>0.067614</td>\n"," </tr>\n"," <tr>\n"," <th>5056</th>\n"," <td>15</td>\n"," <td>7</td>\n"," <td>326</td>\n"," <td>5056</td>\n"," <td>0.017772</td>\n"," <td>0.018433</td>\n"," <td>0.063495</td>\n"," </tr>\n"," <tr>\n"," <th>10127</th>\n"," <td>15</td>\n"," <td>5</td>\n"," <td>969</td>\n"," <td>10127</td>\n"," <td>0.005770</td>\n"," <td>0.003757</td>\n"," <td>0.061650</td>\n"," </tr>\n"," <tr>\n"," <th>14314</th>\n"," <td>15</td>\n"," <td>11</td>\n"," <td>679</td>\n"," <td>14314</td>\n"," <td>0.009450</td>\n"," <td>0.003088</td>\n"," <td>0.041699</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>\n"," <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-4400a64d-8693-4dcc-9f5e-ed52ad53c049')\"\n"," title=\"Convert this dataframe to an interactive table.\"\n"," style=\"display:none;\">\n"," \n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n"," <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n"," </svg>\n"," </button>\n"," \n"," <style>\n"," .colab-df-container {\n"," display:flex;\n"," flex-wrap:wrap;\n"," gap: 12px;\n"," }\n","\n"," .colab-df-convert {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-convert:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," [theme=dark] .colab-df-convert {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-convert:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n","\n"," <script>\n"," const buttonEl =\n"," document.querySelector('#df-4400a64d-8693-4dcc-9f5e-ed52ad53c049 button.colab-df-convert');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," async function convertToInteractive(key) {\n"," const element = document.querySelector('#df-4400a64d-8693-4dcc-9f5e-ed52ad53c049');\n"," const dataTable =\n"," await google.colab.kernel.invokeFunction('convertToInteractive',\n"," [key], {});\n"," if (!dataTable) return;\n","\n"," const docLinkHtml = 'Like what you see? Visit the ' +\n"," '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n"," + ' to learn more about interactive tables.';\n"," element.innerHTML = '';\n"," dataTable['output_type'] = 'display_data';\n"," await google.colab.output.renderOutput(dataTable, element);\n"," const docLink = document.createElement('div');\n"," docLink.innerHTML = docLinkHtml;\n"," element.appendChild(docLink);\n"," }\n"," </script>\n"," </div>\n"," </div>\n"," "]},"metadata":{},"execution_count":62}],"source":["a = str(settings[2])\n","\n","high_error = {}\n","for subject in [13,14,15]:\n"," idx = df[subject].groupby(['subject','sequence'])[a].transform(max) == df[subject][a]\n"," # Exclude sequence 14-36 because it appears to be an exact duplicate of 14-31\n"," if subject == 14:\n"," df[subject] = df[subject][df[subject]['sequence'] != 36]\n"," #df[subject][idx].sort_values(by=['base'], ascending=False)[0:50]\n"," high_error[subject] = df[subject][idx].nlargest(10,a)\n"," \n","\n","high_errors = pd.concat([high_error[13], high_error[14], high_error[15]])\n","\n","# 'seats' is hard-coded based on the visualizations later. Update if necessary\n","#seats = [True, True, True, False, True, True, True, True, True, False, False, False]\n","#high_errors.insert(4, 'seated', seats, allow_duplicates=False)\n","high_errors"]},{"cell_type":"markdown","metadata":{"id":"nXQ7KHl7UN39"},"source":["### Supplement selected poses with the two poses before and after them in their sequence"]},{"cell_type":"code","execution_count":63,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"elapsed":648,"status":"ok","timestamp":1670939987561,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"},"user_tz":-60},"id":"aFh9WVoXUN39","outputId":"7e295f79-bb0e-44dd-e62f-bf7f7111b866"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" frame orig_index ('frame', 'base') \\\n","subject sequence \n","13 3 158.0 6826.0 0.106888 \n"," 4 171.0 10104.0 0.140981 \n"," 6 90.0 2643.0 0.117075 \n"," 17 246.0 3851.0 0.093508 \n"," 18 262.0 303.0 0.101177 \n"," 26 297.0 9192.0 0.009009 \n"," 28 271.0 7309.0 0.059753 \n"," 29 196.0 6261.0 0.073214 \n"," 30 117.0 8501.0 0.035566 \n"," 31 248.0 5046.0 0.034613 \n","14 1 377.0 10501.0 0.118429 \n"," 2 158.0 5736.0 0.054408 \n"," 3 45.0 4649.0 0.075509 \n"," 6 182.0 256.0 0.072954 \n"," 13 126.0 1676.0 0.041578 \n"," 14 146.0 8647.0 0.055413 \n"," 15 158.0 7582.0 0.053011 \n"," 20 110.0 6810.0 0.068734 \n"," 28 149.0 1495.0 0.080001 \n"," 30 209.0 1091.0 0.090548 \n","15 2 1278.0 8241.0 0.261834 \n"," 3 404.0 11855.0 0.015519 \n"," 4 1899.0 1899.0 0.060230 \n"," 5 969.0 10127.0 0.008147 \n"," 6 193.0 2722.0 0.100541 \n"," 7 326.0 5056.0 0.016744 \n"," 8 310.0 4656.0 0.017395 \n"," 11 679.0 14314.0 0.011151 \n"," 12 831.0 3719.0 0.030421 \n"," 13 224.0 12928.0 0.098001 \n","\n"," ('sequence', 'multi', 'mirror-seated') \\\n","subject sequence \n","13 3 0.115146 \n"," 4 0.185382 \n"," 6 0.073610 \n"," 17 0.077770 \n"," 18 0.060356 \n"," 26 0.003742 \n"," 28 0.015000 \n"," 29 0.035204 \n"," 30 0.091443 \n"," 31 0.023531 \n","14 1 0.052397 \n"," 2 0.022189 \n"," 3 0.053284 \n"," 6 0.097876 \n"," 13 0.056939 \n"," 14 0.071545 \n"," 15 0.017921 \n"," 20 0.045347 \n"," 28 0.139864 \n"," 30 0.036759 \n","15 2 0.201097 \n"," 3 0.016781 \n"," 4 0.072610 \n"," 5 0.003651 \n"," 6 0.117081 \n"," 7 0.016347 \n"," 8 0.046004 \n"," 11 0.008459 \n"," 12 0.110475 \n"," 13 0.080057 \n","\n"," ('frame', 'multi', 'mirror-seated') \n","subject sequence \n","13 3 0.108269 \n"," 4 0.131916 \n"," 6 0.082539 \n"," 17 0.077094 \n"," 18 0.068011 \n"," 26 0.026404 \n"," 28 0.057831 \n"," 29 0.085461 \n"," 30 0.072744 \n"," 31 0.029682 \n","14 1 0.109134 \n"," 2 0.046213 \n"," 3 0.066171 \n"," 6 0.167820 \n"," 13 0.077528 \n"," 14 0.108556 \n"," 15 0.096077 \n"," 20 0.087334 \n"," 28 0.095297 \n"," 30 0.104269 \n","15 2 0.062720 \n"," 3 0.030279 \n"," 4 0.076165 \n"," 5 0.028721 \n"," 6 0.154106 \n"," 7 0.058596 \n"," 8 0.046927 \n"," 11 0.022050 \n"," 12 0.060707 \n"," 13 0.090009 "],"text/html":["\n"," <div id=\"df-709d54e9-6960-494f-bdb9-16f3ab2439ba\">\n"," <div class=\"colab-df-container\">\n"," <div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th></th>\n"," <th>frame</th>\n"," <th>orig_index</th>\n"," <th>('frame', 'base')</th>\n"," <th>('sequence', 'multi', 'mirror-seated')</th>\n"," <th>('frame', 'multi', 'mirror-seated')</th>\n"," </tr>\n"," <tr>\n"," <th>subject</th>\n"," <th>sequence</th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th rowspan=\"10\" valign=\"top\">13</th>\n"," <th>3</th>\n"," <td>158.0</td>\n"," <td>6826.0</td>\n"," <td>0.106888</td>\n"," <td>0.115146</td>\n"," <td>0.108269</td>\n"," </tr>\n"," <tr>\n"," <th>4</th>\n"," <td>171.0</td>\n"," <td>10104.0</td>\n"," <td>0.140981</td>\n"," <td>0.185382</td>\n"," <td>0.131916</td>\n"," </tr>\n"," <tr>\n"," <th>6</th>\n"," <td>90.0</td>\n"," <td>2643.0</td>\n"," <td>0.117075</td>\n"," <td>0.073610</td>\n"," <td>0.082539</td>\n"," </tr>\n"," <tr>\n"," <th>17</th>\n"," <td>246.0</td>\n"," <td>3851.0</td>\n"," <td>0.093508</td>\n"," <td>0.077770</td>\n"," <td>0.077094</td>\n"," </tr>\n"," <tr>\n"," <th>18</th>\n"," <td>262.0</td>\n"," <td>303.0</td>\n"," <td>0.101177</td>\n"," <td>0.060356</td>\n"," <td>0.068011</td>\n"," </tr>\n"," <tr>\n"," <th>26</th>\n"," <td>297.0</td>\n"," <td>9192.0</td>\n"," <td>0.009009</td>\n"," <td>0.003742</td>\n"," <td>0.026404</td>\n"," </tr>\n"," <tr>\n"," <th>28</th>\n"," <td>271.0</td>\n"," <td>7309.0</td>\n"," <td>0.059753</td>\n"," <td>0.015000</td>\n"," <td>0.057831</td>\n"," </tr>\n"," <tr>\n"," <th>29</th>\n"," <td>196.0</td>\n"," <td>6261.0</td>\n"," <td>0.073214</td>\n"," <td>0.035204</td>\n"," <td>0.085461</td>\n"," </tr>\n"," <tr>\n"," <th>30</th>\n"," <td>117.0</td>\n"," <td>8501.0</td>\n"," <td>0.035566</td>\n"," <td>0.091443</td>\n"," <td>0.072744</td>\n"," </tr>\n"," <tr>\n"," <th>31</th>\n"," <td>248.0</td>\n"," <td>5046.0</td>\n"," <td>0.034613</td>\n"," <td>0.023531</td>\n"," <td>0.029682</td>\n"," </tr>\n"," <tr>\n"," <th rowspan=\"10\" valign=\"top\">14</th>\n"," <th>1</th>\n"," <td>377.0</td>\n"," <td>10501.0</td>\n"," <td>0.118429</td>\n"," <td>0.052397</td>\n"," <td>0.109134</td>\n"," </tr>\n"," <tr>\n"," <th>2</th>\n"," <td>158.0</td>\n"," <td>5736.0</td>\n"," <td>0.054408</td>\n"," <td>0.022189</td>\n"," <td>0.046213</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>45.0</td>\n"," <td>4649.0</td>\n"," <td>0.075509</td>\n"," <td>0.053284</td>\n"," <td>0.066171</td>\n"," </tr>\n"," <tr>\n"," <th>6</th>\n"," <td>182.0</td>\n"," <td>256.0</td>\n"," <td>0.072954</td>\n"," <td>0.097876</td>\n"," <td>0.167820</td>\n"," </tr>\n"," <tr>\n"," <th>13</th>\n"," <td>126.0</td>\n"," <td>1676.0</td>\n"," <td>0.041578</td>\n"," <td>0.056939</td>\n"," <td>0.077528</td>\n"," </tr>\n"," <tr>\n"," <th>14</th>\n"," <td>146.0</td>\n"," <td>8647.0</td>\n"," <td>0.055413</td>\n"," <td>0.071545</td>\n"," <td>0.108556</td>\n"," </tr>\n"," <tr>\n"," <th>15</th>\n"," <td>158.0</td>\n"," <td>7582.0</td>\n"," <td>0.053011</td>\n"," <td>0.017921</td>\n"," <td>0.096077</td>\n"," </tr>\n"," <tr>\n"," <th>20</th>\n"," <td>110.0</td>\n"," <td>6810.0</td>\n"," <td>0.068734</td>\n"," <td>0.045347</td>\n"," <td>0.087334</td>\n"," </tr>\n"," <tr>\n"," <th>28</th>\n"," <td>149.0</td>\n"," <td>1495.0</td>\n"," <td>0.080001</td>\n"," <td>0.139864</td>\n"," <td>0.095297</td>\n"," </tr>\n"," <tr>\n"," <th>30</th>\n"," <td>209.0</td>\n"," <td>1091.0</td>\n"," <td>0.090548</td>\n"," <td>0.036759</td>\n"," <td>0.104269</td>\n"," </tr>\n"," <tr>\n"," <th rowspan=\"10\" valign=\"top\">15</th>\n"," <th>2</th>\n"," <td>1278.0</td>\n"," <td>8241.0</td>\n"," <td>0.261834</td>\n"," <td>0.201097</td>\n"," <td>0.062720</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>404.0</td>\n"," <td>11855.0</td>\n"," <td>0.015519</td>\n"," <td>0.016781</td>\n"," <td>0.030279</td>\n"," </tr>\n"," <tr>\n"," <th>4</th>\n"," <td>1899.0</td>\n"," <td>1899.0</td>\n"," <td>0.060230</td>\n"," <td>0.072610</td>\n"," <td>0.076165</td>\n"," </tr>\n"," <tr>\n"," <th>5</th>\n"," <td>969.0</td>\n"," <td>10127.0</td>\n"," <td>0.008147</td>\n"," <td>0.003651</td>\n"," <td>0.028721</td>\n"," </tr>\n"," <tr>\n"," <th>6</th>\n"," <td>193.0</td>\n"," <td>2722.0</td>\n"," <td>0.100541</td>\n"," <td>0.117081</td>\n"," <td>0.154106</td>\n"," </tr>\n"," <tr>\n"," <th>7</th>\n"," <td>326.0</td>\n"," <td>5056.0</td>\n"," <td>0.016744</td>\n"," <td>0.016347</td>\n"," <td>0.058596</td>\n"," </tr>\n"," <tr>\n"," <th>8</th>\n"," <td>310.0</td>\n"," <td>4656.0</td>\n"," <td>0.017395</td>\n"," <td>0.046004</td>\n"," <td>0.046927</td>\n"," </tr>\n"," <tr>\n"," <th>11</th>\n"," <td>679.0</td>\n"," <td>14314.0</td>\n"," <td>0.011151</td>\n"," <td>0.008459</td>\n"," <td>0.022050</td>\n"," </tr>\n"," <tr>\n"," <th>12</th>\n"," <td>831.0</td>\n"," <td>3719.0</td>\n"," <td>0.030421</td>\n"," <td>0.110475</td>\n"," <td>0.060707</td>\n"," </tr>\n"," <tr>\n"," <th>13</th>\n"," <td>224.0</td>\n"," <td>12928.0</td>\n"," <td>0.098001</td>\n"," <td>0.080057</td>\n"," <td>0.090009</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>\n"," <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-709d54e9-6960-494f-bdb9-16f3ab2439ba')\"\n"," title=\"Convert this dataframe to an interactive table.\"\n"," style=\"display:none;\">\n"," \n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n"," <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n"," </svg>\n"," </button>\n"," \n"," <style>\n"," .colab-df-container {\n"," display:flex;\n"," flex-wrap:wrap;\n"," gap: 12px;\n"," }\n","\n"," .colab-df-convert {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-convert:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," [theme=dark] .colab-df-convert {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-convert:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n","\n"," <script>\n"," const buttonEl =\n"," document.querySelector('#df-709d54e9-6960-494f-bdb9-16f3ab2439ba button.colab-df-convert');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," async function convertToInteractive(key) {\n"," const element = document.querySelector('#df-709d54e9-6960-494f-bdb9-16f3ab2439ba');\n"," const dataTable =\n"," await google.colab.kernel.invokeFunction('convertToInteractive',\n"," [key], {});\n"," if (!dataTable) return;\n","\n"," const docLinkHtml = 'Like what you see? Visit the ' +\n"," '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n"," + ' to learn more about interactive tables.';\n"," element.innerHTML = '';\n"," dataTable['output_type'] = 'display_data';\n"," await google.colab.output.renderOutput(dataTable, element);\n"," const docLink = document.createElement('div');\n"," docLink.innerHTML = docLinkHtml;\n"," element.appendChild(docLink);\n"," }\n"," </script>\n"," </div>\n"," </div>\n"," "]},"metadata":{},"execution_count":63}],"source":["df_high = pd.DataFrame()\n","for index, row in high_errors.iterrows():\n"," subject = row['subject']\n"," orig_index = row['orig_index']\n"," new_slice = df[subject].loc[df[subject]['orig_index'].isin(range(int(orig_index)-2,int(orig_index)+3))]\n"," #new_slice['seated'] = row['seated']\n"," df_high = pd.concat([df_high, new_slice])\n","\n","high_error_groups = df_high.groupby(['subject','sequence']).mean()\n","\n","high_error_groups"]},{"cell_type":"markdown","metadata":{"id":"loOQEbEyUN3-"},"source":["### Average error on seated poses and non-seated poses"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":143},"executionInfo":{"elapsed":9,"status":"ok","timestamp":1670316485714,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"},"user_tz":-60},"id":"DDrQAFh8UN3_","outputId":"b5505931-fb6e-459c-f043-250f7ea5593e"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" ('frame', 'base') ('sequence', 'multi', 'mirror-seated') \\\n","seated \n","False 0.166765 0.209554 \n","True 0.109991 0.084915 \n","\n"," ('frame', 'multi', 'mirror-seated') \n","seated \n","False 0.144099 \n","True 0.155951 "],"text/html":["\n"," <div id=\"df-70777e48-e8de-4c74-af82-d61e3a539071\">\n"," <div class=\"colab-df-container\">\n"," <div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>('frame', 'base')</th>\n"," <th>('sequence', 'multi', 'mirror-seated')</th>\n"," <th>('frame', 'multi', 'mirror-seated')</th>\n"," </tr>\n"," <tr>\n"," <th>seated</th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>False</th>\n"," <td>0.166765</td>\n"," <td>0.209554</td>\n"," <td>0.144099</td>\n"," </tr>\n"," <tr>\n"," <th>True</th>\n"," <td>0.109991</td>\n"," <td>0.084915</td>\n"," <td>0.155951</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>\n"," <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-70777e48-e8de-4c74-af82-d61e3a539071')\"\n"," title=\"Convert this dataframe to an interactive table.\"\n"," style=\"display:none;\">\n"," \n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n"," <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n"," </svg>\n"," </button>\n"," \n"," <style>\n"," .colab-df-container {\n"," display:flex;\n"," flex-wrap:wrap;\n"," gap: 12px;\n"," }\n","\n"," .colab-df-convert {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-convert:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," [theme=dark] .colab-df-convert {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-convert:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n","\n"," <script>\n"," const buttonEl =\n"," document.querySelector('#df-70777e48-e8de-4c74-af82-d61e3a539071 button.colab-df-convert');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," async function convertToInteractive(key) {\n"," const element = document.querySelector('#df-70777e48-e8de-4c74-af82-d61e3a539071');\n"," const dataTable =\n"," await google.colab.kernel.invokeFunction('convertToInteractive',\n"," [key], {});\n"," if (!dataTable) return;\n","\n"," const docLinkHtml = 'Like what you see? Visit the ' +\n"," '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n"," + ' to learn more about interactive tables.';\n"," element.innerHTML = '';\n"," dataTable['output_type'] = 'display_data';\n"," await google.colab.output.renderOutput(dataTable, element);\n"," const docLink = document.createElement('div');\n"," docLink.innerHTML = docLinkHtml;\n"," element.appendChild(docLink);\n"," }\n"," </script>\n"," </div>\n"," </div>\n"," "]},"metadata":{},"execution_count":41}],"source":["high_summary = high_errors.groupby(['seated']).mean()\n","high_filtered = high_summary.filter(like='(', axis=1)\n","high_filtered"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":143},"executionInfo":{"elapsed":11,"status":"ok","timestamp":1670316489827,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"},"user_tz":-60},"id":"PJOF3MblUN4A","outputId":"a8403119-f77d-4eb8-a9f4-866421390b9b"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" ('frame', 'base') ('sequence', 'multi', 'mirror-seated') \\\n","seated \n","0.0 0.122858 0.112996 \n","1.0 0.090053 0.080400 \n","\n"," ('frame', 'multi', 'mirror-seated') \n","seated \n","0.0 0.070362 \n","1.0 0.112375 "],"text/html":["\n"," <div id=\"df-c30f9c9e-1ea5-45c1-941c-b8230f6a8658\">\n"," <div class=\"colab-df-container\">\n"," <div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>('frame', 'base')</th>\n"," <th>('sequence', 'multi', 'mirror-seated')</th>\n"," <th>('frame', 'multi', 'mirror-seated')</th>\n"," </tr>\n"," <tr>\n"," <th>seated</th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0.0</th>\n"," <td>0.122858</td>\n"," <td>0.112996</td>\n"," <td>0.070362</td>\n"," </tr>\n"," <tr>\n"," <th>1.0</th>\n"," <td>0.090053</td>\n"," <td>0.080400</td>\n"," <td>0.112375</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>\n"," <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-c30f9c9e-1ea5-45c1-941c-b8230f6a8658')\"\n"," title=\"Convert this dataframe to an interactive table.\"\n"," style=\"display:none;\">\n"," \n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n"," <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n"," </svg>\n"," </button>\n"," \n"," <style>\n"," .colab-df-container {\n"," display:flex;\n"," flex-wrap:wrap;\n"," gap: 12px;\n"," }\n","\n"," .colab-df-convert {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-convert:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," [theme=dark] .colab-df-convert {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-convert:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n","\n"," <script>\n"," const buttonEl =\n"," document.querySelector('#df-c30f9c9e-1ea5-45c1-941c-b8230f6a8658 button.colab-df-convert');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," async function convertToInteractive(key) {\n"," const element = document.querySelector('#df-c30f9c9e-1ea5-45c1-941c-b8230f6a8658');\n"," const dataTable =\n"," await google.colab.kernel.invokeFunction('convertToInteractive',\n"," [key], {});\n"," if (!dataTable) return;\n","\n"," const docLinkHtml = 'Like what you see? Visit the ' +\n"," '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n"," + ' to learn more about interactive tables.';\n"," element.innerHTML = '';\n"," dataTable['output_type'] = 'display_data';\n"," await google.colab.output.renderOutput(dataTable, element);\n"," const docLink = document.createElement('div');\n"," docLink.innerHTML = docLinkHtml;\n"," element.appendChild(docLink);\n"," }\n"," </script>\n"," </div>\n"," </div>\n"," "]},"metadata":{},"execution_count":42}],"source":["high_summary_group = high_error_groups.groupby(['seated']).mean()\n","high_filtered_group = high_summary_group.filter(like='(', axis=1)\n","high_filtered_group"]},{"cell_type":"markdown","metadata":{"id":"RsYTKN96UN4A"},"source":["### Visualize high-error poses"]},{"cell_type":"code","execution_count":64,"metadata":{"id":"SbL9ow-pUN4B","executionInfo":{"status":"ok","timestamp":1670939992469,"user_tz":-60,"elapsed":463,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"}}},"outputs":[],"source":["import matplotlib.pyplot as plt\n","import math\n","import mpl_toolkits.mplot3d.axes3d as p3"]},{"cell_type":"code","execution_count":65,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":14,"status":"ok","timestamp":1670939995437,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"},"user_tz":-60},"id":"_V0ZYK2ZUN4C","outputId":"c509749c-4794-488f-9084-6fdb9b6cbb3f"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["{13: [6261, 10104, 6826, 303, 9192, 3851, 8501, 5046, 7309, 2643],\n"," 14: [256, 10501, 5736, 7582, 4649, 8647, 1676, 1091, 1495, 6810],\n"," 15: [2722, 12928, 3719, 8241, 4656, 1899, 11855, 5056, 10127, 14314]}"]},"metadata":{},"execution_count":65}],"source":["high_error_dict = {}\n","for subject in [13,14,15]:\n"," high_error_dict[subject] = []\n","for index, line in high_errors.iterrows():\n"," subject = int(line['subject'])\n"," frame = int(line['orig_index'])\n"," high_error_dict[subject].append(frame)\n","high_error_dict"]},{"cell_type":"code","source":["def inder(char):\n"," return ord(char) - 97\n","\n","def draw_pose(keypoints, ax, color):\n"," ax.scatter(keypoints[2], keypoints[0], keypoints[1], c=color)\n"," ax.plot(keypoints[2][[inder('a'), inder('b')]], keypoints[0][[inder('a'), inder('b')]], keypoints[1][[inder('a'), inder('b')]], c=color)\n"," ax.plot(keypoints[2][[inder('b'), inder('c')]], keypoints[0][[inder('b'), inder('c')]], keypoints[1][[inder('b'), inder('c')]], c=color)\n"," ax.plot(keypoints[2][[inder('c'), inder('d')]], keypoints[0][[inder('c'), inder('d')]], keypoints[1][[inder('c'), inder('d')]], c=color)\n"," ax.plot(keypoints[2][[inder('d'), inder('e')]], keypoints[0][[inder('d'), inder('e')]], keypoints[1][[inder('d'), inder('e')]], c=color)\n"," ax.plot(keypoints[2][[inder('b'), inder('f')]], keypoints[0][[inder('b'), inder('f')]], keypoints[1][[inder('b'), inder('f')]], c=color)\n"," ax.plot(keypoints[2][[inder('f'), inder('g')]], keypoints[0][[inder('f'), inder('g')]], keypoints[1][[inder('f'), inder('g')]], c=color)\n"," ax.plot(keypoints[2][[inder('g'), inder('h')]], keypoints[0][[inder('g'), inder('h')]], keypoints[1][[inder('g'), inder('h')]], c=color)\n"," ax.plot(keypoints[2][[inder('i'), inder('j')]], keypoints[0][[inder('i'), inder('j')]], keypoints[1][[inder('i'), inder('j')]], c=color)\n"," ax.plot(keypoints[2][[inder('j'), inder('k')]], keypoints[0][[inder('j'), inder('k')]], keypoints[1][[inder('j'), inder('k')]], c=color)\n"," ax.plot(keypoints[2][[inder('l'), inder('m')]], keypoints[0][[inder('l'), inder('m')]], keypoints[1][[inder('l'), inder('m')]], c=color)\n"," ax.plot(keypoints[2][[inder('m'), inder('n')]], keypoints[0][[inder('m'), inder('n')]], keypoints[1][[inder('m'), inder('n')]], c=color)\n"," ax.plot(keypoints[2][[inder('o'), inder('i')]], keypoints[0][[inder('o'), inder('i')]], keypoints[1][[inder('o'), inder('i')]], c=color)\n"," ax.plot(keypoints[2][[inder('o'), inder('l')]], keypoints[0][[inder('o'), inder('l')]], keypoints[1][[inder('o'), inder('l')]], c=color)\n"," ax.plot(keypoints[2][[inder('o'), inder('b')]], keypoints[0][[inder('o'), inder('b')]], keypoints[1][[inder('o'), inder('b')]], c=color)\n","\n"," ax.set_xlim([-2,2])\n"," ax.set_ylim([-2,2])\n"," ax.set_zlim([-2,2])\n","\n","def plot_pose(keypointsTrue, keypointsFalse, ax):\n"," draw_pose(keypointsTrue, ax, 'b')\n"," draw_pose(keypointsFalse, ax, 'r')"],"metadata":{"id":"LFekyZ-EjqSw","executionInfo":{"status":"ok","timestamp":1670939998451,"user_tz":-60,"elapsed":610,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"}}},"execution_count":66,"outputs":[]},{"cell_type":"code","source":["for subject in [13,14,15]:\n"," \n"," fig = plt.figure(figsize=(100, 20))#plt.figure(figsize = (36,9))\n"," n = len(high_error_dict[subject])\n"," ax = {}\n"," for i, frame in enumerate(high_error_dict[subject]):\n"," \n"," #fig.axis('off')\n"," run = ('frame', 'multi','mirror-seated')\n"," mode = scenario[run]\n"," ax[i] = fig.add_subplot(1,n,i+1, projection = '3d')\n"," ax[i].set_title((run, 'Subject: ', subject, frame, 'Error: ', round(mode[subject][0][frame],2)))\n"," plot_pose(mode[subject][2][frame].transpose(), mode[subject][1][frame].transpose(), ax[i])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":712,"output_embedded_package_id":"1VYqIl7hLrND8c_1OYymZlRcpSxxTvymq"},"id":"xmeL-ZvUmXU3","executionInfo":{"status":"ok","timestamp":1670920694658,"user_tz":-60,"elapsed":27247,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"}},"outputId":"44473212-1f15-44f0-e168-dfac73689163"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":"Output hidden; open in https://colab.research.google.com to view."},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"zhllEu8BUN4D"},"source":["### Show before/after change"]},{"cell_type":"code","source":["for subject in [13,14,15]:\n"," \n"," for frame in high_error_dict[subject]:\n"," fig = plt.figure(figsize = (18,9))\n"," n = 2\n"," ax = {}\n"," for i, run in enumerate([\n"," ('frame', 'base'),\n"," #('frame', 'base', 'archive'),\n"," #('sequence', 'base'),\n"," #('frame', 'dropout'),\n"," #('sequence', 'dropout'),\n"," #('frame', 'multi'),\n"," #('sequence', 'multi'),\n"," #('sequence', 'multi', 'seated'),\n"," #('sequence', 'multi', 'mirror-seated'),\n"," ('frame', 'multi', 'mirror-seated'),\n"," ]):\n"," mode = scenario[run]\n"," ax[i] = fig.add_subplot(1,n,i+1, projection = '3d')\n"," ax[i].set_title((run, 'Subject: ', subject, frame, 'Error: ', round(mode[subject][0][frame],3)))\n"," plot_pose(mode[subject][2][frame].transpose(), mode[subject][1][frame].transpose(), ax[i])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000,"output_embedded_package_id":"1IXn4uuie4sXCp6E-T_4VyPIRFNqlIkyp"},"id":"pOgVyoy-m1yb","executionInfo":{"status":"ok","timestamp":1670920721593,"user_tz":-60,"elapsed":26957,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"}},"outputId":"962036d4-0eaa-4b30-f39c-54c55282aeca"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":"Output hidden; open in https://colab.research.google.com to view."},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"o0Vj3dtaUN4E"},"source":["### Draw representative poses at different error percentiles"]},{"cell_type":"code","source":["import os\n","import pandas as pd\n","percent = [0.1, 0.15, 0.25, 0.5, 0.75, 0.9, 0.99, 0.995, 0.998, 0.999]\n","poses = {}\n","\n","a = str(settings[2])\n","\n","sorted_all = all_data.sort_values(by=[a], ascending=True)\n","\n","for point in percent:\n"," poses[point] = []\n"," ind = int(len(all_data) * point)\n"," if point == 0.999:\n"," my_list = pd.concat((sorted_all[ind+6:ind+10], sorted_all[ind+11:ind+12]))\n"," elif point == 0.998:\n"," my_list = pd.concat((sorted_all[ind-4: ind-2], sorted_all[ind : ind +2], sorted_all[ind+7:ind+8]))\n"," else:\n"," my_list = sorted_all[ind-2:ind+3]\n"," for index, line in my_list.iterrows():\n"," poses[point].append([int(line['subject']), int(line['orig_index'])])\n"," \n","for l, error_list in enumerate(poses.values()):\n","\n"," fig = plt.figure(figsize = (45,9))\n"," #fig.axis('off')\n"," n = len(poses[point])\n"," ax = {}\n","\n"," for i, pose in enumerate(error_list):\n"," subject = pose[0]\n"," frame = pose[1]\n","\n"," ax[i] = fig.add_subplot(1,n,i+1, projection = '3d')\n","\n"," #ax[i].axis('off')\n"," #ax[i].set_title((run, subject, frame, round(mode[subject][0][frame],2)))\n"," plot_pose(mode[subject][2][frame].transpose(), mode[subject][1][frame].transpose(), ax[i])\n","\n"," fig.savefig(os.path.join(\"logs\", \"evaluation\", \"PercentilePoses\",(\"fig\"+str(l)+\".png\")), bbox_inches='tight')\n"," "],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000,"output_embedded_package_id":"1wElhk-Op-KurKRQoZ5bInj4JX7YdS6Sj"},"id":"r3g_PfJznNBq","executionInfo":{"status":"ok","timestamp":1670935283194,"user_tz":-60,"elapsed":40443,"user":{"displayName":"Edmondo Tamajo","userId":"15585946477788184417"}},"outputId":"ac07b985-6fe7-4710-e683-112fefa4c5bb"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":"Output hidden; open in https://colab.research.google.com to view."},"metadata":{}}]},{"cell_type":"code","execution_count":null,"metadata":{"id":"2W9wTi5gUN4F"},"outputs":[],"source":[]}],"metadata":{"colab":{"provenance":[{"file_id":"1Pf4W586b2Ya8fKNzhivGZcMq31-F3MGW","timestamp":1670014191205},{"file_id":"1vOg1s4DRtC0dKqvWA1rOEScViA9BjWDi","timestamp":1665999712291}]},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.4"}},"nbformat":4,"nbformat_minor":0}
\ No newline at end of file
%% 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
/
3
d
-
pose
-
2
d
-
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
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment