First tracker implementation.

This commit is contained in:
Daniel
2025-04-03 18:51:33 +02:00
parent dae7c33970
commit ff735759f7
4 changed files with 616 additions and 295 deletions

View File

@ -7,26 +7,27 @@ Results of the model in various experiments on different datasets. \
```json ```json
{ {
"img_loading": 0.00946685, "img_loading": 0.00954196,
"demosaicing": 0.000433632, "demosaicing": 0.000437263,
"avg_time_2d": 0.00564251, "avg_time_2d": 0.00563337,
"avg_time_3d": 3.16907e-05, "avg_time_3d": 3.22195e-05,
"fps": 163.724 "time_tracks": 2.56698e-06,
"fps": 163.789
} }
{ {
"triangulator_calls": 600, "triangulator_calls": 600,
"init_time": 2.2774e-06, "init_time": 2.34263e-06,
"undistort_time": 3.66277e-06, "undistort_time": 3.69506e-06,
"project_time": 6.4956e-07, "project_time": 5.953e-07,
"match_time": 1.27751e-06, "match_time": 1.23644e-06,
"pairs_time": 1.83347e-07, "pairs_time": 1.78917e-07,
"pair_scoring_time": 5.04129e-06, "pair_scoring_time": 5.10816e-06,
"grouping_time": 9.12377e-07, "grouping_time": 8.91258e-07,
"full_time": 6.56363e-06, "full_time": 6.67602e-06,
"merge_time": 2.93065e-06, "merge_time": 2.95392e-06,
"post_time": 3.79765e-06, "post_time": 3.7758e-06,
"convert_time": 5.13667e-08, "convert_time": 5.69e-08,
"total_time": 2.75941e-05 "total_time": 2.7759e-05
} }
{ {
"person_nums": { "person_nums": {
@ -45,23 +46,23 @@ Results of the model in various experiments on different datasets. \
}, },
"mpjpe": { "mpjpe": {
"count": 600, "count": 600,
"mean": 0.06036, "mean": 0.060543,
"median": 0.052956, "median": 0.053007,
"std": 0.028032, "std": 0.028089,
"sem": 0.001145, "sem": 0.001148,
"min": 0.037548, "min": 0.037548,
"max": 0.192385, "max": 0.192385,
"recall-0.025": 0.0, "recall-0.025": 0.0,
"recall-0.05": 0.333333, "recall-0.05": 0.325,
"recall-0.1": 0.948333, "recall-0.1": 0.946667,
"recall-0.15": 0.95, "recall-0.15": 0.95,
"recall-0.25": 1.0, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 600, "num_labels": 600,
"ap-0.025": 0.0, "ap-0.025": 0.0,
"ap-0.05": 0.187797, "ap-0.05": 0.179324,
"ap-0.1": 0.910662, "ap-0.1": 0.907003,
"ap-0.15": 0.913398, "ap-0.15": 0.91147,
"ap-0.25": 1.0, "ap-0.25": 1.0,
"ap-0.5": 1.0 "ap-0.5": 1.0
}, },
@ -99,82 +100,82 @@ Results of the model in various experiments on different datasets. \
}, },
"shoulder_right": { "shoulder_right": {
"count": 600, "count": 600,
"mean": 0.045983, "mean": 0.046158,
"median": 0.034992, "median": 0.034992,
"std": 0.039542, "std": 0.039877,
"sem": 0.001616, "sem": 0.001629,
"min": 0.00206, "min": 0.00206,
"max": 0.240597, "max": 0.240597,
"recall-0.025": 0.298333, "recall-0.025": 0.298333,
"recall-0.05": 0.753333, "recall-0.05": 0.753333,
"recall-0.1": 0.91, "recall-0.1": 0.908333,
"recall-0.15": 0.946667, "recall-0.15": 0.945,
"recall-0.25": 1.0, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 600 "num_labels": 600
}, },
"elbow_left": { "elbow_left": {
"count": 600, "count": 600,
"mean": 0.045328, "mean": 0.045362,
"median": 0.034177, "median": 0.034249,
"std": 0.03755, "std": 0.037307,
"sem": 0.001534, "sem": 0.001524,
"min": 0.002988, "min": 0.002988,
"max": 0.194229, "max": 0.194229,
"recall-0.025": 0.26, "recall-0.025": 0.258333,
"recall-0.05": 0.763333, "recall-0.05": 0.761667,
"recall-0.1": 0.926667, "recall-0.1": 0.925,
"recall-0.15": 0.953333, "recall-0.15": 0.955,
"recall-0.25": 1.0, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 600 "num_labels": 600
}, },
"elbow_right": { "elbow_right": {
"count": 600, "count": 600,
"mean": 0.044168, "mean": 0.04432,
"median": 0.03193, "median": 0.03193,
"std": 0.03869, "std": 0.038646,
"sem": 0.001581, "sem": 0.001579,
"min": 0.005218, "min": 0.005218,
"max": 0.427232, "max": 0.383954,
"recall-0.025": 0.268333, "recall-0.025": 0.268333,
"recall-0.05": 0.783333, "recall-0.05": 0.783333,
"recall-0.1": 0.928333, "recall-0.1": 0.926667,
"recall-0.15": 0.941667, "recall-0.15": 0.94,
"recall-0.25": 0.998333, "recall-0.25": 0.998333,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 600 "num_labels": 600
}, },
"wrist_left": { "wrist_left": {
"count": 600, "count": 600,
"mean": 0.039992, "mean": 0.04031,
"median": 0.022739, "median": 0.022792,
"std": 0.044805, "std": 0.044965,
"sem": 0.001831, "sem": 0.001837,
"min": 0.002345, "min": 0.002345,
"max": 0.289452, "max": 0.289452,
"recall-0.025": 0.553333, "recall-0.025": 0.551667,
"recall-0.05": 0.766667, "recall-0.05": 0.763333,
"recall-0.1": 0.908333, "recall-0.1": 0.906667,
"recall-0.15": 0.928333, "recall-0.15": 0.93,
"recall-0.25": 0.998333, "recall-0.25": 0.998333,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 600 "num_labels": 600
}, },
"wrist_right": { "wrist_right": {
"count": 599, "count": 600,
"mean": 0.040157, "mean": 0.041059,
"median": 0.026117, "median": 0.026221,
"std": 0.044323, "std": 0.04525,
"sem": 0.001812, "sem": 0.001849,
"min": 0.003181, "min": 0.003181,
"max": 0.296936, "max": 0.296936,
"recall-0.025": 0.481667, "recall-0.025": 0.476667,
"recall-0.05": 0.806667, "recall-0.05": 0.801667,
"recall-0.1": 0.915, "recall-0.1": 0.91,
"recall-0.15": 0.925, "recall-0.15": 0.921667,
"recall-0.25": 0.995, "recall-0.25": 0.996667,
"recall-0.5": 0.998333, "recall-0.5": 1.0,
"num_labels": 600 "num_labels": 600
}, },
"hip_left": { "hip_left": {
@ -211,31 +212,31 @@ Results of the model in various experiments on different datasets. \
}, },
"knee_left": { "knee_left": {
"count": 599, "count": 599,
"mean": 0.052251, "mean": 0.05212,
"median": 0.042367, "median": 0.042367,
"std": 0.042631, "std": 0.039681,
"sem": 0.001743, "sem": 0.001623,
"min": 0.014466, "min": 0.014466,
"max": 0.482769, "max": 0.303977,
"recall-0.025": 0.06, "recall-0.025": 0.06,
"recall-0.05": 0.698333, "recall-0.05": 0.696667,
"recall-0.1": 0.925, "recall-0.1": 0.921667,
"recall-0.15": 0.945, "recall-0.15": 0.943333,
"recall-0.25": 0.995, "recall-0.25": 0.996667,
"recall-0.5": 0.998333, "recall-0.5": 0.998333,
"num_labels": 600 "num_labels": 600
}, },
"knee_right": { "knee_right": {
"count": 600, "count": 600,
"mean": 0.045065, "mean": 0.045269,
"median": 0.034037, "median": 0.034108,
"std": 0.037143, "std": 0.03723,
"sem": 0.001518, "sem": 0.001521,
"min": 0.010961, "min": 0.010961,
"max": 0.293895, "max": 0.293895,
"recall-0.025": 0.106667, "recall-0.025": 0.105,
"recall-0.05": 0.825, "recall-0.05": 0.821667,
"recall-0.1": 0.931667, "recall-0.1": 0.93,
"recall-0.15": 0.948333, "recall-0.15": 0.948333,
"recall-0.25": 0.998333, "recall-0.25": 0.998333,
"recall-0.5": 1.0, "recall-0.5": 1.0,
@ -243,50 +244,50 @@ Results of the model in various experiments on different datasets. \
}, },
"ankle_left": { "ankle_left": {
"count": 599, "count": 599,
"mean": 0.088513, "mean": 0.089795,
"median": 0.082493, "median": 0.082637,
"std": 0.029511, "std": 0.03326,
"sem": 0.001207, "sem": 0.00136,
"min": 0.048202, "min": 0.048202,
"max": 0.271976, "max": 0.351142,
"recall-0.025": 0.0, "recall-0.025": 0.0,
"recall-0.05": 0.001667, "recall-0.05": 0.001667,
"recall-0.1": 0.88, "recall-0.1": 0.871667,
"recall-0.15": 0.945, "recall-0.15": 0.94,
"recall-0.25": 0.995, "recall-0.25": 0.991667,
"recall-0.5": 0.998333, "recall-0.5": 0.998333,
"num_labels": 600 "num_labels": 600
}, },
"ankle_right": { "ankle_right": {
"count": 600, "count": 600,
"mean": 0.077527, "mean": 0.077779,
"median": 0.06667, "median": 0.066732,
"std": 0.038806, "std": 0.039218,
"sem": 0.001586, "sem": 0.001602,
"min": 0.033001, "min": 0.018484,
"max": 0.281311, "max": 0.281311,
"recall-0.025": 0.0, "recall-0.025": 0.003333,
"recall-0.05": 0.036667, "recall-0.05": 0.041667,
"recall-0.1": 0.9, "recall-0.1": 0.893333,
"recall-0.15": 0.926667, "recall-0.15": 0.923333,
"recall-0.25": 0.991667, "recall-0.25": 0.991667,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 600 "num_labels": 600
}, },
"joint_recalls": { "joint_recalls": {
"num_labels": 7800, "num_labels": 7800,
"recall-0.025": 0.18962, "recall-0.025": 0.18897,
"recall-0.05": 0.50128, "recall-0.05": 0.50064,
"recall-0.1": 0.87962, "recall-0.1": 0.87718,
"recall-0.15": 0.93526, "recall-0.15": 0.93423,
"recall-0.25": 0.99603, "recall-0.25": 0.99603,
"recall-0.5": 0.99923 "recall-0.5": 0.99949
} }
} }
{ {
"total_parts": 8400, "total_parts": 8400,
"correct_parts": 8134, "correct_parts": 8130,
"pcp": 0.968333 "pcp": 0.967857
} }
``` ```
@ -294,70 +295,71 @@ Results of the model in various experiments on different datasets. \
```json ```json
{ {
"img_loading": 0.0431246, "img_loading": 0.0415743,
"demosaicing": 0.000535209, "demosaicing": 0.000548337,
"avg_time_2d": 0.0104033, "avg_time_2d": 0.0104442,
"avg_time_3d": 0.000107023, "avg_time_3d": 0.000102827,
"fps": 90.5343 "time_tracks": 7.53299e-07,
"fps": 90.1218
} }
{ {
"triangulator_calls": 301, "triangulator_calls": 301,
"init_time": 2.60675e-06, "init_time": 2.5757e-06,
"undistort_time": 1.42386e-05, "undistort_time": 1.38599e-05,
"project_time": 1.74955e-06, "project_time": 1.70299e-06,
"match_time": 7.80174e-06, "match_time": 7.42211e-06,
"pairs_time": 4.016e-06, "pairs_time": 3.51909e-06,
"pair_scoring_time": 2.31076e-05, "pair_scoring_time": 2.20828e-05,
"grouping_time": 4.08468e-06, "grouping_time": 4.00774e-06,
"full_time": 2.34529e-05, "full_time": 2.23789e-05,
"merge_time": 1.1163e-05, "merge_time": 1.09032e-05,
"post_time": 6.22243e-06, "post_time": 6.10427e-06,
"convert_time": 1.01126e-07, "convert_time": 1.11395e-07,
"total_time": 9.87993e-05 "total_time": 9.49145e-05
} }
{ {
"person_nums": { "person_nums": {
"total_frames": 301, "total_frames": 301,
"total_labels": 477, "total_labels": 477,
"total_preds": 828, "total_preds": 847,
"considered_empty": 0, "considered_empty": 0,
"valid_preds": 477, "valid_preds": 477,
"invalid_preds": 351, "invalid_preds": 370,
"missing": 0, "missing": 0,
"invalid_fraction": 0.42391, "invalid_fraction": 0.43684,
"precision": 0.57609, "precision": 0.56316,
"recall": 1.0, "recall": 1.0,
"f1": 0.73103, "f1": 0.72054,
"non_empty": 828 "non_empty": 847
}, },
"mpjpe": { "mpjpe": {
"count": 477, "count": 477,
"mean": 0.047653, "mean": 0.047597,
"median": 0.042661, "median": 0.042661,
"std": 0.015008, "std": 0.014947,
"sem": 0.000688, "sem": 0.000685,
"min": 0.028932, "min": 0.028932,
"max": 0.113187, "max": 0.107384,
"recall-0.025": 0.0, "recall-0.025": 0.0,
"recall-0.05": 0.719078, "recall-0.05": 0.721174,
"recall-0.1": 0.985325, "recall-0.1": 0.987421,
"recall-0.15": 1.0, "recall-0.15": 1.0,
"recall-0.25": 1.0, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 477, "num_labels": 477,
"ap-0.025": 0.0, "ap-0.025": 0.0,
"ap-0.05": 0.449379, "ap-0.05": 0.456736,
"ap-0.1": 0.750506, "ap-0.1": 0.755053,
"ap-0.15": 0.76101, "ap-0.15": 0.764546,
"ap-0.25": 0.76101, "ap-0.25": 0.764546,
"ap-0.5": 0.76101 "ap-0.5": 0.764546
}, },
"head": { "head": {
"count": 477, "count": 477,
"mean": 0.053389, "mean": 0.053421,
"median": 0.049509, "median": 0.049509,
"std": 0.025237, "std": 0.025337,
"sem": 0.001157, "sem": 0.001161,
"min": 0.005816, "min": 0.005816,
"max": 0.182842, "max": 0.182842,
"recall-0.025": 0.098532, "recall-0.025": 0.098532,
@ -402,17 +404,17 @@ Results of the model in various experiments on different datasets. \
}, },
"elbow_left": { "elbow_left": {
"count": 477, "count": 477,
"mean": 0.040654, "mean": 0.040136,
"median": 0.032194, "median": 0.032194,
"std": 0.02881, "std": 0.026056,
"sem": 0.001321, "sem": 0.001194,
"min": 0.003888, "min": 0.003888,
"max": 0.309836, "max": 0.146492,
"recall-0.025": 0.301887, "recall-0.025": 0.301887,
"recall-0.05": 0.752621, "recall-0.05": 0.752621,
"recall-0.1": 0.951782, "recall-0.1": 0.953878,
"recall-0.15": 0.997904, "recall-0.15": 1.0,
"recall-0.25": 0.997904, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 477 "num_labels": 477
}, },
@ -434,33 +436,33 @@ Results of the model in various experiments on different datasets. \
}, },
"wrist_left": { "wrist_left": {
"count": 477, "count": 477,
"mean": 0.059565, "mean": 0.059143,
"median": 0.05442, "median": 0.05442,
"std": 0.039643, "std": 0.038602,
"sem": 0.001817, "sem": 0.001769,
"min": 0.001595, "min": 0.001595,
"max": 0.314599, "max": 0.314599,
"recall-0.025": 0.155136, "recall-0.025": 0.155136,
"recall-0.05": 0.410901, "recall-0.05": 0.410901,
"recall-0.1": 0.909853, "recall-0.1": 0.91195,
"recall-0.15": 0.966457, "recall-0.15": 0.968553,
"recall-0.25": 0.989518, "recall-0.25": 0.991614,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 477 "num_labels": 477
}, },
"wrist_right": { "wrist_right": {
"count": 477, "count": 477,
"mean": 0.058378, "mean": 0.05783,
"median": 0.053422, "median": 0.053422,
"std": 0.034091, "std": 0.030837,
"sem": 0.001563, "sem": 0.001413,
"min": 0.008434, "min": 0.008434,
"max": 0.381589, "max": 0.207547,
"recall-0.025": 0.109015, "recall-0.025": 0.109015,
"recall-0.05": 0.442348, "recall-0.05": 0.442348,
"recall-0.1": 0.907757, "recall-0.1": 0.907757,
"recall-0.15": 0.979036, "recall-0.15": 0.981132,
"recall-0.25": 0.997904, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 477 "num_labels": 477
}, },
@ -514,15 +516,15 @@ Results of the model in various experiments on different datasets. \
}, },
"knee_right": { "knee_right": {
"count": 477, "count": 477,
"mean": 0.039775, "mean": 0.039912,
"median": 0.035222, "median": 0.035222,
"std": 0.023097, "std": 0.023393,
"sem": 0.001059, "sem": 0.001072,
"min": 0.006395, "min": 0.006395,
"max": 0.184949, "max": 0.184949,
"recall-0.025": 0.303983, "recall-0.025": 0.303983,
"recall-0.05": 0.727463, "recall-0.05": 0.727463,
"recall-0.1": 0.974843, "recall-0.1": 0.972746,
"recall-0.15": 0.997904, "recall-0.15": 0.997904,
"recall-0.25": 1.0, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
@ -530,10 +532,10 @@ Results of the model in various experiments on different datasets. \
}, },
"ankle_left": { "ankle_left": {
"count": 477, "count": 477,
"mean": 0.036458, "mean": 0.036485,
"median": 0.028094, "median": 0.028094,
"std": 0.03061, "std": 0.030728,
"sem": 0.001403, "sem": 0.001408,
"min": 0.004185, "min": 0.004185,
"max": 0.222831, "max": 0.222831,
"recall-0.025": 0.429769, "recall-0.025": 0.429769,
@ -546,17 +548,17 @@ Results of the model in various experiments on different datasets. \
}, },
"ankle_right": { "ankle_right": {
"count": 477, "count": 477,
"mean": 0.040799, "mean": 0.041358,
"median": 0.030877, "median": 0.030877,
"std": 0.03753, "std": 0.040428,
"sem": 0.00172, "sem": 0.001853,
"min": 0.002443, "min": 0.002443,
"max": 0.287278, "max": 0.355429,
"recall-0.025": 0.30608, "recall-0.025": 0.30608,
"recall-0.05": 0.813417, "recall-0.05": 0.813417,
"recall-0.1": 0.928721, "recall-0.1": 0.928721,
"recall-0.15": 0.968553, "recall-0.15": 0.966457,
"recall-0.25": 0.997904, "recall-0.25": 0.993711,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 477 "num_labels": 477
}, },
@ -565,15 +567,15 @@ Results of the model in various experiments on different datasets. \
"recall-0.025": 0.21351, "recall-0.025": 0.21351,
"recall-0.05": 0.62119, "recall-0.05": 0.62119,
"recall-0.1": 0.94323, "recall-0.1": 0.94323,
"recall-0.15": 0.98645, "recall-0.15": 0.98662,
"recall-0.25": 0.99871, "recall-0.25": 0.99871,
"recall-0.5": 1.0 "recall-0.5": 1.0
} }
} }
{ {
"total_parts": 6678, "total_parts": 6678,
"correct_parts": 6622, "correct_parts": 6623,
"pcp": 0.991614 "pcp": 0.991764
} }
``` ```
@ -581,75 +583,76 @@ Results of the model in various experiments on different datasets. \
```json ```json
{ {
"img_loading": 0.00517366, "img_loading": 0.00477884,
"demosaicing": 0.000109466, "demosaicing": 0.000105891,
"avg_time_2d": 0.00478839, "avg_time_2d": 0.00475547,
"avg_time_3d": 3.38694e-05, "avg_time_3d": 3.45411e-05,
"fps": 202.769 "time_tracks": 8.63962e-07,
"fps": 204.216
} }
{ {
"triangulator_calls": 222, "triangulator_calls": 222,
"init_time": 2.02099e-06, "init_time": 1.99938e-06,
"undistort_time": 5.6859e-06, "undistort_time": 5.71187e-06,
"project_time": 8.53198e-07, "project_time": 8.61266e-07,
"match_time": 2.58553e-06, "match_time": 2.61942e-06,
"pairs_time": 4.89811e-07, "pairs_time": 4.20405e-07,
"pair_scoring_time": 4.32314e-06, "pair_scoring_time": 4.35068e-06,
"grouping_time": 8.76297e-07, "grouping_time": 9.27387e-07,
"full_time": 5.37456e-06, "full_time": 5.49219e-06,
"merge_time": 2.54044e-06, "merge_time": 2.62484e-06,
"post_time": 4.92114e-06, "post_time": 5.03611e-06,
"convert_time": 7.91441e-08, "convert_time": 9.22072e-08,
"total_time": 2.99961e-05 "total_time": 3.03843e-05
} }
{ {
"person_nums": { "person_nums": {
"total_frames": 222, "total_frames": 222,
"total_labels": 376, "total_labels": 376,
"total_preds": 443, "total_preds": 457,
"considered_empty": 0, "considered_empty": 0,
"valid_preds": 376, "valid_preds": 376,
"invalid_preds": 67, "invalid_preds": 81,
"missing": 0, "missing": 0,
"invalid_fraction": 0.15124, "invalid_fraction": 0.17724,
"precision": 0.84876, "precision": 0.82276,
"recall": 1.0, "recall": 1.0,
"f1": 0.91819, "f1": 0.90276,
"non_empty": 443 "non_empty": 457
}, },
"mpjpe": { "mpjpe": {
"count": 376, "count": 376,
"mean": 0.075573, "mean": 0.075498,
"median": 0.072487, "median": 0.073144,
"std": 0.017073, "std": 0.014424,
"sem": 0.000882, "sem": 0.000745,
"min": 0.040047, "min": 0.040047,
"max": 0.237124, "max": 0.12107,
"recall-0.025": 0.0, "recall-0.025": 0.0,
"recall-0.05": 0.007979, "recall-0.05": 0.007979,
"recall-0.1": 0.922872, "recall-0.1": 0.933511,
"recall-0.15": 0.99734, "recall-0.15": 1.0,
"recall-0.25": 1.0, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 376, "num_labels": 376,
"ap-0.025": 0.0, "ap-0.025": 0.0,
"ap-0.05": 7.9e-05, "ap-0.05": 9.4e-05,
"ap-0.1": 0.836487, "ap-0.1": 0.843551,
"ap-0.15": 0.966449, "ap-0.15": 0.959589,
"ap-0.25": 0.968931, "ap-0.25": 0.959589,
"ap-0.5": 0.968931 "ap-0.5": 0.959589
}, },
"head": { "head": {
"count": 376, "count": 376,
"mean": 0.063145, "mean": 0.063289,
"median": 0.062777, "median": 0.062777,
"std": 0.025859, "std": 0.02607,
"sem": 0.001335, "sem": 0.001346,
"min": 0.007715, "min": 0.007715,
"max": 0.197424, "max": 0.197424,
"recall-0.025": 0.055851, "recall-0.025": 0.055851,
"recall-0.05": 0.31117, "recall-0.05": 0.31117,
"recall-0.1": 0.930851, "recall-0.1": 0.928191,
"recall-0.15": 0.992021, "recall-0.15": 0.992021,
"recall-0.25": 1.0, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
@ -657,97 +660,97 @@ Results of the model in various experiments on different datasets. \
}, },
"shoulder_left": { "shoulder_left": {
"count": 376, "count": 376,
"mean": 0.067151, "mean": 0.066843,
"median": 0.064619, "median": 0.064619,
"std": 0.029971, "std": 0.029378,
"sem": 0.001548, "sem": 0.001517,
"min": 0.016733, "min": 0.016733,
"max": 0.205046, "max": 0.205046,
"recall-0.025": 0.039894, "recall-0.025": 0.039894,
"recall-0.05": 0.321809, "recall-0.05": 0.321809,
"recall-0.1": 0.890957, "recall-0.1": 0.893617,
"recall-0.15": 0.981383, "recall-0.15": 0.984043,
"recall-0.25": 1.0, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 376 "num_labels": 376
}, },
"shoulder_right": { "shoulder_right": {
"count": 376, "count": 376,
"mean": 0.070444, "mean": 0.069399,
"median": 0.062402, "median": 0.062402,
"std": 0.038664, "std": 0.031883,
"sem": 0.001997, "sem": 0.001646,
"min": 0.017401, "min": 0.017401,
"max": 0.495275, "max": 0.198707,
"recall-0.025": 0.018617, "recall-0.025": 0.018617,
"recall-0.05": 0.316489, "recall-0.05": 0.316489,
"recall-0.1": 0.837766, "recall-0.1": 0.837766,
"recall-0.15": 0.968085, "recall-0.15": 0.970745,
"recall-0.25": 0.99734, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 376 "num_labels": 376
}, },
"elbow_left": { "elbow_left": {
"count": 376, "count": 376,
"mean": 0.090384, "mean": 0.089682,
"median": 0.072996, "median": 0.072996,
"std": 0.054936, "std": 0.053299,
"sem": 0.002837, "sem": 0.002752,
"min": 0.009937, "min": 0.009937,
"max": 0.344095, "max": 0.283516,
"recall-0.025": 0.029255, "recall-0.025": 0.029255,
"recall-0.05": 0.242021, "recall-0.05": 0.242021,
"recall-0.1": 0.648936, "recall-0.1": 0.651596,
"recall-0.15": 0.864362, "recall-0.15": 0.867021,
"recall-0.25": 0.989362, "recall-0.25": 0.992021,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 376 "num_labels": 376
}, },
"elbow_right": { "elbow_right": {
"count": 375, "count": 376,
"mean": 0.077748, "mean": 0.077757,
"median": 0.070448, "median": 0.070519,
"std": 0.037755, "std": 0.037705,
"sem": 0.001952, "sem": 0.001947,
"min": 0.004749, "min": 0.004749,
"max": 0.194529, "max": 0.194529,
"recall-0.025": 0.042553, "recall-0.025": 0.042553,
"recall-0.05": 0.276596, "recall-0.05": 0.276596,
"recall-0.1": 0.723404, "recall-0.1": 0.726064,
"recall-0.15": 0.941489, "recall-0.15": 0.944149,
"recall-0.25": 0.99734, "recall-0.25": 1.0,
"recall-0.5": 0.99734, "recall-0.5": 1.0,
"num_labels": 376 "num_labels": 376
}, },
"wrist_left": { "wrist_left": {
"count": 376, "count": 376,
"mean": 0.128727, "mean": 0.128965,
"median": 0.113244, "median": 0.113502,
"std": 0.06993, "std": 0.068869,
"sem": 0.003611, "sem": 0.003556,
"min": 0.015136, "min": 0.015136,
"max": 0.458731, "max": 0.352772,
"recall-0.025": 0.013298, "recall-0.025": 0.013298,
"recall-0.05": 0.079787, "recall-0.05": 0.079787,
"recall-0.1": 0.422872, "recall-0.1": 0.417553,
"recall-0.15": 0.672872, "recall-0.15": 0.670213,
"recall-0.25": 0.917553, "recall-0.25": 0.920213,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 376 "num_labels": 376
}, },
"wrist_right": { "wrist_right": {
"count": 376, "count": 376,
"mean": 0.104259, "mean": 0.102037,
"median": 0.09734, "median": 0.097009,
"std": 0.050125, "std": 0.044155,
"sem": 0.002588, "sem": 0.00228,
"min": 0.002425, "min": 0.002425,
"max": 0.461713, "max": 0.277303,
"recall-0.025": 0.005319, "recall-0.025": 0.005319,
"recall-0.05": 0.093085, "recall-0.05": 0.095745,
"recall-0.1": 0.515957, "recall-0.1": 0.521277,
"recall-0.15": 0.853723, "recall-0.15": 0.864362,
"recall-0.25": 0.984043, "recall-0.25": 0.994681,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 376 "num_labels": 376
}, },
@ -769,17 +772,17 @@ Results of the model in various experiments on different datasets. \
}, },
"hip_right": { "hip_right": {
"count": 376, "count": 376,
"mean": 0.065474, "mean": 0.065421,
"median": 0.059695, "median": 0.059695,
"std": 0.035357, "std": 0.034174,
"sem": 0.001826, "sem": 0.001765,
"min": 0.005283, "min": 0.005283,
"max": 0.302623, "max": 0.259007,
"recall-0.025": 0.053191, "recall-0.025": 0.053191,
"recall-0.05": 0.359043, "recall-0.05": 0.359043,
"recall-0.1": 0.906915, "recall-0.1": 0.904255,
"recall-0.15": 0.976064, "recall-0.15": 0.973404,
"recall-0.25": 0.989362, "recall-0.25": 0.992021,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 376 "num_labels": 376
}, },
@ -801,15 +804,15 @@ Results of the model in various experiments on different datasets. \
}, },
"knee_right": { "knee_right": {
"count": 376, "count": 376,
"mean": 0.053573, "mean": 0.053806,
"median": 0.049537, "median": 0.049906,
"std": 0.02731, "std": 0.027608,
"sem": 0.00141, "sem": 0.001426,
"min": 0.008841, "min": 0.008841,
"max": 0.230822, "max": 0.230822,
"recall-0.025": 0.087766, "recall-0.025": 0.087766,
"recall-0.05": 0.50266, "recall-0.05": 0.5,
"recall-0.1": 0.954787, "recall-0.1": 0.952128,
"recall-0.15": 0.992021, "recall-0.15": 0.992021,
"recall-0.25": 1.0, "recall-0.25": 1.0,
"recall-0.5": 1.0, "recall-0.5": 1.0,
@ -817,32 +820,32 @@ Results of the model in various experiments on different datasets. \
}, },
"ankle_left": { "ankle_left": {
"count": 376, "count": 376,
"mean": 0.072656, "mean": 0.074289,
"median": 0.066373, "median": 0.066969,
"std": 0.046322, "std": 0.045644,
"sem": 0.002392, "sem": 0.002357,
"min": 0.009841, "min": 0.009841,
"max": 0.390551, "max": 0.378337,
"recall-0.025": 0.042553, "recall-0.025": 0.042553,
"recall-0.05": 0.329787, "recall-0.05": 0.327128,
"recall-0.1": 0.861702, "recall-0.1": 0.832447,
"recall-0.15": 0.962766, "recall-0.15": 0.944149,
"recall-0.25": 0.984043, "recall-0.25": 0.989362,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 376 "num_labels": 376
}, },
"ankle_right": { "ankle_right": {
"count": 376, "count": 376,
"mean": 0.063864, "mean": 0.066324,
"median": 0.052121, "median": 0.052238,
"std": 0.048194, "std": 0.048596,
"sem": 0.002489, "sem": 0.002509,
"min": 0.007344, "min": 0.007344,
"max": 0.373408, "max": 0.373408,
"recall-0.025": 0.069149, "recall-0.025": 0.069149,
"recall-0.05": 0.43883, "recall-0.05": 0.430851,
"recall-0.1": 0.896277, "recall-0.1": 0.859043,
"recall-0.15": 0.960106, "recall-0.15": 0.946809,
"recall-0.25": 0.986702, "recall-0.25": 0.986702,
"recall-0.5": 1.0, "recall-0.5": 1.0,
"num_labels": 376 "num_labels": 376
@ -850,17 +853,17 @@ Results of the model in various experiments on different datasets. \
"joint_recalls": { "joint_recalls": {
"num_labels": 4888, "num_labels": 4888,
"recall-0.025": 0.04194, "recall-0.025": 0.04194,
"recall-0.05": 0.30176, "recall-0.05": 0.30115,
"recall-0.1": 0.80135, "recall-0.1": 0.79705,
"recall-0.15": 0.93269, "recall-0.15": 0.93208,
"recall-0.25": 0.98732, "recall-0.25": 0.98977,
"recall-0.5": 0.99959 "recall-0.5": 1.0
} }
} }
{ {
"total_parts": 5264, "total_parts": 5264,
"correct_parts": 4995, "correct_parts": 5005,
"pcp": 0.948898 "pcp": 0.950798
} }
``` ```

