{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Presenting SOTA results on CIMA dataset\n",
"\n",
"This notebook serves as visualisation for State-of-the-Art methods on CIMA dataset\n",
"\n",
"_Note: In case you want to get some further evaluation related to new submission, you may contact JB._"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/jb/.local/lib/python3.6/site-packages/dask/config.py:161: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.\n",
" data = yaml.load(f.read()) or {}\n"
]
}
],
"source": [
"%matplotlib inline\n",
"%load_ext autoreload\n",
"%autoreload 2\n",
"\n",
"import os, sys\n",
"import glob, json\n",
"import shutil\n",
"\n",
"import tqdm\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"sys.path += [os.path.abspath('.'), os.path.abspath('..')] # Add path to root\n",
"from birl.utilities.data_io import update_path\n",
"from birl.utilities.evaluate import compute_ranking\n",
"from birl.utilities.drawing import RadarChart, draw_scatter_double_scale\n",
"from bm_ANHIR.generate_regist_pairs import VAL_STATUS_TRAIN, VAL_STATUS_TEST\n",
"from bm_ANHIR.evaluate_submission import COL_TISSUE"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook serves for computing extended statistics (e.g. metrics inliding ranks) and visualie some more statistics.\n",
"\n",
"\n",
"You can run the notebook to see result on both scales `10k` and `full`.\n",
"To do so you need to unzip paticular archive in `bm_CIMA` to a separate folder and point-out this path as `PATH_RESULTS` bellow."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# folder with all participants submissions\n",
"PATH_RESULTS = os.path.join(update_path('bm_CIMA'), 'size-10k')\n",
"# temporary folder for unzipping submissions\n",
"PATH_TEMP = os.path.abspath(os.path.expanduser('~/Desktop/CIMA_size-10k'))\n",
"# configuration needed for recomputing detail metrics\n",
"PATH_DATASET = os.path.join(update_path('bm_ANHIR'), 'dataset_ANHIR')\n",
"PATH_TABLE = os.path.join(update_path('bm_CIMA'), 'dataset_CIMA_10k.csv')\n",
"# landmarks provided to participants, in early ANHIR stage we provided only 20% points per image pair\n",
"PATH_LNDS_PROVIDED = os.path.join(PATH_DATASET, 'landmarks_all')\n",
"# complete landmarks dataset\n",
"PATH_LNDS_COMPLATE = os.path.join(PATH_DATASET, 'landmarks_all')\n",
"# baseline for normalization of computing time\n",
"PATH_COMP_BM = os.path.join(PATH_DATASET, 'computer-performances_cmpgrid-71.json')\n",
"FIELD_TISSUE = 'type-tissue'\n",
"\n",
"# configuration for Pandas tables\n",
"pd.set_option(\"display.max_columns\", 25)\n",
"assert os.path.isdir(PATH_TEMP)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Some initial replacement and name adjustments"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# simplify the metrics names according paper\n",
"METRIC_LUT = {'Average-': 'A', 'Rank-': 'R', 'Median-': 'M', 'Max-': 'S'}\n",
"\n",
"def col_metric_rename(col):\n",
" for m in METRIC_LUT:\n",
" col = col.replace(m, METRIC_LUT[m])\n",
" return col"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Parse and load submissions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Extract metrics from particular submissions\n",
"\n",
"All submissions are expected to be as a zip archives in single folder. The archive name is the author name."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
],
"source": [
"# Find all archives and unzip them to the same folder.\n",
"archive_paths = sorted(glob.glob(os.path.join(PATH_RESULTS, '*.zip')))\n",
"submission_dirs = []\n",
"\n",
"for path_zip in tqdm.tqdm(archive_paths, desc='unzipping'):\n",
" sub = os.path.join(PATH_TEMP, os.path.splitext(os.path.basename(path_zip))[0])\n",
" os.system('unzip -o \"%s\" -d \"%s\"' % (path_zip, sub))\n",
" sub_ins = glob.glob(os.path.join(sub, '*'))\n",
" # if the zip subfolder contain only one folder move it up\n",
" if len(sub_ins) == 1:\n",
" [shutil.move(p, sub) for p in glob.glob(os.path.join(sub_ins[0], '*'))]\n",
" submission_dirs.append(sub)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Parse submissions and compute the final metrics. This can be computed just once.\n",
"\n",
"**NOTE:** you can skip this step if you have already computed metrics in JSON files"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"import bm_ANHIR.evaluate_submission\n",
"\n",
"bm_ANHIR.evaluate_submission.REQUIRE_OVERLAP_INIT_TARGET = False\n",
"\n",
"tqdm_bar = tqdm.tqdm(total=len(submission_dirs))\n",
"for path_sub in submission_dirs:\n",
" tqdm_bar.set_description(path_sub)\n",
" # run the evaluation with details\n",
" path_json = bm_ANHIR.evaluate_submission.main(\n",
" path_experiment=path_sub, path_table=PATH_TABLE, path_dataset=PATH_LNDS_PROVIDED,\n",
" path_reference=PATH_LNDS_COMPLATE, path_comp_bm=PATH_COMP_BM, path_output=path_sub,\n",
" min_landmarks=1., details=True, allow_inverse=True)\n",
" # rename the metrics by the participant\n",
" shutil.copy(os.path.join(path_sub, 'metrics.json'),\n",
" os.path.join(PATH_RESULTS, os.path.basename(path_sub) + '.json'))\n",
" tqdm_bar.update()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Load parsed measures from each experiment"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Users: dict_keys(['ANTs', 'DROP', 'Elastix', 'RNiftyReg', 'RVSS', 'bUnwarpJ-SIFT', 'bUnwarpJ'])\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"submission_paths = sorted(glob.glob(os.path.join(PATH_RESULTS, '*.json')))\n",
"submissions = {}\n",
"# loading all participants metrics\n",
"for path_sub in tqdm.tqdm(submission_paths, desc='loading'):\n",
" with open(path_sub, 'r') as fp:\n",
" metrics = json.load(fp)\n",
" # rename tissue types accoding new LUT\n",
" for case in metrics['cases']:\n",
" metrics['cases'][case][FIELD_TISSUE] = metrics['cases'][case][FIELD_TISSUE]\n",
" m_agg = {stat: metrics['aggregates'][stat] for stat in metrics['aggregates']}\n",
" metrics['aggregates'] = m_agg\n",
" submissions[os.path.splitext(os.path.basename(path_sub))[0]] = metrics\n",
"\n",
"print ('Users: %r' % submissions.keys())"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fields: dict_keys(['aggregates', 'cases', 'computer', 'submission-time', 'required-landmarks'])\n",
"required-landmarks: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]\n",
"found tissues: ['lung-lesion', 'lung-lobes', 'mammary-gland']\n"
]
}
],
"source": [
"# split the particular fields inside the measured items\n",
"users = list(submissions.keys())\n",
"print ('Fields: %r' % submissions[users[0]].keys())\n",
"user_aggreg = {u: submissions[u]['aggregates'] for u in users}\n",
"user_computer = {u: submissions[u]['computer'] for u in users}\n",
"user_cases = {u: submissions[u]['cases'] for u in users}\n",
"print ('required-landmarks: %r' % [submissions[u]['required-landmarks'] for u in users])\n",
"tissues = set(user_cases[users[0]][cs][FIELD_TISSUE] for cs in user_cases[users[0]])\n",
"print ('found tissues: %r' % sorted(tissues))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Define colors and markers later used in charts"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"METHODS = sorted(submissions.keys())\n",
"# https://seaborn.pydata.org/tutorial/color_palettes.html\n",
"# https://www.codecademy.com/articles/seaborn-design-ii\n",
"COLOR_PALETTE = \"Set1\"\n",
"METHOD_CMAP = sns.color_palette(COLOR_PALETTE, len(submissions))\n",
"METHOD_COLORS = {m: METHOD_CMAP[i] for i, m in enumerate(METHODS)}\n",
"\n",
"def list_methods_colors(methods):\n",
" return [METHOD_COLORS[m] for m in methods]\n",
"\n",
"def cmap_methods(method):\n",
" return METHOD_COLORS[m]\n",
"\n",
"# define cyclic buffer of markers for methods\n",
"# https://matplotlib.org/3.1.1/api/markers_api.html\n",
"METHOD_MARKERS = dict(zip(submissions.keys(), list('.*^v<>pPhHXdD')))\n",
"# METHOD_MARKERS = dict(zip(submissions.keys(), list('.1234+xosD^v<>')))\n",
"\n",
"def list_methods_markers(methods):\n",
" return [METHOD_MARKERS[m] for m in methods]\n",
"\n",
"# display(pd.DataFrame([METHOD_COLORS, METHOD_MARKERS]).T)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Compute ranked measures"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Extend the aggregated statistic by Rank measures such as compute ranking over all cases for each selected field and average it"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"for field, field_agg in [('rTRE-Median', 'Median-rTRE'),\n",
" ('rTRE-Max', 'Max-rTRE')]:\n",
" # Compute ranking per user in selected metric `field` over all dataset\n",
" user_cases = compute_ranking(user_cases, field)\n",
" for user in users:\n",
" # iterate over Robust or all cases\n",
" for robust in [True, False]:\n",
" # chose inly robyst if it is required\n",
" vals = [user_cases[user][cs][field + '_rank'] for cs in user_cases[user]\n",
" if (robust and user_cases[user][cs]['Robustness']) or (not robust)]\n",
" s_robust = '-Robust' if robust else ''\n",
" user_aggreg[user]['Average-Rank-' + field_agg + s_robust] = np.mean(vals)\n",
" user_aggreg[user]['STD-Rank-' + field_agg + s_robust] = np.std(vals)\n",
" # iterate over all tissue kinds\n",
" for tissue in tissues:\n",
" vals = [user_cases[user][cs][field + '_rank'] for cs in user_cases[user]\n",
" if user_cases[user][cs][FIELD_TISSUE] == tissue]\n",
" user_aggreg[user]['Average-Rank-' + field_agg + '__tissue_' + tissue + '__All'] = np.mean(vals)\n",
" user_aggreg[user]['STD-Rank-' + field_agg + '__tissue_' + tissue + '__All'] = np.std(vals)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Show the raw table with **global** statistic (joint training and testing/evaluation)."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Average-used-landmarks | \n",
" Average-Robustness | \n",
" STD-Robustness | \n",
" Median-Robustness | \n",
" Average-Rank-Median-rTRE | \n",
" Average-Rank-Max-rTRE | \n",
" Average-Median-rTRE | \n",
" STD-Median-rTRE | \n",
" Median-Median-rTRE | \n",
" Average-Max-rTRE | \n",
" STD-Max-rTRE | \n",
" Median-Max-rTRE | \n",
" Average-Average-rTRE | \n",
" STD-Average-rTRE | \n",
" Median-Average-rTRE | \n",
" Average-Norm-Time | \n",
" STD-Norm-Time | \n",
" Median-Norm-Time | \n",
" STD-Rank-Median-rTRE | \n",
" STD-Rank-Max-rTRE | \n",
"
\n",
" \n",
" \n",
" \n",
" ANTs | \n",
" 1.0 | \n",
" 0.790214 | \n",
" 0.248232 | \n",
" 0.892468 | \n",
" 3.342593 | \n",
" 2.824074 | \n",
" 0.023031 | \n",
" 0.020008 | \n",
" 0.016662 | \n",
" 0.055601 | \n",
" 0.036617 | \n",
" 0.050011 | \n",
" 0.024131 | \n",
" 0.019472 | \n",
" 0.018600 | \n",
" 52.167229 | \n",
" 26.893003 | \n",
" 60.916335 | \n",
" 1.564431 | \n",
" 1.489648 | \n",
"
\n",
" \n",
" DROP | \n",
" 1.0 | \n",
" 0.842451 | \n",
" 0.304637 | \n",
" 0.986842 | \n",
" 2.296296 | \n",
" 2.564815 | \n",
" 0.025039 | \n",
" 0.051129 | \n",
" 0.005084 | \n",
" 0.062894 | \n",
" 0.079209 | \n",
" 0.029880 | \n",
" 0.026894 | \n",
" 0.051019 | \n",
" 0.006521 | \n",
" 1.856635 | \n",
" 0.844369 | \n",
" 2.160855 | \n",
" 2.042417 | \n",
" 2.148527 | \n",
"
\n",
" \n",
" bUnwarpJ | \n",
" 1.0 | \n",
" 0.740683 | \n",
" 0.277490 | \n",
" 0.831250 | \n",
" 3.601852 | \n",
" 3.824074 | \n",
" 0.028214 | \n",
" 0.020833 | \n",
" 0.030013 | \n",
" 0.066614 | \n",
" 0.036561 | \n",
" 0.064172 | \n",
" 0.029630 | \n",
" 0.020194 | \n",
" 0.031437 | \n",
" 2.989572 | \n",
" 1.125316 | \n",
" 2.933392 | \n",
" 1.855621 | \n",
" 1.762935 | \n",
"
\n",
" \n",
" RNiftyReg | \n",
" 1.0 | \n",
" 0.680507 | \n",
" 0.296854 | \n",
" 0.702044 | \n",
" 4.222222 | \n",
" 4.064815 | \n",
" 0.031981 | \n",
" 0.019345 | \n",
" 0.032205 | \n",
" 0.068474 | \n",
" 0.034884 | \n",
" 0.068234 | \n",
" 0.033036 | \n",
" 0.019073 | \n",
" 0.034479 | \n",
" 0.364217 | \n",
" 0.598157 | \n",
" 0.045782 | \n",
" 1.517389 | \n",
" 1.760014 | \n",
"
\n",
" \n",
" Elastix | \n",
" 1.0 | \n",
" 0.795504 | \n",
" 0.164782 | \n",
" 0.807692 | \n",
" 4.527778 | \n",
" 5.000000 | \n",
" 0.037900 | \n",
" 0.028974 | \n",
" 0.034742 | \n",
" 0.082920 | \n",
" 0.044742 | \n",
" 0.075468 | \n",
" 0.039706 | \n",
" 0.028133 | \n",
" 0.037397 | \n",
" 4.024381 | \n",
" 0.754311 | \n",
" 4.254518 | \n",
" 1.807691 | \n",
" 1.563472 | \n",
"
\n",
" \n",
" RVSS | \n",
" 1.0 | \n",
" 0.574520 | \n",
" 0.289345 | \n",
" 0.541241 | \n",
" 4.981481 | \n",
" 4.462963 | \n",
" 0.059515 | \n",
" 0.158266 | \n",
" 0.032394 | \n",
" 0.094764 | \n",
" 0.165354 | \n",
" 0.063392 | \n",
" 0.060600 | \n",
" 0.157822 | \n",
" 0.034269 | \n",
" 1.499862 | \n",
" 0.825750 | \n",
" 1.229713 | \n",
" 1.747917 | \n",
" 1.734326 | \n",
"
\n",
" \n",
" bUnwarpJ-SIFT | \n",
" 1.0 | \n",
" 0.496952 | \n",
" 0.383557 | \n",
" 0.540145 | \n",
" 5.027778 | \n",
" 5.259259 | \n",
" 0.074338 | \n",
" 0.079285 | \n",
" 0.042298 | \n",
" 0.135266 | \n",
" 0.122401 | \n",
" 0.096839 | \n",
" 0.077425 | \n",
" 0.080656 | \n",
" 0.046481 | \n",
" 2.659866 | \n",
" 1.165022 | \n",
" 2.708990 | \n",
" 1.863183 | \n",
" 1.796964 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Average-used-landmarks Average-Robustness STD-Robustness \\\n",
"ANTs 1.0 0.790214 0.248232 \n",
"DROP 1.0 0.842451 0.304637 \n",
"bUnwarpJ 1.0 0.740683 0.277490 \n",
"RNiftyReg 1.0 0.680507 0.296854 \n",
"Elastix 1.0 0.795504 0.164782 \n",
"RVSS 1.0 0.574520 0.289345 \n",
"bUnwarpJ-SIFT 1.0 0.496952 0.383557 \n",
"\n",
" Median-Robustness Average-Rank-Median-rTRE \\\n",
"ANTs 0.892468 3.342593 \n",
"DROP 0.986842 2.296296 \n",
"bUnwarpJ 0.831250 3.601852 \n",
"RNiftyReg 0.702044 4.222222 \n",
"Elastix 0.807692 4.527778 \n",
"RVSS 0.541241 4.981481 \n",
"bUnwarpJ-SIFT 0.540145 5.027778 \n",
"\n",
" Average-Rank-Max-rTRE Average-Median-rTRE STD-Median-rTRE \\\n",
"ANTs 2.824074 0.023031 0.020008 \n",
"DROP 2.564815 0.025039 0.051129 \n",
"bUnwarpJ 3.824074 0.028214 0.020833 \n",
"RNiftyReg 4.064815 0.031981 0.019345 \n",
"Elastix 5.000000 0.037900 0.028974 \n",
"RVSS 4.462963 0.059515 0.158266 \n",
"bUnwarpJ-SIFT 5.259259 0.074338 0.079285 \n",
"\n",
" Median-Median-rTRE Average-Max-rTRE STD-Max-rTRE \\\n",
"ANTs 0.016662 0.055601 0.036617 \n",
"DROP 0.005084 0.062894 0.079209 \n",
"bUnwarpJ 0.030013 0.066614 0.036561 \n",
"RNiftyReg 0.032205 0.068474 0.034884 \n",
"Elastix 0.034742 0.082920 0.044742 \n",
"RVSS 0.032394 0.094764 0.165354 \n",
"bUnwarpJ-SIFT 0.042298 0.135266 0.122401 \n",
"\n",
" Median-Max-rTRE Average-Average-rTRE STD-Average-rTRE \\\n",
"ANTs 0.050011 0.024131 0.019472 \n",
"DROP 0.029880 0.026894 0.051019 \n",
"bUnwarpJ 0.064172 0.029630 0.020194 \n",
"RNiftyReg 0.068234 0.033036 0.019073 \n",
"Elastix 0.075468 0.039706 0.028133 \n",
"RVSS 0.063392 0.060600 0.157822 \n",
"bUnwarpJ-SIFT 0.096839 0.077425 0.080656 \n",
"\n",
" Median-Average-rTRE Average-Norm-Time STD-Norm-Time \\\n",
"ANTs 0.018600 52.167229 26.893003 \n",
"DROP 0.006521 1.856635 0.844369 \n",
"bUnwarpJ 0.031437 2.989572 1.125316 \n",
"RNiftyReg 0.034479 0.364217 0.598157 \n",
"Elastix 0.037397 4.024381 0.754311 \n",
"RVSS 0.034269 1.499862 0.825750 \n",
"bUnwarpJ-SIFT 0.046481 2.659866 1.165022 \n",
"\n",
" Median-Norm-Time STD-Rank-Median-rTRE STD-Rank-Max-rTRE \n",
"ANTs 60.916335 1.564431 1.489648 \n",
"DROP 2.160855 2.042417 2.148527 \n",
"bUnwarpJ 2.933392 1.855621 1.762935 \n",
"RNiftyReg 0.045782 1.517389 1.760014 \n",
"Elastix 4.254518 1.807691 1.563472 \n",
"RVSS 1.229713 1.747917 1.734326 \n",
"bUnwarpJ-SIFT 2.708990 1.863183 1.796964 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cols_all = [col for col in pd.DataFrame(user_aggreg).T.columns \n",
" if not any(n in col for n in [VAL_STATUS_TRAIN, VAL_STATUS_TEST, '_tissue_', '_any'])]\n",
"cols_general = list(filter(lambda c: not c.endswith('-Robust'), cols_all))\n",
"dfx = pd.DataFrame(user_aggreg).T.sort_values('Average-Median-rTRE')[cols_general]\n",
"display(dfx)\n",
"# Exporting results to CSV\n",
"dfx.sort_index().to_csv(os.path.join(PATH_TEMP, 'results_overall.csv'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Only **robust** metrics (computed over images pairs with robustness higher then a threshold)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Average-Median-rTRE | \n",
" STD-Median-rTRE | \n",
" Median-Median-rTRE | \n",
" Average-Max-rTRE | \n",
" STD-Max-rTRE | \n",
" Median-Max-rTRE | \n",
" Average-Average-rTRE | \n",
" STD-Average-rTRE | \n",
" Median-Average-rTRE | \n",
" Average-Norm-Time | \n",
" STD-Norm-Time | \n",
" Median-Norm-Time | \n",
" Average-Rank-Median-rTRE | \n",
" STD-Rank-Median-rTRE | \n",
" Average-Rank-Max-rTRE | \n",
" STD-Rank-Max-rTRE | \n",
"
\n",
" \n",
" \n",
" \n",
" ANTs | \n",
" 0.019158 | \n",
" 0.017901 | \n",
" 0.012060 | \n",
" 0.051248 | \n",
" 0.036556 | \n",
" 0.041127 | \n",
" 0.020362 | \n",
" 0.017289 | \n",
" 0.014229 | \n",
" 50.306482 | \n",
" 27.266031 | \n",
" 55.401263 | \n",
" 3.342593 | \n",
" 1.564431 | \n",
" 2.824074 | \n",
" 1.489648 | \n",
"
\n",
" \n",
" DROP | \n",
" 0.006222 | \n",
" 0.007302 | \n",
" 0.004133 | \n",
" 0.035815 | \n",
" 0.034673 | \n",
" 0.024499 | \n",
" 0.008198 | \n",
" 0.008946 | \n",
" 0.005886 | \n",
" 1.926173 | \n",
" 0.821015 | \n",
" 2.271720 | \n",
" 2.029412 | \n",
" 1.768215 | \n",
" 2.313725 | \n",
" 1.935126 | \n",
"
\n",
" \n",
" bUnwarpJ | \n",
" 0.024697 | \n",
" 0.020917 | \n",
" 0.021041 | \n",
" 0.062631 | \n",
" 0.038681 | \n",
" 0.057320 | \n",
" 0.026341 | \n",
" 0.020400 | \n",
" 0.023998 | \n",
" 2.945704 | \n",
" 1.038554 | \n",
" 2.902659 | \n",
" 3.601852 | \n",
" 1.855621 | \n",
" 3.824074 | \n",
" 1.762935 | \n",
"
\n",
" \n",
" RNiftyReg | \n",
" 0.029002 | \n",
" 0.020507 | \n",
" 0.030274 | \n",
" 0.066526 | \n",
" 0.038920 | \n",
" 0.066252 | \n",
" 0.030126 | \n",
" 0.020228 | \n",
" 0.032280 | \n",
" 0.382616 | \n",
" 0.612680 | \n",
" 0.045494 | \n",
" 4.188679 | \n",
" 1.505419 | \n",
" 4.028302 | \n",
" 1.750782 | \n",
"
\n",
" \n",
" Elastix | \n",
" 0.035819 | \n",
" 0.028515 | \n",
" 0.032164 | \n",
" 0.081753 | \n",
" 0.045233 | \n",
" 0.071432 | \n",
" 0.037716 | \n",
" 0.027670 | \n",
" 0.034383 | \n",
" 4.007976 | \n",
" 0.758227 | \n",
" 3.978500 | \n",
" 4.527778 | \n",
" 1.807691 | \n",
" 5.000000 | \n",
" 1.563472 | \n",
"
\n",
" \n",
" RVSS | \n",
" 0.029296 | \n",
" 0.024597 | \n",
" 0.021571 | \n",
" 0.064435 | \n",
" 0.045133 | \n",
" 0.050208 | \n",
" 0.030293 | \n",
" 0.024747 | \n",
" 0.023583 | \n",
" 1.456545 | \n",
" 0.747360 | \n",
" 1.343542 | \n",
" 4.913462 | \n",
" 1.743728 | \n",
" 4.375000 | \n",
" 1.705125 | \n",
"
\n",
" \n",
" bUnwarpJ-SIFT | \n",
" 0.032093 | \n",
" 0.018648 | \n",
" 0.034173 | \n",
" 0.076951 | \n",
" 0.034319 | \n",
" 0.073679 | \n",
" 0.034356 | \n",
" 0.017777 | \n",
" 0.034625 | \n",
" 2.896436 | \n",
" 1.167257 | \n",
" 2.824024 | \n",
" 4.505882 | \n",
" 1.766509 | \n",
" 4.800000 | \n",
" 1.761016 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Average-Median-rTRE STD-Median-rTRE Median-Median-rTRE \\\n",
"ANTs 0.019158 0.017901 0.012060 \n",
"DROP 0.006222 0.007302 0.004133 \n",
"bUnwarpJ 0.024697 0.020917 0.021041 \n",
"RNiftyReg 0.029002 0.020507 0.030274 \n",
"Elastix 0.035819 0.028515 0.032164 \n",
"RVSS 0.029296 0.024597 0.021571 \n",
"bUnwarpJ-SIFT 0.032093 0.018648 0.034173 \n",
"\n",
" Average-Max-rTRE STD-Max-rTRE Median-Max-rTRE \\\n",
"ANTs 0.051248 0.036556 0.041127 \n",
"DROP 0.035815 0.034673 0.024499 \n",
"bUnwarpJ 0.062631 0.038681 0.057320 \n",
"RNiftyReg 0.066526 0.038920 0.066252 \n",
"Elastix 0.081753 0.045233 0.071432 \n",
"RVSS 0.064435 0.045133 0.050208 \n",
"bUnwarpJ-SIFT 0.076951 0.034319 0.073679 \n",
"\n",
" Average-Average-rTRE STD-Average-rTRE Median-Average-rTRE \\\n",
"ANTs 0.020362 0.017289 0.014229 \n",
"DROP 0.008198 0.008946 0.005886 \n",
"bUnwarpJ 0.026341 0.020400 0.023998 \n",
"RNiftyReg 0.030126 0.020228 0.032280 \n",
"Elastix 0.037716 0.027670 0.034383 \n",
"RVSS 0.030293 0.024747 0.023583 \n",
"bUnwarpJ-SIFT 0.034356 0.017777 0.034625 \n",
"\n",
" Average-Norm-Time STD-Norm-Time Median-Norm-Time \\\n",
"ANTs 50.306482 27.266031 55.401263 \n",
"DROP 1.926173 0.821015 2.271720 \n",
"bUnwarpJ 2.945704 1.038554 2.902659 \n",
"RNiftyReg 0.382616 0.612680 0.045494 \n",
"Elastix 4.007976 0.758227 3.978500 \n",
"RVSS 1.456545 0.747360 1.343542 \n",
"bUnwarpJ-SIFT 2.896436 1.167257 2.824024 \n",
"\n",
" Average-Rank-Median-rTRE STD-Rank-Median-rTRE \\\n",
"ANTs 3.342593 1.564431 \n",
"DROP 2.029412 1.768215 \n",
"bUnwarpJ 3.601852 1.855621 \n",
"RNiftyReg 4.188679 1.505419 \n",
"Elastix 4.527778 1.807691 \n",
"RVSS 4.913462 1.743728 \n",
"bUnwarpJ-SIFT 4.505882 1.766509 \n",
"\n",
" Average-Rank-Max-rTRE STD-Rank-Max-rTRE \n",
"ANTs 2.824074 1.489648 \n",
"DROP 2.313725 1.935126 \n",
"bUnwarpJ 3.824074 1.762935 \n",
"RNiftyReg 4.028302 1.750782 \n",
"Elastix 5.000000 1.563472 \n",
"RVSS 4.375000 1.705125 \n",
"bUnwarpJ-SIFT 4.800000 1.761016 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cols_robust = list(filter(lambda c: c.endswith('-Robust'), cols_all))\n",
"dfx = pd.DataFrame(user_aggreg).T.sort_values('Average-Median-rTRE')[cols_robust]\n",
"dfx.columns = list(map(lambda c: c.replace('-Robust', ''), dfx.columns))\n",
"display(dfx)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Define color and markers per method which shall be used later..."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Odered methods by \"Average-Rank-Median-rTRE\": ['DROP', 'ANTs', 'bUnwarpJ', 'RNiftyReg', 'Elastix', 'RVSS', 'bUnwarpJ-SIFT']\n"
]
}
],
"source": [
"col_ranking = 'Average-Rank-Median-rTRE'\n",
"dfx = pd.DataFrame(user_aggreg).T.sort_values(col_ranking)\n",
"# display(dfx[[col_ranking]])\n",
"users_ranked = dfx.index\n",
"print('Odered methods by \"%s\": %s' % (col_ranking, list(users_ranked)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Basic visualizations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Show general results in a chart..."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA+cAAAEbCAYAAAC4MfX3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi40LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcv7US4rQAAIABJREFUeJzs3Xl4VOXZP/DvnQRCkBASloAhGJYsBJBiYlgUDBRRXwERtIgoiAqvWl5/irXSFtdq0aLAi+grFFwAxY2KAVQsVcCqoKJGtgSQPexbIBACk9y/P54zMJkESMgkZ+bM93NduZizzJnnZuYszy6qCiIiIiIiIiKyT4jdCSAiIiIiIiIKdsycExEREREREdmMmXMiIiIiIiIimzFzTkRERERERGQzZs6JiIiIiIiIbMbMOREREREREZHNmDknIiIiIiIishkz50REREREREQ2C6upDxKRAQBuBFAfwExV/bymPpuIiIiIiIjIn1Wp5lxEXheRfSKyxmv99SKSKyKbRGQsAKjqfFUdCeA+AIOr8rlERERERERETlLVZu1vArjec4WIhAJ4BcANAFIBDBGRVI9dxlnbiYiIiIiIiAhVzJyr6nIAh7xWZwDYpKqbVfUUgHcB3CTGCwA+VdUfq/K5RERERERERE5SHX3O4wDs8FjeCaAzgP8B0BtAlIi0UdXXynuziIwCMAoAIiIi0uLj46shiedWUlKCkJDgGCePsTpPsMQJMFanCpZYgyVOgLE6VbDEGixxAvbEumHDhgOq2rhGP5TIj9XYgHCqOgXAlArsN11EdgPoFxcXl5abm1v9ifOwdOlSZGZm1uhn2oWxOk+wxAkwVqcKlliDJU6AsTpVsMQaLHEC9sQqIttq9AOJ/Fx1FI/lAfCs7m5urSMiIiIiIiKiclRH5vx7AIki0lJEagO4DUBWZQ6gqgtUdVRUVFQ1JI+IiIiIiIjIv1R1KrW5AL4FkCwiO0XkHlV1ARgNYDGA9QDeV9W1lTxuPxGZnp+fX5XkEREREREREQWEKvU5V9Uh51j/CYBPqnDcBQAWpKenj7zYYxARERERBbu8uNKDK8fl7TjHnkRkN78cfpI150RERERERBRM/DJzzj7nRERERFRd8uLiS/0REfkDv8ycs+aciIiIiIiIgolfZs5Zc05ERERERETBxC8z56w5JyIiIiIiomBSpdHaqwtHayciIiIiIrqwVatWNQkLC5sBoD38tPKVAAAlANa4XK5709LS9pW3g19mzomIiIiIiOjCwsLCZjRt2rRt48aND4eEhKjd6aHylZSUyP79+1P37NkzA0D/8vZhyQoREREREVHgat+4ceOjzJj7t5CQEG3cuHE+TAuH8vepwfRUGPucExERERERVUgIM+aBwfqezpkH98vMOUdrJyIiIiIiCgyhoaFpKSkpqW3atGmXnJyc+uSTT8YWFxcDABYuXBgZGRn5m5SUlNSWLVu2GzVqVHPP986ePbtBUlJSaqtWrdolJSWlzp49u4F726BBgxLi4uI6pKSkpKamprZdsmTJJTUcWo1in3MiIiIiIiKH6PLk4jRfHm/F09etutA+4eHhJTk5OesAIC8vL+zWW29tdfTo0dBJkybtAoD09PSCL7/8clNBQYF06NAh9fPPPz/cp0+f499++23EX/7yl+aff/75hpSUlFM5OTm1+/Tpk5SUlFTUuXPnQgB49tlnd44YMeLwP//5z/oPPPDAZRs2bFjny/j8iV/WnBMREREREVHgiYuLc82YMWPrG2+80aSkpKTUtnr16mm7du0Kt2/fXhsAXnjhhaZjxozZnZKScgoAUlJSTj388MN7xo8f39T7uNdff/2xHTt2hNdIEDbxy8w5+5wTEREREREFptTU1FPFxcXIy8sr1VJ7//79oVu2bAnv06fPMQDYsGFDnc6dO5/w3KdLly7HN2zYUMf7mO+++26DxMTEwupNub38MnPOPudERERERETO8MMPP9RLTk5ObdGixeU9e/Y82qJFC1dF3ztu3LjmKSkpqTNmzGg0c+bMrdWYTNv5ZeaciIiIiIiIAtO6detqh4aGIi4uzgWYPue5ubnrfvrpp7Vz585t9M0330QAQGJi4smVK1fW9XzvypUr6yYlJZ10Lz/77LM7c3Jy1n3zzTcbr7zyypNwMGbOiYiIiIiIyCd27doVNnLkyMtGjBixLySkdHYzJSXl1IMPPrjb3af8scce2zNp0qRmubm5tQEgNze39sSJE5v98Y9/3GND0m3H0dqJiIiIiIjoohUVFYWkpKSkulwuCQ0N1cGDBx988skn95a37yOPPLK/VatWTXNzc2t369at8JlnntnZr1+/NqdPn5ZatWrpX//6153dunVzdN/yc6mxzLmI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laqmX9Sb6Yzs7OytHTt2PGB3OvxRRkZG8osvvrijR48eJzzX33PPPfGJiYknx44du7+m05Sdnd2oY8eOCeVtq44+53EAdngs7wTQGcAUAFNF5EYAC871ZlWdDmA6AKSnp2tmZmalEzDWay5LAJg34++lE5kXW2p52qSHAAAN+9fFwawTWDTio1Lbs3I/KXPMuetTSi1nvre+0mm109KlS3Ex/7928Z6jdMXT11X4vYEWq/dvuKq/X6Dsb9gffr88Vysm0H6/VREssQZLnABjdapAi7Wy91XgBwBn45w4f0KZYzrlvnqhWJ14X6Xg1qNHj8TTp0/L3//+9112p8VbjQ0Ip6rHAYyoyL4i0g9AvzZt2lRvohygKhnWQJcXF19qOS5vxzn2JCIiIiKiYPPdd9/leq9bvnz5RjvSUhHVkTnPA+CZa2puraMa4J1hBS6cae0//8ZSy1kDFvk0TTXHu1XUD2X2cE6sRERERETkJNWROf8eQKKItITJlN8G4PbKHEBVFwBYkJ6ePrIa0heELpxpdaJpN80587ph/7qYNmlOBdtuEBERERER1ayqTqU2F8C3AJJFZKeI3KOqLgCjASwGsB7A+6q6tpLH7Sci0/Pzyw5AQVU37aY5mHbTHBz49VCpDCwRERERERHZo0o156o65BzrPwFQdvQIIiIiIiIiIiqjSjXn1UVVF6jqqKio884nT9XlKSn9R0REREREdA6hoaFpKSkpqYmJie169erV5sCBA6EAkJubW1tE0p577rkm7n2HDRvWYsqUKQ0B4KGHHrp0/vz5kQDw2Wef1WvTpk27lJSU1B9//LHOa6+9FnOhz50yZUrD6OjojikpKaktW7Zs9/TTTze50Hv8WY2N1l4ZHK2daoxX4YP31CBDODUIEREREQWQaTfNSfPl8f774ztWXWif8PDwkpycnHUAMHDgwIQJEyY0fuGFF/YAQExMjGvatGlNHnnkkf116tRRz/dNnjz5zHRms2bNihkzZszuBx544NDChQsj33vvvZj77rvv0IU+u1+/fodnzZq1fc+ePaFt27ZtP3To0MNt2rQ5XflI7eeXmXMOCOdf5g5uW2YdM61EREREROStS5cux3/55ZcI93JMTIzryiuvLHjllVcaPvLIIwc89x00aFBC37598w8fPhy6aNGimGXLlkV99tlnUdu2bQvfvHlznZSUlNQhQ4YcWLBgQfSUKVO2d+vWrRAA0tLSkqdOnbrd81hNmzYtbtGiRdGOHTtqtWnT5vSuXbvCRowYcVleXl5tAJg4ceL2Pn36HN+1a1fYLbfc0nLfvn2109LSCr766qv6q1atWt+sWTNXTfz/nI9fNmsnIiIiIiKiwOJyufDll19GDhgw4Ijn+nHjxu1++eWXm7pc5ed/x4wZc6B3795Hnn322Z1ZWVlbnnvuubz09PSCnJycdU8++eS+4cOHH5gxY0YjAPjll1/Ci4qKQrp27VroeYyNGzfWLioqCuncuXMhAPz3f/93/JgxY/auWbNm/UcfffTrfffdlwAAY8eOvfSaa645tmnTprW33nrr4d27d9eujv+Li+GXNeds1k5ERERERBQYioqKQlJSUlL37t1bq3Xr1icHDBhw1HN7amrqqU6dOhVMmzbtgv3Iy3PXXXcdnjBhQrOioqKdr732WqPbb7/9TA38ggULopOSkupt2bKlzvjx47fXrVtXAeDrr7+uv3HjxjM1+AUFBaH5+fkh3333Xb358+dvAoBbbrnlaP369YsvLmrf88uacw4IR0RERER24bSzRJXj7nO+ffv21aqK559/vszAbE888cSeyZMnN1PV8g5xXpGRkSXdu3c/+s477zTIysqKGTly5Jm+6P369Tu8YcOGdf/+979z/vrXvzbfvn17GACoKn788cf1OTk563Jyctbt27fvl6ioqJIqBVrN/DJzTkRERERERIElMjKyZMqUKdtfffXV2NOnS4/J1qlTp5OJiYmFS5YsuWANbFRUVHFBQUGo57r77rvvwGOPPRbfsWPH440bNy5T292jR48TAwcOPPjCCy/EAsDVV199dPz48WcKCb755psIALjyyisLZs+eHQMA//znP+sfPXo01PtYdvHLzLmI9BOR6fn5+XYnhYiIiIiIiCroqquuKkxJSSmcPn16mSbsjz/++O69e/desI93RkZGYWhoqCYnJ6e6p0fr3r37iUsuuaR4xIgRB871vieffHLPe++91+jw4cMh06dP3/Hjjz9ekpSUlNq6det2U6dObQwAzz///K4vvviifmJiYrv3338/ulGjRqcbNGjgF03b/bLPOUdrJyIiIiIiqryKTH3maydOnPjJc/mLL77Y5H69cePGte7XXbt2LSwpKTmTvnnz5m0t73V4eLiuWLFig+cxt27dWktV5eabbz7Tn/3BBx88COCgezkhIeH0gQMHsq3FkkWLFm32TmtMTEzx8uXLN9SqVQtLliy55Oeff74kIiKi8m3tq4FfZs6JiIiIiIiIAGDq1KkNn3322bi//e1vO0JDq9YKfdOmTbV/97vftS4pKUGtWrV02rRpW32Tyqpj5pyIiIiIiIj81ujRow+OHj364IX3vLAOHToUrV+/fp0vjuVrftnnnIiIiIiIiCiY+GXmnAPCERERERERUTDxy8w55zknIiIiIiKiYOKXmXMiIiIiIiKiYMLMOREREREREV200NDQtJSUlFT335///OemAJCRkZG8fPnyupU93uzZsxusWrWqjnv5oYceunT+/PmRvkyzP+Jo7URERERERA7Rf/6Nab48XtaARRecNz08PLwkJyfHZyOgz58/v4HL5cpPS0s7CQCTJ0/e5atj+7MaqzkXkVYiMlNEPqypzyQiIgp0cwe3LfVHREQUiIYOHdqiffv2bdu0adPu4YcfvtS9/oEHHohr3bp1u6SkpNRRo0Y1/9e//nXJkiVLGowbN655SkpK6tq1a8MHDRqU8MYbb0QfPHgwNCEhoX12dnY4APTr16/lSy+91Mi+qHyrQjXnIvI6gL4A9qlqe4/11wP4XwChAGao6vPnOoaqbgZwDzPnREREREREzlFUVBSSkpKS6l5+5JFHdo8cOfKw5z4TJ07Mi42NLXa5XOjWrVvyypUrIy677LJTn3zySfTmzZvXhISE4MCBA6GNGjUq7t2795G+ffvmjxgxotQxGjZsWDxp0qTtw4cPb/nAAw/sPXLkSNgjjzxyoKbirG4Vbdb+JoCpAGa5V4hIKIBXAFwLYCeA70UkCyajPt7r/Xer6r4qp5aIiIiIiIj8SkWatb/11lsxb775ZiOXyyX79++vlZ2dXeeKK64oDA8PLxk8eHBC3759jwwePPiCc2nffPPNR99///3oP/7xj5etWrVqre+isJ+oasV2FEkAsNBdcy4iXQE8parXWct/AgBV9c6Yex/nQ1W95TzbRwEYBQCxsbFp7777boXS5yln19Ey61of2FZqudblpcslDvwaCwAIjQpBcX4JjjQ8VGp7m8Kyv5NDhXVKLce0alfptFaVd6zecQJVj9U7TsA/Yz1XnMDFx2pHnMDFx3quOAH/jDWYztWqKCgoQL169exORo0Illgr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\n",
"text/plain": [
"