├── .gitignore ├── README.md ├── assets ├── benchmark.csv ├── df_behavior_subjects.csv ├── df_behavior_wdistance.csv ├── example_trial.png ├── model_params_count.pkl └── teaser.png └── scripts ├── model_evaluation.ipynb ├── results.ipynb └── visualize_data_and_singletrial.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | assets/salience_maps.pickle 2 | assets/salience_maps.pkl 3 | assets/splithalf_dinov2_vitg14.pkl 4 | assets/your_model_params_count.pkl 5 | .DS_Store 6 | /figures 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## MOCHI: Multiview Object Consistency in Humans and Image models 2 | 3 | We introduce a benchmark to evaluate the alignment between humans and image models on 3D shape understanding: **M**ultiview **O**bject **C**onsistency in **H**umans and **I**mage models (**MOCHI**) 4 | 5 | teaser 6 | 7 | This repo contains all code and data used to evaluate models on MOCHI, compare model to human behavior, and visualize results. 8 | 9 | - `scripts/model_evaluation.ipynb`: notebook that can be used to evaluate DINOv2, CLIP, and MAE models 10 | - `scripts/results.ipynb`: notebook that can be used to compare model and human data + visualize results 11 | - `scripts/scripts/results.ipynb`: example script to analyze data and visualize a single trial 12 | 13 | The model and human results generated and used by the scripts above are in `assets/benchmark.csv`. 14 | 15 | The images in MOCHI can be downloaded as a huggingface dataset which can be accessed in a few lines of code. 16 | 17 | First, download relevant libraries 18 | 19 | ``` 20 | pip install datasets huggingface_hub 21 | ``` 22 | 23 | then download MOCHI 24 | 25 | ```python 26 | 27 | from datasets import load_dataset 28 | 29 | # download huggingface dataset 30 | benchmark = load_dataset("tzler/MOCHI")['train'] 31 | 32 | # there are 2019 trials let's pick one 33 | i_trial_index = 1879 34 | 35 | # and extract these data 36 | i_trial = benchmark[i_trial_index] 37 | ``` 38 | 39 | Here, `i_trial` is a dictionary with trial-related data including human (`human` and `RT`) and model (`DINOv2G`) performance measures: 40 | 41 | ``` 42 | {'dataset': 'shapegen', 43 | 'condition': 'abstract2', 44 | 'trial': 'shapegen2527', 45 | 'n_objects': 3, 46 | 'oddity_index': 2, 47 | 'images': [, 48 | , 49 | ], 50 | 'n_subjects': 15, 51 | 'human_avg': 1.0, 52 | 'human_sem': 0.0, 53 | 'human_std': 0.0, 54 | 'RT_avg': 4324.733333333334, 55 | 'RT_sem': 544.4202024405384, 56 | 'RT_std': 2108.530377391076, 57 | 'DINOv2G_avg': 1.0, 58 | 'DINOv2G_std': 0.0, 59 | 'DINOv2G_sem': 0.0}``` 60 | 61 | ``` 62 | 63 | as well as this trial's images: 64 | 65 | ```python 66 | plt.figure(figsize=[15,4]) 67 | for i_plot in range(len(i_trial['images'])): 68 | plt.subplot(1,len(i_trial['images']),i_plot+1) 69 | plt.imshow(i_trial['images'][i_plot]) 70 | if i_plot == i_trial['oddity_index']: plt.title('odd-one-out') 71 | plt.axis('off') 72 | plt.show() 73 | ``` 74 | example trial 75 | 76 | The huggingface dataset contains all of the images, while the `benchmark.csv` file in this repo, contains all the relevant model data. They have the same structure, e.g., 77 | 78 | ``` 79 | git clone https://github.com/tzler/mochi_code.git 80 | ``` 81 | 82 | ```python 83 | 84 | import pandas 85 | 86 | # load data the github repo we just cloned 87 | df = pandas.read_csv('mochi_code/assets/benchmark.csv') 88 | # extract trial info with the index from huggingface repo above 89 | df.loc[i_trial_index]['trial'] 90 | ``` 91 | 92 | returns the trial `shapegen2527`, which is the same as the huggingface dataset for this index. 93 | -------------------------------------------------------------------------------- /assets/example_trial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzler/mochi_code/96cd1249cee3e910f87a526a82ec7a780e8afeeb/assets/example_trial.png -------------------------------------------------------------------------------- /assets/model_params_count.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzler/mochi_code/96cd1249cee3e910f87a526a82ec7a780e8afeeb/assets/model_params_count.pkl -------------------------------------------------------------------------------- /assets/teaser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tzler/mochi_code/96cd1249cee3e910f87a526a82ec7a780e8afeeb/assets/teaser.png -------------------------------------------------------------------------------- /scripts/model_evaluation.ipynb: -------------------------------------------------------------------------------- 1 | {"cells":[{"cell_type":"markdown","metadata":{"id":"PpcRbLJ8-guW"},"source":["# script used to estimate model performance on benchmark w/ a linear readout"]},{"cell_type":"code","execution_count":31,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Defaulting to user installation because normal site-packages is not writeable\n","Requirement already satisfied: torch in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (2.6.0)\n","Requirement already satisfied: scikit-learn in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (1.6.1)\n","Requirement already satisfied: matplotlib in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (3.9.4)\n","Requirement already satisfied: open_clip_torch in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (2.30.0)\n","Requirement already satisfied: transformers in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (4.48.2)\n","Requirement already satisfied: thop in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (0.1.1.post2209072238)\n","Requirement already satisfied: networkx in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from torch) (3.2.1)\n","Requirement already satisfied: typing-extensions>=4.10.0 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from torch) (4.12.2)\n","Requirement already satisfied: filelock in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from torch) (3.17.0)\n","Requirement already satisfied: fsspec in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from torch) (2024.9.0)\n","Requirement already satisfied: jinja2 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from torch) (3.1.5)\n","Requirement already satisfied: sympy==1.13.1 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from torch) (1.13.1)\n","Requirement already satisfied: mpmath<1.4,>=1.1.0 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from sympy==1.13.1->torch) (1.3.0)\n","Requirement already satisfied: joblib>=1.2.0 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from scikit-learn) (1.4.2)\n","Requirement already satisfied: scipy>=1.6.0 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from scikit-learn) (1.13.1)\n","Requirement already satisfied: numpy>=1.19.5 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from scikit-learn) (2.0.2)\n","Requirement already satisfied: threadpoolctl>=3.1.0 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from scikit-learn) (3.5.0)\n","Requirement already satisfied: kiwisolver>=1.3.1 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from matplotlib) (1.4.7)\n","Requirement already satisfied: contourpy>=1.0.1 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from matplotlib) (1.3.0)\n","Requirement already satisfied: pillow>=8 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from matplotlib) (11.1.0)\n","Requirement already satisfied: python-dateutil>=2.7 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from matplotlib) (2.8.2)\n","Requirement already satisfied: importlib-resources>=3.2.0 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from matplotlib) (6.5.2)\n","Requirement already satisfied: fonttools>=4.22.0 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from matplotlib) (4.55.8)\n","Requirement already satisfied: packaging>=20.0 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from matplotlib) (23.2)\n","Requirement already satisfied: pyparsing>=2.3.1 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from matplotlib) (3.2.1)\n","Requirement already satisfied: cycler>=0.10 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from matplotlib) (0.12.1)\n","Requirement already satisfied: ftfy in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from open_clip_torch) (6.3.1)\n","Requirement already satisfied: huggingface-hub in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from open_clip_torch) (0.28.1)\n","Requirement already satisfied: regex in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from open_clip_torch) (2024.11.6)\n","Requirement already satisfied: safetensors in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from open_clip_torch) (0.5.2)\n","Requirement already satisfied: timm in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from open_clip_torch) (1.0.14)\n","Requirement already satisfied: torchvision in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from open_clip_torch) (0.21.0)\n","Requirement already satisfied: tqdm in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from open_clip_torch) (4.67.1)\n","Requirement already satisfied: requests in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from transformers) (2.32.3)\n","Requirement already satisfied: pyyaml>=5.1 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from transformers) (6.0.2)\n","Requirement already satisfied: tokenizers<0.22,>=0.21 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from transformers) (0.21.0)\n","Requirement already satisfied: zipp>=3.1.0 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from importlib-resources>=3.2.0->matplotlib) (3.17.0)\n","Requirement already satisfied: six>=1.5 in /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages (from python-dateutil>=2.7->matplotlib) (1.15.0)\n","Requirement already satisfied: wcwidth in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from ftfy->open_clip_torch) (0.2.12)\n","Requirement already satisfied: MarkupSafe>=2.0 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from jinja2->torch) (3.0.2)\n","Requirement already satisfied: certifi>=2017.4.17 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from requests->transformers) (2025.1.31)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from requests->transformers) (3.4.1)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from requests->transformers) (2.3.0)\n","Requirement already satisfied: idna<4,>=2.5 in /Users/tylerbonnen/Library/Python/3.9/lib/python/site-packages (from requests->transformers) (3.10)\n","\u001b[33mWARNING: You are using pip version 21.2.4; however, version 25.0 is available.\n","You should consider upgrading via the '/Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip' command.\u001b[0m\n","Note: you may need to restart the kernel to use updated packages.\n"]}],"source":["pip install torch scikit-learn matplotlib open_clip_torch transformers thop"]},{"cell_type":"markdown","metadata":{"id":"vRgSlRSh6rM7"},"source":["# environment setup"]},{"cell_type":"code","execution_count":32,"metadata":{"id":"pUHDGx2ceJbD"},"outputs":[],"source":["import torch, pickle, pandas, os, json, numpy as np\n","from PIL import Image\n","from sklearn.svm import SVC\n","from sklearn.pipeline import make_pipeline\n","from sklearn.preprocessing import StandardScaler\n","import matplotlib.pyplot as plt\n","from sklearn.svm import SVC\n","from sklearn.pipeline import make_pipeline\n","from sklearn.preprocessing import StandardScaler\n","from scipy import stats\n","import tqdm as notebook_tqdm\n","from thop import profile"]},{"cell_type":"markdown","metadata":{},"source":["# download mochi benchmark from huggingface"]},{"cell_type":"code","execution_count":33,"metadata":{},"outputs":[],"source":["from datasets import load_dataset\n","\n","# download huggingface dataset \n","mochi = load_dataset(\"tzler/MOCHI\")['train']"]},{"cell_type":"markdown","metadata":{},"source":["# load dataframe from your local path"]},{"cell_type":"code","execution_count":34,"metadata":{},"outputs":[],"source":["df = pandas.read_csv(os.path.join('..', 'assets', 'benchmark.csv'))\n","df.rename(columns={'Unnamed: 0': 'idx'}, inplace=True)"]},{"cell_type":"markdown","metadata":{"id":"JJcxGosb_xKl"},"source":["# define common function to extract features from dinos, clips, maes"]},{"cell_type":"code","execution_count":35,"metadata":{"id":"Trkzkjf_CosR"},"outputs":[],"source":["from transformers import AutoImageProcessor, ViTMAEModel\n","from transformers import AutoImageProcessor, AutoModel\n","import open_clip"]},{"cell_type":"code","execution_count":36,"metadata":{"id":"y2BbswlI9lbz"},"outputs":[],"source":["class define_clip:\n"," \"\"\"\n"," use: X.extract_features(imagename, modelname)\n"," e.g. X.extract_features(image, 'ViT-B-32')\n","\n"," \"\"\"\n"," def __init__(self, model, dataset):\n","\n"," self.make = open_clip.create_model_and_transforms\n"," self.name = model\n"," self.dataset = dataset\n"," self.model, _, self.prep = self.make(model,pretrained=dataset)\n"," self.model.eval()\n","\n"," def extract(self, images):\n"," with torch.no_grad():\n"," inputs = self.prep(images).unsqueeze(0)\n"," features = self.model.encode_image(inputs)\n"," return np.squeeze(features.detach().numpy())\n","\n","class define_dino:\n","\n"," \"\"\"\n"," # https://huggingface.co/docs/transformers/model_doc/dinov2\n"," \"\"\"\n","\n"," def __init__(self, model):\n","\n"," self.model = AutoModel.from_pretrained(\"facebook/%s\"%model)\n"," self.prep = AutoImageProcessor.from_pretrained(\"facebook/%s\"%model)\n"," self.model.eval()\n","\n"," def extract(self, images):\n"," with torch.no_grad():\n"," inputs = self.prep(images=images, return_tensors=\"pt\")\n"," features = self.model(**inputs).pooler_output.detach().numpy()\n"," return features\n","\n","class define_mae:\n","\n"," \"\"\"\n"," extrac cls token from maes\n"," from: https://github.com/facebookresearch/mae/blob/main/models_mae.py#L161\n"," \"\"\"\n","\n"," def __init__(self, model):\n","\n"," self.model = ViTMAEModel.from_pretrained(\"facebook/%s\"%model)\n"," self.prep = AutoImageProcessor.from_pretrained(\"facebook/%s\"%model)\n"," self.model.eval()\n","\n","\n"," def extract(self, images):\n"," with torch.no_grad():\n"," inputs = self.prep(images=images, return_tensors=\"pt\")\n"," features = self.model(**inputs).last_hidden_state\n"," return features[:, 0, :].detach().numpy().squeeze()"]},{"cell_type":"markdown","metadata":{"id":"wvd_Kb7aDvOZ"},"source":["# define functions to extract features and generate same-different training data"]},{"cell_type":"code","execution_count":37,"metadata":{"id":"-pTX7PDC7ZnM"},"outputs":[],"source":["def extract_features0(df, model, mochi, single=True):\n","\n"," images, oddities, features = {} , {}, []\n","\n"," for index, i_trial in df.iterrows():\n","\n"," oddities[i_trial.trial] = i_trial.oddity_index\n"," \n"," for i_index, i_image in enumerate( extract_list( i_trial.images ) ):\n"," \n"," # open image\n"," i_image = mochi[index]['images'][i_index] \n"," # extract features maybe\n"," if single: features.append( model(i_image).flatten() )\n"," # change to import from huggingface\n"," images['%s-%s'%(i_trial.trial,i_index)] = mochi[index]['images'][i_index]\n","\n"," # extract features maybe\n"," if not single: features = model([images[i] for i in images])\n","\n"," return np.array(features).squeeze(), oddities, images\n","\n","def generate_delta_vectors0(trials, features, oddities, images):\n","\n"," def delta(a, b, xtype='diff'):\n","\n"," if xtype == 'diff':\n"," x = a - b\n"," elif xtype == 'abs':\n"," x = np.array(np.abs(a - b))\n"," elif xtype == 'sqrt':\n"," x = np.sqrt(np.array(np.abs(a - b)))\n"," elif xtype == 'sqr':\n"," x = (np.array(np.abs(a - b)))**2\n"," elif xtype == 'product':\n"," x = a * b\n","\n"," return x\n","\n"," trial_markers = []\n"," deltas = []\n"," labels = []\n","\n"," for i_trial in trials:\n","\n"," trial_indices = [i.split('-')[0] == i_trial for i in images ]\n","\n"," i_features = features[ trial_indices ]\n","\n"," oddity_index = oddities[i_trial]\n","\n"," pairs = [] # we just need once -- okay to override\n","\n"," for i in range(len(i_features)):\n","\n"," for j in range(i+1,len(i_features)):\n","\n"," i_delta = delta(i_features[i], i_features[j])\n"," deltas.append( i_delta )\n"," trial_markers.append( i_trial )\n"," pairs.append( (i,j) )\n","\n"," if (i == oddity_index) or (j == oddity_index):\n"," labels.append(0) # different\n"," else:\n"," labels.append(1) # same\n","\n"," all_inds = np.array(range(len(i_features)))\n","\n"," location_of_indices = {i: np.nonzero((pairs == i).mean(1))[0] for i in all_inds}\n","\n"," info = {'deltas': np.array(np.squeeze(deltas)),\n"," 'labels': np.array(labels),\n"," 'trials':trial_markers,\n"," 'inds': all_inds,\n"," 'locs': location_of_indices}\n","\n"," return info\n","\n","def extract_list(l):\n"," return [i[1:-1] for i in l[1:-1].split(', ')]"]},{"cell_type":"markdown","metadata":{"id":"gQZb5VE08Hno"},"source":["# define model to evaluate"]},{"cell_type":"code","execution_count":38,"metadata":{"id":"uSKRuQTx_Td3"},"outputs":[],"source":["dinos = ['dinov2-base','dinov2-large', 'dinov2-giant']\n","\n","maes = ['vit-mae-base','vit-mae-large', 'vit-mae-huge']\n","\n","clips = {'ViT-B-32': 'laion2b_s34b_b79k',\n"," 'ViT-B-16': 'laion2b_s34b_b88k',\n"," 'ViT-L-14': 'laion2b_s32b_b82k',\n"," 'ViT-H-14': 'laion2b_s32b_b79k',\n"," 'ViT-g-14': 'laion2b_s12b_b42k'}"]},{"cell_type":"code","execution_count":40,"metadata":{},"outputs":[],"source":["def count_parameters(model):\n"," return sum(p.numel() for p in model.parameters() if p.requires_grad)\n","\n","save_nparams = 1"]},{"cell_type":"code","execution_count":41,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":243,"referenced_widgets":["8c3ee9d8bef74c89a32de15692eac47f","e4e136ddd41a4718830475c5c8f58d3d","439486c42ec3409d9411c61934acf31a","34d814e02c9c4c0b97ec9cdf866485a1","d86b220aec994215b912cc98ef871c81","f6917952371c464c8375ab44dff1f4d8","8d04275b677b42b3a643cf99854d7112","0e466430968b447b9973136d9626a65f","16184b0a04874883beca6fcdcdbbbf9d","5b30644c91cd45f49a695305a4f1129d","66c43b61af4f4dc8ae1d91cac1fee4d4","2b7b02bee5144fb2a90249de4ab2c0b5","8ebb9193a1574022a4aae13edff47744","834656c0dd6c4d45a0bd1981d6b5e1ae","e9f296fedc0a4272bc2c4356491ef1d0","0954f7e454d24e3dbc5024babb0bdaa2","6cf46859c76749df951ba776b8c8ad5e","c64637f45c674a008377133dd44b92b3","f3c98abb00f5491b88e16f86d249212c","822819b6f68343a8ad02c24bfdd9a702","ae06650e10db44d39f68e1a7f45b8e87","6bb42987e9f64fcaab1a13f0f2aa528d","cb79cd2dbae94fb18726c90cf6f6fcc2","4139fc05ef78459e929f5e26bf6b1847","1b7b2f994bcf4cbd897b48c5734c5053","ae3ae4abf2bf4c709bef513f06849bcc","0411a68e6a1c4d3cbd711bd0f0f7b9f6","fadeced75ed24de8bdfdb8cda8c440bd","92b2aab63e984a74b1bb7b01da200eda","652423066af14fa4bd3be9fb3644118a","5762e4dfdd5b46b7a1e335235ebf503c","734c074648ab46fba69c9eb5a1abc99c","4d832c72a1ad46baac189508e820faa2"]},"executionInfo":{"elapsed":3886,"status":"ok","timestamp":1718075408203,"user":{"displayName":"tyler bonnen","userId":"13580962015074797726"},"user_tz":420},"id":"BAHYmZJa8DXp","outputId":"bd81bfa0-a544-434e-bb28-edbaa15f8c14"},"outputs":[{"name":"stdout","output_type":"stream","text":["[INFO] Register count_convNd() for .\n","[INFO] Register zero_ops() for .\n","[INFO] Register count_normalization() for .\n","[INFO] Register count_linear() for .\n"]}],"source":["models_to_evaluate = ['dinov2-base']\n","\n","n_params = {}\n","models = {}\n","n_flops = {}\n","\n","for i_model in models_to_evaluate:\n","\n"," if i_model in dinos:\n"," _model = define_dino(i_model)\n"," elif i_model in maes:\n"," _model = define_mae(i_model)\n"," elif i_model in clips:\n"," _model = define_clip(i_model, clips[i_model])\n","\n"," n_flops[i_model] = profile(_model.model, inputs=(torch.randn(1, 3, 224, 224), ))\n"," n_params[i_model] = count_parameters(_model.model)\n","\n"," models[i_model] = _model.extract\n","\n","if save_nparams:\n","\n"," with open('../assets/your_model_params_count.pkl', 'wb') as f:\n"," pickle.dump({'n_params': n_params, 'flops': n_flops}, f)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"bdJ22ZVufzl0"},"outputs":[],"source":["# number of independent splits used to train the svm on each trial\n","n_permutations = 100\n","# fraction of data to include in each split\n","subset_fraction = 0.75\n","\n","# iterate through each dataset\n","for i_dataset in df.dataset.unique():\n","\n"," # iterate through each condition\n"," for i_condition in df[df.dataset==i_dataset].condition.unique():\n"," # select subset of data to train and test on\n"," idf = df[df.condition==i_condition]\n","\n"," # identify all trials\n"," trials0 = idf.trial.unique()\n","\n"," for i_model in list(models):\n","\n"," # extract features from this dataset\n"," features0, oddities0, images0 = extract_features0(idf, models[i_model], mochi)\n","\n"," # # # for each trial, generate vector of differences between each image\n"," diffs = generate_delta_vectors0(trials0, features0, oddities0, images0)\n","\n"," for i_index, i_trial in idf.iterrows():\n","\n"," # determine the index/image of the oddity\n"," i_oddity_index = oddities0[i_trial.trial]\n","\n"," # extract indices and labels for training svm\n"," train_indices = [i.split('-')[0] != i_trial.trial for i in diffs['trials']]\n"," # vectors for the different between each image vector\n"," X_train = diffs['deltas'][train_indices,:]\n"," # labels for whether each vector was 'same' or 'different'\n"," y_train = diffs['labels'][train_indices].T\n","\n"," # extract indices and labels for training svm\n"," test_indices = [i.split('-')[0] == i_trial.trial for i in diffs['trials']]\n"," # vectors for the different between each image vector\n"," X_test = diffs['deltas'][test_indices,:]\n"," # labels for whether each vector was 'same' or 'different'\n"," y_test = diffs['labels'][test_indices].T\n"," # for each iteration use X% of the available trials\n"," len_subset = int(subset_fraction*len(X_train))\n","\n"," # prep to each each iteration\n"," choices = []\n","\n"," for _ in range(n_permutations):\n","\n"," # identify random subset of delta vectors to train on\n"," random_subset = np.random.permutation(len(X_train))[:len_subset]\n","\n"," # define model to train a linear readout\n"," clf = make_pipeline(StandardScaler(),\n"," SVC(class_weight='balanced', probability=True))\n"," # fit training data\n"," clf.fit(np.squeeze(X_train[random_subset,:]),y_train[random_subset])\n"," # predict performance on this trial\n"," y_hat = clf.predict_proba(X_test)\n","\n"," # identify which image has the highest probability of being different\n"," i_diffs = [y_hat[:,0][diffs['locs'][i]].mean() for i in diffs['inds']]\n"," # determine whether the model-selected oddity matches ground truth\n"," i_trial_accuracy = i_oddity_index == np.argmax(i_diffs)\n"," # save\n"," choices.append(i_trial_accuracy)\n","\n"," # store in original dataframe\n"," df.loc[i_trial.idx,'%s_svm_avg'%i_model] = np.mean(choices)\n"," df.loc[i_trial.idx,'%s_svm_med'%i_model] = np.median(choices)\n"," df.loc[i_trial.idx,'%s_svm_std'%i_model] = np.std(choices)\n"," df.loc[i_trial.idx,'%s_svm_sem'%i_model] = stats.sem(choices)\n"," \n"," # save\n"," df.to_csv(os.path.join(data_directory, 'your_results.csv'))"]}],"metadata":{"colab":{"authorship_tag":"ABX9TyMK7keGCn9+i5mWmc29VIEa","machine_shape":"hm","provenance":[{"file_id":"1FuwGOWYQwPyhw8fN5t5kr2Blkx8BuDLz","timestamp":1717114553805},{"file_id":"1imUSa8bLQRd2PvCk3fRsaRsYbNk1987u","timestamp":1716828539566},{"file_id":"1dr35j8VYocYShiQTu3P_JPKLgBtOS83-","timestamp":1715561446045},{"file_id":"1NZDdTsZKuKgrLmKvAG9M4Ge2EGVCXKC0","timestamp":1715468029338},{"file_id":"12vYu_Wnd7ST65AwGTJmgso083-EkHVfm","timestamp":1715288093572}]},"kernelspec":{"display_name":"Python 3","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.6"},"widgets":{"application/vnd.jupyter.widget-state+json":{"0411a68e6a1c4d3cbd711bd0f0f7b9f6":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"0954f7e454d24e3dbc5024babb0bdaa2":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"0e466430968b447b9973136d9626a65f":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"16184b0a04874883beca6fcdcdbbbf9d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"1b7b2f994bcf4cbd897b48c5734c5053":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_652423066af14fa4bd3be9fb3644118a","max":436,"min":0,"orientation":"horizontal","style":"IPY_MODEL_5762e4dfdd5b46b7a1e335235ebf503c","value":436}},"2b7b02bee5144fb2a90249de4ab2c0b5":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_8ebb9193a1574022a4aae13edff47744","IPY_MODEL_834656c0dd6c4d45a0bd1981d6b5e1ae","IPY_MODEL_e9f296fedc0a4272bc2c4356491ef1d0"],"layout":"IPY_MODEL_0954f7e454d24e3dbc5024babb0bdaa2"}},"34d814e02c9c4c0b97ec9cdf866485a1":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_5b30644c91cd45f49a695305a4f1129d","placeholder":"​","style":"IPY_MODEL_66c43b61af4f4dc8ae1d91cac1fee4d4","value":" 548/548 [00:00<00:00, 38.5kB/s]"}},"4139fc05ef78459e929f5e26bf6b1847":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_fadeced75ed24de8bdfdb8cda8c440bd","placeholder":"​","style":"IPY_MODEL_92b2aab63e984a74b1bb7b01da200eda","value":"preprocessor_config.json: 100%"}},"439486c42ec3409d9411c61934acf31a":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_0e466430968b447b9973136d9626a65f","max":548,"min":0,"orientation":"horizontal","style":"IPY_MODEL_16184b0a04874883beca6fcdcdbbbf9d","value":548}},"4d832c72a1ad46baac189508e820faa2":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"5762e4dfdd5b46b7a1e335235ebf503c":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"5b30644c91cd45f49a695305a4f1129d":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"652423066af14fa4bd3be9fb3644118a":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"66c43b61af4f4dc8ae1d91cac1fee4d4":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"6bb42987e9f64fcaab1a13f0f2aa528d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"6cf46859c76749df951ba776b8c8ad5e":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"734c074648ab46fba69c9eb5a1abc99c":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"822819b6f68343a8ad02c24bfdd9a702":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"ProgressStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"834656c0dd6c4d45a0bd1981d6b5e1ae":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"FloatProgressModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_f3c98abb00f5491b88e16f86d249212c","max":346345912,"min":0,"orientation":"horizontal","style":"IPY_MODEL_822819b6f68343a8ad02c24bfdd9a702","value":346345912}},"8c3ee9d8bef74c89a32de15692eac47f":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_e4e136ddd41a4718830475c5c8f58d3d","IPY_MODEL_439486c42ec3409d9411c61934acf31a","IPY_MODEL_34d814e02c9c4c0b97ec9cdf866485a1"],"layout":"IPY_MODEL_d86b220aec994215b912cc98ef871c81"}},"8d04275b677b42b3a643cf99854d7112":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"8ebb9193a1574022a4aae13edff47744":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_6cf46859c76749df951ba776b8c8ad5e","placeholder":"​","style":"IPY_MODEL_c64637f45c674a008377133dd44b92b3","value":"model.safetensors: 100%"}},"92b2aab63e984a74b1bb7b01da200eda":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"ae06650e10db44d39f68e1a7f45b8e87":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"ae3ae4abf2bf4c709bef513f06849bcc":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_734c074648ab46fba69c9eb5a1abc99c","placeholder":"​","style":"IPY_MODEL_4d832c72a1ad46baac189508e820faa2","value":" 436/436 [00:00<00:00, 33.8kB/s]"}},"c64637f45c674a008377133dd44b92b3":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"DescriptionStyleModel","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"cb79cd2dbae94fb18726c90cf6f6fcc2":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HBoxModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_4139fc05ef78459e929f5e26bf6b1847","IPY_MODEL_1b7b2f994bcf4cbd897b48c5734c5053","IPY_MODEL_ae3ae4abf2bf4c709bef513f06849bcc"],"layout":"IPY_MODEL_0411a68e6a1c4d3cbd711bd0f0f7b9f6"}},"d86b220aec994215b912cc98ef871c81":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e4e136ddd41a4718830475c5c8f58d3d":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_f6917952371c464c8375ab44dff1f4d8","placeholder":"​","style":"IPY_MODEL_8d04275b677b42b3a643cf99854d7112","value":"config.json: 100%"}},"e9f296fedc0a4272bc2c4356491ef1d0":{"model_module":"@jupyter-widgets/controls","model_module_version":"1.5.0","model_name":"HTMLModel","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_ae06650e10db44d39f68e1a7f45b8e87","placeholder":"​","style":"IPY_MODEL_6bb42987e9f64fcaab1a13f0f2aa528d","value":" 346M/346M [00:01<00:00, 249MB/s]"}},"f3c98abb00f5491b88e16f86d249212c":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"f6917952371c464c8375ab44dff1f4d8":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"fadeced75ed24de8bdfdb8cda8c440bd":{"model_module":"@jupyter-widgets/base","model_module_version":"1.2.0","model_name":"LayoutModel","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}}}}},"nbformat":4,"nbformat_minor":0} 2 | -------------------------------------------------------------------------------- /scripts/visualize_data_and_singletrial.ipynb: -------------------------------------------------------------------------------- 1 | {"cells":[{"cell_type":"markdown","metadata":{"id":"OSddf_kvdPGF"},"source":["# setup"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"pUHDGx2ceJbD"},"outputs":[],"source":["import pickle, pandas, os, numpy as np\n","from PIL import Image\n","import matplotlib.pyplot as plt\n","import warnings; warnings.filterwarnings('ignore')"]},{"cell_type":"markdown","metadata":{"id":"Jf4D3cCnSGle"},"source":["# set relative paths to data and images"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":936,"status":"ok","timestamp":1718075635275,"user":{"displayName":"tyler bonnen","userId":"13580962015074797726"},"user_tz":420},"id":"BAHYmZJa8DXp","outputId":"c6686f3f-a9c1-4589-cca7-1eb269004895"},"outputs":[{"name":"stdout","output_type":"stream","text":["Drive already mounted at /content/gdrive; to attempt to forcibly remount, call drive.mount(\"/content/gdrive\", force_remount=True).\n"]}],"source":["from google.colab import drive ; drive.mount('/content/gdrive')\n","# change to whereve you have the images/ and benchmark.csv data\n","base_dir = './gdrive/MyDrive/neurips_benchmark/for_reviewers'\n","# path to wherever you have benchmark.csv\n","data_dir = os.path.join(base_dir, 'data')\n","# path to wherever you have images/\n","image_dir= os.path.join(base_dir, 'images')"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"d_v-u2qYM__S"},"outputs":[],"source":["def extract_list(l):\n"," return [i[1:-1] for i in l[1:-1].split(', ')]\n","\n","# load behavioral data averaged across trials\n","df = pandas.read_csv(os.path.join(data_dir, 'benchmark.csv'))\n","\n","# reformat list of images for each trial\n","df['images'] = [extract_list(df.images[i]) for i in range(len(df))]"]},{"cell_type":"markdown","metadata":{"id":"6VqM6DWBAUt8"},"source":["# list all models we have results for"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1718075635462,"user":{"displayName":"tyler bonnen","userId":"13580962015074797726"},"user_tz":420},"id":"qzJyoOcX8huL","outputId":"ad8fceff-e221-4528-a3bc-d250595452ad"},"outputs":[{"data":{"text/plain":["['dinov2-giant_svm_avg',\n"," 'dinov2-base_svm_avg',\n"," 'dinov2-large_svm_avg',\n"," 'CLIP_ViT-B-32_svm_avg',\n"," 'CLIP_ViT-B-16_svm_avg',\n"," 'CLIP_ViT-L-14_svm_avg',\n"," 'CLIP_ViT-H-14_svm_avg',\n"," 'CLIP_ViT-g-14_svm_avg',\n"," 'vit-mae-base_svm_avg',\n"," 'vit-mae-large_svm_avg',\n"," 'vit-mae-huge_svm_avg',\n"," 'dino_distance_avg']"]},"execution_count":4,"metadata":{},"output_type":"execute_result"}],"source":["# models we have results for\n","[i for i in df.columns.unique() if 'avg' in i]"]},{"cell_type":"markdown","metadata":{"id":"vq7vSNLnSO3X"},"source":["# quick visualization of results for a single model"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"6_PDD0iF86Tx"},"outputs":[],"source":["# pick a model to visualize results for\n","imodel = [i for i in df.columns.unique() if 'avg' in i][0]"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":431},"executionInfo":{"elapsed":366,"status":"ok","timestamp":1718075635827,"user":{"displayName":"tyler bonnen","userId":"13580962015074797726"},"user_tz":420},"id":"0tuSMe1tjFgr","outputId":"0b3bd785-490d-416d-f9aa-3d246be5ffc0"},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["plt.figure(figsize=[4, 4])\n","plt.scatter(x=df.groupby('condition')[imodel].mean(),\n"," y=df.groupby('condition')['human_accuracy'].mean(), edgecolor='black', facecolor='white')\n","plt.errorbar(x=df.groupby('condition')[imodel].mean(),\n"," y=df.groupby('condition')['human_accuracy'].mean(),\n"," xerr=df.groupby('condition')[imodel.split('avg')[0] + 'sem'].mean(),\n"," yerr=df.groupby('condition')['human_accuracy_sem'].mean(),\n"," ls='', color='black', zorder=-2)\n","plt.plot([-.1, .99], [-.1, .99],\n"," linestyle='--', color='grey', zorder=-10, linewidth=2)\n","plt.xlabel('%s Performance'%imodel.split('_svm')[0].upper() )\n","plt.ylabel('Human Performance')\n","plt.title('comparing human and model performance \\nacross conditions in this benchmark');"]},{"cell_type":"markdown","metadata":{"id":"2MJUVLeJAX84"},"source":["# quick example of how to get images and the answer for each trial"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":299},"executionInfo":{"elapsed":1533,"status":"ok","timestamp":1718075899169,"user":{"displayName":"tyler bonnen","userId":"13580962015074797726"},"user_tz":420},"id":"MlaN9TWC-S3a","outputId":"14dd062f-e5bc-4cdb-dd1e-ef4719920399"},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAeQAAAEaCAYAAADANiSQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABINklEQVR4nO3deXwU9f0/8Nds9sruZrO5SEICCQESjiJQVIooggh+QWvx+lb0W0GsFH9qa1vrUQ+ox7dWq9WvlVbrgYKg4oGK4IECioBiC4oYEkCuQICQezfZJLv7+f0RZzK7O3sk5JjA6/l47CPZ2dmZz+5+5vOezzGfkYQQAkRERNSjDD2dACIiImJAJiIi0gUGZCIiIh1gQCYiItIBBmQiIiIdYEAmIiLSAQZkIiIiHWBAJiIi0gEGZCIiIh3QXUCePXs2fvSjH/V0MkinKioq8Jvf/AZjx46FxWKBw+Fo1/ufe+45FBYWwmq1YuTIkVi5cmXYOrW1tbjuuuuQmpqKpKQkXH755SgvL4+57UWLFiE/P79d6ZGtWLECkiRh3759AIB9+/ZBkiS8/vrrHdreifL7/Xj44YcxYcIEpKenIzU1FZMmTcJnn33WqfuRJAl//etfO3WbskWLFmHp0qVdsu3erivK2XiOrWgCgQDGjBmjme8lSYr4iOfY7C10F5CJojl06BBeeeUV9OnTB6effnq73vvKK6/g+uuvx89//nOsXr0a48aNwyWXXILNmzcHrffzn/8cH374If75z3/i5ZdfRklJCaZNmwafz9eZHyWq7OxsbNq0Ceedd1637VOtsbERf/7znzFmzBi8+OKLWLp0KVJSUjBp0iR88sknnbafTZs24eqrr+607akxIHefeI+taJ5++mkcOnRI87VNmzaFPQYPHoxRo0YhOzu7sz5GzxM6M2vWLDF8+PCeTsYpLxAICK/X29PJCOP3+5X/58+fL+x2e9zvLSwsFDNnzgxaNm7cODFt2jTl+caNGwUA8cEHHyjLdu7cKSRJEq+++mrU7b/wwgsiLy8v7vSovfXWWwKA2Lt3b4fe39l8Pp+oqqoKWzZkyBBx0UUX9VCq2ufcc88VF154YU8no1N4vd6gvH+iOrucjefYiqaiokKkpqaK559/XgAQy5cvj7r+3r17BQDx8MMPdzjNeqTbGvK6deswevRo2O12nHnmmfj3v/+tvBapOe+WW24JajJctGgRJEnCV199halTp8Jms6GoqAhr1qxBIBDA3XffjczMTGRmZuLOO+9EIBBQ3rtz505ceeWV6NevH2w2G4YNG4ZHH300aB05HUuWLMFNN92ElJQUZGdn49Zbb41Zm9q0aRMuvvhi9O3bF3a7HaNGjcLixYvD1qupqcHNN9+M3NxcWCwWDBgwAHfeeWfQOu+99x7Gjx8Pm82GlJQUTJw4EVu3bg36Do4fPx70nlGjRmH27NnKc7kJa9WqVRg5ciQsFgveffddeDwe3HTTTSgqKoLNZkN+fj7mzZuH2trasLS+9NJLGD16NKxWK9LT0zF9+nTs378fx48fh8Viwb/+9a+w94wdOxb//d//HfW7UjMYOpZlv//+e5SWlobt68orr8THH3+MpqYmAMDq1avhcrkwZcoUZZ2ioiKMGjUKq1at6tC+Q7W0tOCWW25BamoqkpOTcd1118Htdgeto5XH8/PzcdNNN+Gpp55CXl4ekpOTMWPGDFRUVAS9d//+/bj88suRnJwMu92OCy64ANu3b1dej9RcuXLlSkiShJKSEiQkJCAlJSXo9YSEBJx22mk4fPhwzM8ohMB9992HrKwsOBwOXHHFFVizZg0kScK6deuU9UKbrN977z1MmTIFffr0gdPpxNixY/H+++8HbVvO01u3bsW0adNgt9sxePBgvPTSS8o6EydOxPr16/Hee+8pTZsLFiyImN6XXnoJZ599NlJTU5Vj6Msvvwxbr7i4GJdeeilSU1Nhs9kwcuRILFu2THk9EAjgsccew9ChQ2GxWJCVlYUrrrhCOV60vvuamhpIkoRFixYpy+Tf+uGHH0ZeXh4SExNRVVUVV7kEAE1NTbj77rtRUFAAi8WC3NzcoONdFq2cjVe8x1Y0d955JyZNmoRJkybFtc+lS5dCkiTMnDmz3enVM10G5CNHjuDXv/41/vCHP+C1116D1+vFJZdcgpaWlg5t75prrsFFF12Et956C3379sWll16K3/zmNzh48CBeeukl3HjjjXjooYfwyiuvKO85dOgQioqKsHDhQqxatQpz587Ffffdh/vvvz9s+3fddRcMBgNee+01zJs3D48++iieffbZqGnav38/xo8fj2effRbvvvsuLrvsMlx33XV48cUXlXWamppw3nnn4eWXX8Yf/vAHrF69GgsWLAgKrq+++ip+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7Ifrl9XXEmu/Rw6qkQZxyQwGA/Ly8lBQUNCjd27qCAZkIiLqVpLUekvdCRMmYOzYsSF3WYocQOVLnyIN3jIajRg4cCDy8vJ6Vc1YxoBMRETdTg6go0ePxvnnnx90t6VIs2+F3ndczWw2Y8iQIbqbDrM9OKiLiIh6jMFgQEFBAZKSkoLm0tairiHLzwHA4XBgyJAhvX6qV172REREPU4IgYaGBnz++ecoLS0Nu7lK6CVP8qQ26enpKCoqUqaj7c0YkImISBfkedS3b9+OLVu2KHNpywFZnsLTarXCYrEgLy8P+fn5vbK/WAsDMhER6YoQAocPH8aGDRtQUVEBoLVpOykpCcnJTqSmpqGoqBDp6RkAesc8APFgQCYiIt2R58H+9ttvUVJSgqamJqSnp6OwsBADBgyAxWI5aQKxjAGZiIh0SQ5PXq8XXq8XiYmJsFgsAE6eWrEaAzIREZEO9M6LtYiIiE4yDMhEREQ6wIBMRESkAwzIREREOsCATEREpAMMyERERDrAgExERKQDDMhEREQ6wIBMRESkAwzIREREOsCATEREpAMMyERERDrAgExERKQDDMhEREQ6wIBMRESkAwzIREREOsCATEREpAMMyERERDrAgExERKQDDMhEREQ6wIBMRESkAwzIREREOsCATEREpAMMyERERDrAgExERKQDDMhEREQ6wIBMRESkAwzIREREOsCATEREpAMMyERERDrAgExERKQDDMhEREQ6wIBMRESkAwzIREREOsCATEREpAMMyERERDrAgExERKQDDMhEREQ6wIBMRESkAwzIREREOvD/Af/aLoX1JEoyAAAAAElFTkSuQmCC","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["n_random_trials = 1\n","\n","for random_trial in range(n_random_trials):\n","\n"," # choose a random trial\n"," i_df = df.sample(1)\n"," # extract trial images\n"," i_images = i_df.images.values[0]\n"," # extract trial 'oddity' (i.e., the index of the non-matching object)\n"," i_oddity = i_df.oddity_index.values[0]\n","\n"," plt.figure(figsize=[6, 4])\n","\n"," for idx, i_image in enumerate(i_images):\n","\n"," plt.subplot(1, len(i_images), idx+1)\n"," plt.imshow(Image.open(os.path.join(image_dir, i_image)))\n"," plt.axis('off')\n"," plt.title(['object A', 'object B'][idx==i_oddity])\n"," plt.suptitle('human accuracy: %.02f | %s accuracy: %.02f'%(\n"," i_df.human_accuracy.values[0],\n"," imodel.split('_svm')[0],\n"," i_df[imodel].values[0]), fontsize=11)\n"," plt.show()"]}],"metadata":{"colab":{"authorship_tag":"ABX9TyM+DVPF/9WauXh3NJllF3i0","provenance":[{"file_id":"17ae_xyTfyOWvZly6Vph35VyNxVzuF9Nc","timestamp":1718075007881},{"file_id":"1imUSa8bLQRd2PvCk3fRsaRsYbNk1987u","timestamp":1716345995628},{"file_id":"1dr35j8VYocYShiQTu3P_JPKLgBtOS83-","timestamp":1715561446045},{"file_id":"1NZDdTsZKuKgrLmKvAG9M4Ge2EGVCXKC0","timestamp":1715468029338},{"file_id":"12vYu_Wnd7ST65AwGTJmgso083-EkHVfm","timestamp":1715288093572}]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0} 2 | --------------------------------------------------------------------------------