289
rpt/tracker.hpp Normal file
View File

@ -0,0 +1,289 @@
#pragma once
#include <array>
#include <string>
#include <vector>
#include <algorithm>
#include <limits>
#include <cmath>
#include <iostream>
// =================================================================================================
struct Track
{
std::vector<std::vector<std::array<float, 4>>> core_poses;
std::vector<std::vector<std::array<float, 4>>> full_poses;
std::vector<double> timestamps;
size_t id;
};
// =================================================================================================
class PoseTracker
{
public:
PoseTracker(float max_distance);
std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> track_poses(
const std::vector<std::vector<std::array<float, 4>>> &poses_3d,
const std::vector<std::string> &joint_names,
const double timestamp);
void reset();
private:
float max_distance;
size_t history_size = 3;
float max_movement_speed = 2.0;
std::vector<double> timestamps;
std::vector<Track> pose_tracks;
const std::vector<std::string> core_joints = {
"shoulder_left",
"shoulder_right",
"hip_left",
"hip_right",
"elbow_left",
"elbow_right",
"knee_left",
"knee_right",
"wrist_left",
"wrist_right",
"ankle_left",
"ankle_right",
};
int match_to_track(const std::vector<std::array<float, 4>> &core_pose_3d);
std::vector<std::array<float, 4>> refine_pose(const Track &track);
};
// =================================================================================================
// =================================================================================================
PoseTracker::PoseTracker(float max_distance)
{
this->max_distance = max_distance;
}
// =================================================================================================
void PoseTracker::reset()
{
pose_tracks.clear();
timestamps.clear();
}
// =================================================================================================
std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> PoseTracker::track_poses(
const std::vector<std::vector<std::array<float, 4>>> &poses_3d,
const std::vector<std::string> &joint_names,
const double timestamp)
{
// Extract core joints
std::vector<size_t> core_joint_idx;
for (const auto &joint : core_joints)
{
auto it = std::find(joint_names.begin(), joint_names.end(), joint);
core_joint_idx.push_back(std::distance(joint_names.begin(), it));
}
std::vector<std::vector<std::array<float, 4>>> core_poses;
core_poses.resize(poses_3d.size());
for (size_t i = 0; i < poses_3d.size(); ++i)
{
core_poses[i].resize(core_joint_idx.size());
for (size_t j = 0; j < core_joint_idx.size(); ++j)
{
for (size_t k = 0; k < 4; ++k)
{
core_poses[i][j][k] = poses_3d[i][core_joint_idx[j]][k];
}
}
}
// Match core poses to tracks
for (size_t i = 0; i < core_poses.size(); ++i)
{
int track_idx = match_to_track(core_poses[i]);
if (track_idx == -1)
{
// Create a new track
Track new_track;
new_track.core_poses.push_back(core_poses[i]);
new_track.full_poses.push_back(poses_3d[i]);
new_track.timestamps.push_back(timestamp);
new_track.id = pose_tracks.size();
pose_tracks.push_back(new_track);
}
else
{
// Update existing track
auto &track = pose_tracks[track_idx];
track.core_poses.push_back(core_poses[i]);
track.full_poses.push_back(poses_3d[i]);
track.timestamps.push_back(timestamp);
}
}
// Remove old tracks
timestamps.push_back(timestamp);
if (timestamps.size() > history_size)
{
timestamps.erase(timestamps.begin());
}
double max_age = timestamps.front();
for (size_t i = 0; i < pose_tracks.size();)
{
auto &track = pose_tracks[i];
double last_timestamp = track.timestamps.back();
if (last_timestamp < max_age)
{
pose_tracks.erase(pose_tracks.begin() + i);
}
else
{
++i;
}
}
// Remove old poses from tracks
for (auto &track : pose_tracks)
{
while (track.core_poses.size() > history_size)
{
track.core_poses.erase(track.core_poses.begin());
track.full_poses.erase(track.full_poses.begin());
track.timestamps.erase(track.timestamps.begin());
}
}
// Refine poses
std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> tracked_poses;
for (size_t i = 0; i < pose_tracks.size(); ++i)
{
auto &track = pose_tracks[i];
if (track.core_poses.size() > 0)
{
std::vector<std::array<float, 4>> refined_pose = refine_pose(track);
tracked_poses.emplace_back(track.id, refined_pose);
}
}
return tracked_poses;
}
// =================================================================================================
int PoseTracker::match_to_track(const std::vector<std::array<float, 4>> &core_pose_3d)
{
int best_track = -1;
float best_distance_sq = max_distance * max_distance;
for (size_t i = 0; i < pose_tracks.size(); ++i)
{
const auto &track = pose_tracks[i];
if (track.core_poses.size() == 0)
continue;
// Calculate distance to the last pose in the track
const auto &last_pose = track.core_poses.back();
float distance_sq = 0.0;
for (size_t j = 0; j < core_pose_3d.size(); ++j)
{
float dx = core_pose_3d[j][0] - last_pose[j][0];
float dy = core_pose_3d[j][1] - last_pose[j][1];
float dz = core_pose_3d[j][2] - last_pose[j][2];
distance_sq += dx * dx + dy * dy + dz * dz;
}
distance_sq /= core_pose_3d.size();
if (distance_sq < best_distance_sq)
{
best_distance_sq = distance_sq;
best_track = static_cast<int>(i);
}
}
return best_track;
}
// =================================================================================================
std::vector<std::array<float, 4>> PoseTracker::refine_pose(const Track &track)
{
// Restrict maximum movement by physical constraints, by clipping the pose to the maximum
// movement distance from one of the track's history poses
//
// While advanced sensor filtering techniques, like using a Kalman-Filter, might improve the
// average accuracy of the pose, they introduce update delays on fast movement changes. For
// example, if a person stands still for a while and then suddenly moves, the first few frames
// will likely be treated as outliers, since the filter will not be able to adapt fast enough.
// This behaviour is not desired in a real-time critical applications, where the pose needs to
// be updated to the real physical position of the person as fast as possible. Therefore, only
// the movement speed is limited here.
if (track.core_poses.size() < 2)
{
return track.full_poses.back();
}
// Calculate maximum possible movement distance from each history pose
std::vector<float> max_movement_dists_sq;
max_movement_dists_sq.resize(track.core_poses.size() - 1);
double last_timestamp = track.timestamps.back();
for (size_t i = 0; i < track.core_poses.size() - 1; ++i)
{
double ts = track.timestamps[i];
float max_movement = max_movement_speed * (last_timestamp - ts);
max_movement_dists_sq[i] = max_movement * max_movement;
}
// Clip joint if required
std::vector<std::array<float, 4>> refined_pose = track.full_poses.back();
for (size_t i = 0; i < refined_pose.size(); ++i)
{
float min_dist_sq = std::numeric_limits<float>::infinity();
size_t closest_idx = 0;
bool clip = true;
for (size_t j = 0; j < max_movement_dists_sq.size(); ++j)
{
float dx = refined_pose[i][0] - track.full_poses[j][i][0];
float dy = refined_pose[i][1] - track.full_poses[j][i][1];
float dz = refined_pose[i][2] - track.full_poses[j][i][2];
float dist_sq = dx * dx + dy * dy + dz * dz;
if (dist_sq < min_dist_sq)
{
min_dist_sq = dist_sq;
closest_idx = j;
}
if (dist_sq <= max_movement_dists_sq[j])
{
clip = false;
break;
}
}
if (clip)
{
float dist_sq = min_dist_sq;
float scale = max_movement_dists_sq[closest_idx] / dist_sq;
float dx = refined_pose[i][0] - track.full_poses[closest_idx][i][0];
float dy = refined_pose[i][1] - track.full_poses[closest_idx][i][1];
float dz = refined_pose[i][2] - track.full_poses[closest_idx][i][2];
refined_pose[i][0] = track.full_poses[closest_idx][i][0] + dx * scale;
refined_pose[i][1] = track.full_poses[closest_idx][i][1] + dy * scale;
refined_pose[i][2] = track.full_poses[closest_idx][i][2] + dz * scale;
// Set confidence to a low value if the joint is clipped
refined_pose[i][3] = 0.1;
}
}
return refined_pose;
}

