{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import seaborn as sns\n", "import warnings\n", "import scipy.stats as stats\n", "import os\n", "\n", "warnings.simplefilter(action='ignore', category=FutureWarning)\n", "pd.options.mode.chained_assignment = None \n", "plt.style.use('ggplot')\n", "sns.color_palette(\"Paired\");\n", "sns.set_theme();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Data Loading" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# setting path to results folder\n", "root_path = '../../out/pretrained/adept/loci_v1/results'\n", "\n", "# list all folders in root path that don't stat with a dot\n", "nets = [f for f in os.listdir(root_path) if not f.startswith('.')]\n", "\n", "# read pickle file\n", "tf = pd.DataFrame()\n", "sf = pd.DataFrame()\n", "af = pd.DataFrame()\n", "\n", "# load statistics files from nets\n", "for net in nets:\n", " path = os.path.join(root_path, net, 'surprise', 'statistics',)\n", " with open(os.path.join(path, 'trialframe.csv'), 'rb') as f:\n", " tf_temp = pd.read_csv(f, index_col=0)\n", " tf_temp['net'] = net\n", " tf = pd.concat([tf,tf_temp])\n", "\n", " with open(os.path.join(path, 'slotframe.csv'), 'rb') as f:\n", " sf_temp = pd.read_csv(f, index_col=0)\n", " sf_temp['net'] = net\n", " sf = pd.concat([sf,sf_temp])\n", "\n", " with open(os.path.join(path, 'accframe.csv'), 'rb') as f:\n", " af_temp = pd.read_csv(f, index_col=0)\n", " af_temp['net'] = net\n", " af = pd.concat([af,af_temp])\n", "\n", "# cast variables\n", "sf['visible'] = sf['visible'].astype(bool)\n", "sf['bound'] = sf['bound'].astype(bool)\n", "sf['occluder'] = sf['occluder'].astype(bool)\n", "sf['inimage'] = sf['inimage'].astype(bool)\n", "sf['vanishing'] = sf['vanishing'].astype(bool)\n", "sf['alpha_pos'] = 1-sf['alpha_pos']\n", "sf['alpha_ges'] = 1-sf['alpha_ges']\n", "\n", "# scale to percentage\n", "sf['TE'] = sf['TE'] * 100\n", "\n", "# add surprise as dummy code\n", "tf['control'] = [('control' in set) for set in tf['set']]\n", "sf['control'] = [('control' in set) for set in sf['set']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Calculate Tracking Error (TE)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tracking Error when visible: M: 12.5 , STD: 10.3, Count: 69\n", "Tracking Error when occluded: M: 16.2 , STD: 7.48, Count: 34\n" ] } ], "source": [ "grouping = (sf.inimage & sf.bound & ~sf.occluder & sf.control)\n", "\n", "def get_stats(col):\n", " return f' M: {col.mean():.3} , STD: {col.std():.3}, Count: {col.count()}'\n", "\n", "# When Visible\n", "temp = sf[grouping & sf.visible]\n", "temp = temp.groupby(['net', 'set', 'evalmode', 'scene', 'slot']).mean()\n", "print(f'Tracking Error when visible:' + get_stats(temp['TE']))\n", "\n", "# When Occluded\n", "temp = sf[grouping & ~sf.visible]\n", "temp = temp.groupby(['net', 'set', 'evalmode', 'scene', 'slot']).mean()\n", "print(f'Tracking Error when occluded:' + get_stats(temp['TE']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Calculate Succesfull Trackings (TE)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
setevalmodetracked_postracked_negtracked_pos_protracked_neg_pro
0_controlopen631010.3841460.615854
\n", "
" ], "text/plain": [ " set evalmode tracked_pos tracked_neg tracked_pos_pro \\\n", "0 _control open 63 101 0.384146 \n", "\n", " tracked_neg_pro \n", "0 0.615854 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# succesfull trackings: In the last visible moment of the target, the slot was less than 10% away from the target\n", "# determine last visible frame numeric\n", "grouping_factors = ['net','set','evalmode','scene','slot']\n", "ff = sf[sf.visible & sf.bound & sf.inimage].groupby(grouping_factors).max()\n", "ff.rename(columns = {'frame':'last_visible'}, inplace = True)\n", "sf = sf.merge(ff[['last_visible']], on=grouping_factors, how='left')\n", "\n", "# same for first bound frame\n", "ff = sf[sf.visible & sf.bound & sf.inimage].groupby(grouping_factors).min()\n", "ff.rename(columns = {'frame':'first_visible'}, inplace = True)\n", "sf = sf.merge(ff[['first_visible']], on=grouping_factors, how='left')\n", "\n", "# add dummy variable to sf\n", "sf['last_visible'] = (sf['last_visible'] == sf['frame'])\n", "\n", "# extract the trials where the target was last visible and threshold the TE\n", "ff = sf[sf['last_visible']] \n", "ff['tracked_pos'] = (ff['TE'] < 10)\n", "ff['tracked_neg'] = (ff['TE'] >= 10)\n", "\n", "# fill NaN with 0\n", "sf = sf.merge(ff[grouping_factors + ['tracked_pos', 'tracked_neg']], on=grouping_factors, how='left')\n", "sf['tracked_pos'].fillna(False, inplace=True)\n", "sf['tracked_neg'].fillna(False, inplace=True)\n", "\n", "# Aggreagte over all scenes\n", "temp = sf[(sf['frame']== 1) & ~sf.occluder & sf.control]\n", "temp = temp.groupby(['set', 'evalmode']).sum()\n", "temp = temp[['tracked_pos', 'tracked_neg']]\n", "temp = temp.reset_index()\n", "\n", "temp['tracked_pos_pro'] = temp['tracked_pos'] / (temp['tracked_pos'] + temp['tracked_neg'])\n", "temp['tracked_neg_pro'] = temp['tracked_neg'] / (temp['tracked_pos'] + temp['tracked_neg'])\n", "\n", "temp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Mostly Tracked stats" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "temp = af[af.index == 'OVERALL']\n", "temp['mostly_tracked'] = temp['mostly_tracked'] / temp['num_unique_objects']\n", "temp['partially_tracked'] = temp['partially_tracked'] / temp['num_unique_objects']\n", "temp['mostly_lost'] = temp['mostly_lost'] / temp['num_unique_objects']\n", "g = temp[['mostly_tracked', 'partially_tracked', 'mostly_lost','set']].set_index(['set']).groupby(['set']).mean().plot(kind='bar', stacked=True);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# MOTA " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idf1idpidrrecallprecisionnum_unique_objectsmostly_trackedpartially_trackedmostly_lostnum_false_positivesnum_missesnum_switchesnum_fragmentationsmotamotpnum_transfernum_ascendnum_migrate
set
_control0.3952570.2641360.8049050.9015080.29822686.063.66666722.0000000.33333332836.0000001443.00000090.33333314.666667-1.3458690.06837125.065.6666671.000000
_surprise0.3904190.2570300.8234630.8968560.28107333.024.3333338.3333330.33333311238.333333487.66666724.0000006.333333-1.4851950.0685929.015.0000000.333333
\n", "
" ], "text/plain": [ " idf1 idp idr recall precision \\\n", "set \n", "_control 0.395257 0.264136 0.804905 0.901508 0.298226 \n", "_surprise 0.390419 0.257030 0.823463 0.896856 0.281073 \n", "\n", " num_unique_objects mostly_tracked partially_tracked mostly_lost \\\n", "set \n", "_control 86.0 63.666667 22.000000 0.333333 \n", "_surprise 33.0 24.333333 8.333333 0.333333 \n", "\n", " num_false_positives num_misses num_switches num_fragmentations \\\n", "set \n", "_control 32836.000000 1443.000000 90.333333 14.666667 \n", "_surprise 11238.333333 487.666667 24.000000 6.333333 \n", "\n", " mota motp num_transfer num_ascend num_migrate \n", "set \n", "_control -1.345869 0.068371 25.0 65.666667 1.000000 \n", "_surprise -1.485195 0.068592 9.0 15.000000 0.333333 " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "af[af.index == 'OVERALL'].groupby(['set']).mean()" ] } ], "metadata": { "kernelspec": { "display_name": "loci23", "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.9.13" } }, "nbformat": 4, "nbformat_minor": 2 }