View File

@ -17,6 +17,7 @@ using json = nlohmann::json;
#include "/RapidPoseTriangulation/rpt/camera.hpp" #include "/RapidPoseTriangulation/rpt/camera.hpp"
#include "/RapidPoseTriangulation/rpt/interface.hpp" #include "/RapidPoseTriangulation/rpt/interface.hpp"
#include "/RapidPoseTriangulation/rpt/tracker.hpp"
#include "/RapidPoseTriangulation/scripts/utils_2d_pose.hpp" #include "/RapidPoseTriangulation/scripts/utils_2d_pose.hpp"
#include "/RapidPoseTriangulation/scripts/utils_pipeline.hpp" #include "/RapidPoseTriangulation/scripts/utils_pipeline.hpp"
@ -121,6 +122,7 @@ int main(int argc, char **argv)
const float min_match_score = config["min_match_score"]; const float min_match_score = config["min_match_score"];
const size_t min_group_size = config["min_group_size"]; const size_t min_group_size = config["min_group_size"];
const int take_interval = config["take_interval"]; const int take_interval = config["take_interval"];
const float ifps = config["fps"];
// Load 2D model // Load 2D model
bool use_wb = utils_pipeline::use_whole_body(whole_body); bool use_wb = utils_pipeline::use_whole_body(whole_body);
@ -131,6 +133,9 @@ int main(int argc, char **argv)
// Load 3D model // Load 3D model
std::unique_ptr<Triangulator> tri_model = std::make_unique<Triangulator>( std::unique_ptr<Triangulator> tri_model = std::make_unique<Triangulator>(
min_match_score, min_group_size); min_match_score, min_group_size);
const float max_distance = 0.3 + 2.0 / ifps;
std::unique_ptr<PoseTracker> pose_tracker = std::make_unique<PoseTracker>(
max_distance);
// Timers // Timers
size_t time_count = dataset.size(); size_t time_count = dataset.size();
@ -138,10 +143,12 @@ int main(int argc, char **argv)
std::vector<double> times_debayer; std::vector<double> times_debayer;
std::vector<double> times_pose2d; std::vector<double> times_pose2d;
std::vector<double> times_pose3d; std::vector<double> times_pose3d;
std::vector<double> times_tracks;
times_image.reserve(time_count); times_image.reserve(time_count);
times_debayer.reserve(time_count); times_debayer.reserve(time_count);
times_pose2d.reserve(time_count); times_pose2d.reserve(time_count);
times_pose3d.reserve(time_count); times_pose3d.reserve(time_count);
times_tracks.reserve(time_count);
size_t print_steps = (size_t)std::floor((float)time_count / 100.0f); size_t print_steps = (size_t)std::floor((float)time_count / 100.0f);
print_steps = std::max((size_t)1, print_steps); print_steps = std::max((size_t)1, print_steps);
@ -214,6 +221,7 @@ int main(int argc, char **argv)
{ {
// Reset last poses if scene changes // Reset last poses if scene changes
tri_model->reset(); tri_model->reset();
pose_tracker->reset();
old_scene = item["scene"]; old_scene = item["scene"];
} }
@ -241,6 +249,19 @@ int main(int argc, char **argv)
elapsed = std::chrono::high_resolution_clock::now() - stime; elapsed = std::chrono::high_resolution_clock::now() - stime;
times_pose3d.push_back(elapsed.count()); times_pose3d.push_back(elapsed.count());
stime = std::chrono::high_resolution_clock::now();
double ts = ((int)item["index"]) / ifps;
auto pose_tracks = pose_tracker->track_poses(poses_3d, joint_names_2d, ts);
std::vector<std::vector<std::array<float, 4>>> poses_3d_refined;
for (size_t j = 0; j < pose_tracks.size(); j++)
{
auto &pose = std::get<1>(pose_tracks[j]);
poses_3d_refined.push_back(pose);
}
poses_3d = poses_3d_refined;
elapsed = std::chrono::high_resolution_clock::now() - stime;
times_tracks.push_back(elapsed.count());
all_poses_3d.push_back(std::move(poses_3d)); all_poses_3d.push_back(std::move(poses_3d));
all_ids.push_back(item["id"].get<std::string>()); all_ids.push_back(item["id"].get<std::string>());
old_id = item["index"]; old_id = item["index"];
@ -254,23 +275,27 @@ int main(int argc, char **argv)
double time_debayer = 0.0; double time_debayer = 0.0;
double time_pose2d = 0.0; double time_pose2d = 0.0;
double time_pose3d = 0.0; double time_pose3d = 0.0;
double time_tracks = 0.0;
for (size_t i = warmup; i < time_count; i++) for (size_t i = warmup; i < time_count; i++)
{ {
time_image += times_image[i]; time_image += times_image[i];
time_debayer += times_debayer[i]; time_debayer += times_debayer[i];
time_pose2d += times_pose2d[i]; time_pose2d += times_pose2d[i];
time_pose3d += times_pose3d[i]; time_pose3d += times_pose3d[i];
time_tracks += times_tracks[i];
} }
double avg_time_image = time_image / (time_count - warmup); double avg_time_image = time_image / (time_count - warmup);
double avg_time_debayer = time_debayer / (time_count - warmup); double avg_time_debayer = time_debayer / (time_count - warmup);
double avg_time_pose2d = time_pose2d / (time_count - warmup); double avg_time_pose2d = time_pose2d / (time_count - warmup);
double avg_time_pose3d = time_pose3d / (time_count - warmup); double avg_time_pose3d = time_pose3d / (time_count - warmup);
double fps = 1.0 / (avg_time_debayer + avg_time_pose2d + avg_time_pose3d); double avg_time_tracks = time_tracks / (time_count - warmup);
double fps = 1.0 / (avg_time_debayer + avg_time_pose2d + avg_time_pose3d + avg_time_tracks);
std::cout << "{\n" std::cout << "{\n"
<< " \"img_loading\": " << avg_time_image << ",\n" << " \"img_loading\": " << avg_time_image << ",\n"
<< " \"demosaicing\": " << avg_time_debayer << ",\n" << " \"demosaicing\": " << avg_time_debayer << ",\n"
<< " \"avg_time_2d\": " << avg_time_pose2d << ",\n" << " \"avg_time_2d\": " << avg_time_pose2d << ",\n"
<< " \"avg_time_3d\": " << avg_time_pose3d << ",\n" << " \"avg_time_3d\": " << avg_time_pose3d << ",\n"
<< " \"time_tracks\": " << avg_time_tracks << ",\n"
<< " \"fps\": " << fps << "\n" << " \"fps\": " << fps << "\n"
<< "}" << std::endl; << "}" << std::endl;
tri_model->print_stats(); tri_model->print_stats();

View File

@ -55,6 +55,7 @@ datasets = {
"human36m": { "human36m": {
"path": "/datasets/human36m/skelda/pose_test.json", "path": "/datasets/human36m/skelda/pose_test.json",
"take_interval": 5, "take_interval": 5,
"fps": 50,
"min_match_score": 0.95, "min_match_score": 0.95,
"min_group_size": 1, "min_group_size": 1,
"min_bbox_score": 0.4, "min_bbox_score": 0.4,
@ -84,6 +85,7 @@ datasets = {
}, },
"campus": { "campus": {
"path": "/datasets/campus/skelda/test.json", "path": "/datasets/campus/skelda/test.json",
"fps": 20,
"take_interval": 1, "take_interval": 1,
"min_match_score": 0.92, "min_match_score": 0.92,
"min_bbox_score": 0.5, "min_bbox_score": 0.5,
@ -91,6 +93,7 @@ datasets = {
"shelf": { "shelf": {
"path": "/datasets/shelf/skelda/test.json", "path": "/datasets/shelf/skelda/test.json",
"take_interval": 1, "take_interval": 1,
"fps": 20,
"min_match_score": 0.95, "min_match_score": 0.95,
"min_group_size": 2, "min_group_size": 2,
}, },
@ -346,6 +349,7 @@ def main():
"batch_poses": batch_poses, "batch_poses": batch_poses,
"whole_body": whole_body, "whole_body": whole_body,
"take_interval": datasets[dataset_use]["take_interval"], "take_interval": datasets[dataset_use]["take_interval"],
"fps": datasets[dataset_use]["fps"],
} }
utils_pipeline.save_json(config, config_path) utils_pipeline.save_json(config, config_path)