Investigating the temporal dynamics and modeling of mid-level feature representations in humans.
The 21 matches
- [1] § Materials and Methods › EEG recording and preprocessing ↔ EEG/Preprocessing/preprocessing_eeg.py, lines 398–457 · score 0.89 · notch filter, low pass filtering, baseline corrected, epochs starting, MNE, raw
- [2] § Materials and Methods › Encoding › Predicting CNN activations from ground-truth annotations ↔ CNN/Encoding/encoding_cnn.py, lines 32–111 · score 0.74 · ridge regression models, explained variance, weighted correlations, CNN activations, predicted, layers
- [3] § Materials and Methods › Encoding › Predicting CNN activations from ground-truth annotations ↔ CNN/Encoding/hyperparameter_optimization_cnn.py, lines 30–101 · score 0.74 · ridge regression models, explained variance, weighted correlations, CNN activations, layers, mid
- [4] § Materials and Methods › Encoding › Extracting and preparing the CNN activations ↔ CNN/Activation_extraction_and_prep/activation_extraction_cnn_images.py, lines 32–74 · score 0.70 · pre trained, preprocessed images, extracted activations, Places365, crop, layers
- [5] § Materials and Methods › Stimuli and ground-truth annotations ↔ EEG/Encoding/annotation_prep_videos.py, lines 33–97 · score 0.69 · openCV, skeleton position, action identity, meta, Canny, engine
- [6] § Materials and Methods › Stimuli and ground-truth annotations ↔ EEG/Encoding/annotation_prep_images.py, lines 33–95 · score 0.66 · openCV, skeleton position, action identity, Canny, engine, matrix
- [7] § Materials and Methods › Encoding › Extracting and preparing the CNN activations ↔ CNN/Activation_extraction_and_prep/activation_extraction_cnn_videos.py, lines 127–167 · score 0.62 · flattened activations, feature map, extracted CNN, dimensions, layer, training
- [8] § Materials and Methods › EEG recording and preprocessing ↔ EEG/Encoding/mvnn_encoding.py, lines 24–70 · score 0.62 · Ledoit Wolf, covariance matrix, MVNN, channels, preprocessing, EEG
- [9] § Materials and Methods › Encoding › Preparing the ground-truth annotations ↔ EEG/Encoding/annotation_prep_images.py, lines 33–95 · score 0.62 · skeleton position, Action identity, scene depth, kernel, fitted, linear
- [10] § Materials and Methods › Encoding › Preparing the ground-truth annotations ↔ EEG/Encoding/annotation_prep_videos.py, lines 33–97 · score 0.62 · skeleton position, Action identity, scene depth, kernel, fitted, linear
- [11] § Materials and Methods › Encoding › EEG noise ceiling ↔ EEG/Encoding/noise_ceiling.py, lines 15–58 · score 0.61 · noise ceiling, lower bound, preprocessed, channel, EEG, encoding
- [12] § Materials and Methods › Encoding › Extracting and preparing the CNN activations ↔ CNN/Activation_extraction_and_prep/activation_extraction_cnn_videos.py, lines 31–72 · score 0.61 · pre trained, extracted activations, PyTorch, preprocessed, layers, CNN
- [13] § Materials and Methods › EEG recording and preprocessing ↔ EEG/Decoding/decoding.py, lines 97–135 · score 0.60 · Ledoit Wolf, covariance matrix, MVNN, channels, EEG
- [14] § Materials and Methods › Decoding ↔ EEG/Decoding/decoding.py, lines 309–359 · score 0.57 · cross validation, stratified, fold, SVM, split, decoding
- [15] § Results › Candidate mid-level features are most strongly encoded in the brain between ~100 and ~250 ms after stimulus onset ↔ Controls/control_analysis_3/encoding_c3.py, lines 31–96 · score 0.57 · predicted EEG, skeleton position, action identity, scene depth, edges, trained
- [16] § Results › Candidate mid-level features are most strongly encoded in the brain between ~100 and ~250 ms after stimulus onset ↔ Controls/control_analysis_3/hyperparameter_optimization_c3.py, lines 31–104 · score 0.56 · predicted EEG, skeleton position, action identity, scene depth, edges, trained
- [17] § Materials and Methods › Encoding › Extracting and preparing the CNN activations ↔ CNN/Activation_extraction_and_prep/activation_extraction_cnn_images.py, lines 32–74 · score 0.56 · pre trained, extracted activations, crop, preprocessed, frame, layers
- [18] § Materials and Methods › Encoding › Predicting the EEG responses from ground-truth annotations ↔ CNN/Encoding/hyperparameter_optimization_cnn.py, lines 30–101 · score 0.54 · ridge regression models, strength, hyperparameter, variance, weights, mid
- [19] § Materials and Methods › Encoding › Correlation between EEG peak latencies and CNN peak layers ↔ CNN/Plotting/eeg_vs_cnn_corr_peak_latencies.py, lines 583–640 · score 0.53 · EEG peak latencies, peak layers, Spearman, correlated, CNNs
- [20] § Materials and Methods › Statistical analysis ↔ CNN/Plotting/eeg_vs_cnn_corr_peak_latencies.py, lines 692–757 · score 0.53 · EEG peak latencies, CNN peak, shuffled, correlation, layer
- [21] § Materials and Methods › Encoding ↔ CNN/Encoding/encoding_cnn.py, lines 32–111 · score 0.52 · ridge regression, CNN activations, networks, models, predict, correlating
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
Python · 294 lines · 9.3 KB · MIT · 2 matches
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- ENCODING - DEEP NETS
- This script implements the multivariate linear ridge regression for the unit
- activations in deep nets.
- @author: Alexander Lenders, Agnessa Karapetian
- """
- import os
- import numpy as np
- import torch
- import pickle
- import argparse
- from utils import load_activation, load_alpha
- import sys
- from pathlib import Path
- project_root = Path(__file__).resolve().parents[2]
- sys.path.append(str(project_root))
- from EEG.Encoding.utils import (
- load_config,
- load_features,
- OLS_pytorch,
- vectorized_correlation,
- )
- def encoding(
- input_type: str,
- feat_dir: str,
- cnn_dir: str,
- save_dir: str,
- frame: int,
- alpha_tp: bool = False,
- ):
- """
- Performs encoding using ridge regression to predict unit activations in deep neural networks
- (e.g., ResNet) from mid-level features extracted from images or video clips. For each feature
- and each specified layer, fits a regression model to predict activations, evaluates performance
- metrics (RMSE, correlation, weighted correlation), and saves results.
- Input:
- ----------
- Feature and activation directories containing precomputed features and CNN activations for
- images or video clips. Features are loaded from .pkl files, and activations are loaded per layer.
- The function supports both weighted and unweighted regression based on explained variance.
- Returns:
- ----------
- Saves a dictionary of regression results for each feature in a .pkl file in the specified
- save directory. The results include RMSE scores, correlation scores, weighted correlations,
- and their averages for each layer.
- Parameters
- ----------
- input_type : str
- Type of input data ("images" or "miniclips").
- feat_dir : str
- Directory containing feature .pkl files.
- cnn_dir : str
- Directory containing CNN activations and explained variance files.
- save_dir : str
- Directory to save regression results.
- frame : int
- Frame index for selecting image features (used if input_type is "images").
- alpha_tp : bool, optional
- If True, loads alpha hyperparameter per layer; otherwise loads a single alpha per feature (default: True).
- """
- # -------------------------------------------------------------------------
- # STEP 1 Define Variables
- # -------------------------------------------------------------------------
- layers_names = (
- "layer1.0.relu_1",
- "layer1.1.relu_1",
- "layer2.0.relu_1",
- "layer2.1.relu_1",
- "layer3.0.relu_1",
- "layer3.1.relu_1",
- "layer4.0.relu_1",
- "layer4.1.relu_1",
- )
- feature_names = (
- "edges",
- "world_normal",
- "lighting",
- "scene_depth",
- "reflectance",
- "action",
- "skeleton",
- )
- if input_type == "images":
- featuresDir = os.path.join(
- feat_dir,
- f"img_features_frame_{frame}_redone_{len(feature_names)}_features_onehot.pkl",
- )
- elif input_type == "miniclips":
- featuresDir = os.path.join(
- feat_dir,
- f"video_features_avg_frame_redone_{len(feature_names)}.pkl",
- )
- explained_var_dir = os.path.join(cnn_dir, "pca")
- save_dir = os.path.join(save_dir, input_type)
- act_dir = os.path.join(cnn_dir, "prepared")
- features_dict = dict.fromkeys(feature_names)
- # Device agnostic code: Use gpu if possible, otherwise cpu
- device = "cuda" if torch.cuda.is_available() else "cpu"
- print(f"Using device: {device}")
- # -------------------------------------------------------------------------
- # STEP 2 Loop over all features and save best alpha hyperparameter
- # -------------------------------------------------------------------------
- output_names = (
- "rmse_score",
- "correlation",
- "rmse_average",
- "correlation_average",
- "weighted_correlation",
- )
- # define matrix where to save the values
- regression_features = dict.fromkeys(feature_names)
- num_layers = len(layers_names)
- for feature in features_dict.keys():
- X_train, _, X_test = load_features(feature, featuresDir)
- if explained_var_dir:
- alpha_dir_final = os.path.join(save_dir, "weighted")
- else:
- alpha_dir_final = os.path.join(save_dir, "unweighted")
- if alpha_tp is False:
- alpha = load_alpha(feature=feature, feat_dir=alpha_dir_final)
- output = dict.fromkeys(output_names)
- rmse_scores = {}
- corr_scores = {}
- weighted_corr_scores = {}
- for tp, l in enumerate(layers_names):
- if alpha_tp is True:
- alpha = load_alpha(feature, alpha_dir_final, tp)
- y_train_tp = load_activation("training", l, act_dir)
- y_test_tp = load_activation("test", l, act_dir)
- regression = OLS_pytorch(alpha=alpha)
- try:
- regression.fit(X_train, y_train_tp, solver="cholesky")
- except Exception as error:
- print("Attention. Cholesky solver did not work: ", error)
- print("Trying the standard linalg.solver...")
- regression.fit(X_train, y_train_tp, solver="solve")
- prediction = regression.predict(X_test)
- rmse_score = regression.score(entry=X_test, y=y_test_tp)
- correlation = vectorized_correlation(prediction, y_test_tp)
- rmse_scores[l] = rmse_score
- corr_scores[l] = correlation
- if explained_var_dir:
- # Load the explained variance for the current layer
- explained_var_layer = os.path.join(
- explained_var_dir, l, "explained_variance.pkl"
- )
- with open(explained_var_layer, "rb") as file:
- explained_var = pickle.load(file)
- explained_var = np.array(explained_var["explained_variance"])
- total_variance = np.sum(explained_var)
- # Weighted correlation
- weighted_corr_scores[l] = (
- correlation * explained_var / total_variance
- )
- if explained_var_dir:
- rmse_avg_chan = np.zeros((num_layers))
- corr_avg_chan = np.zeros((num_layers))
- for i, layer in enumerate(layers_names):
- explained_var_dir_layer = os.path.join(
- explained_var_dir, layer, "explained_variance.pkl"
- )
- with open(explained_var_dir_layer, "rb") as file:
- explained_var = pickle.load(file)
- explained_var = np.array(explained_var["explained_variance"])
- total_variance = np.sum(explained_var)
- rmse_it = rmse_scores[layer]
- corr_it = corr_scores[layer]
- rmse_avg_chan[i] = (
- np.sum(rmse_it * explained_var) / total_variance
- )
- corr_avg_chan[i] = (
- np.sum(corr_it * explained_var) / total_variance
- )
- output["rmse_score"] = rmse_scores
- output["correlation"] = corr_scores
- output["rmse_average"] = rmse_avg_chan
- output["correlation_average"] = corr_avg_chan
- output["weighted_correlation"] = weighted_corr_scores
- regression_features[feature] = output
- # -------------------------------------------------------------------------
- # STEP 3 Save results
- # -------------------------------------------------------------------------
- # Save the dictionary
- fileDir = "encoding_layers_resnet.pkl"
- if explained_var_dir:
- resultsDir = os.path.join(save_dir, "weighted")
- else:
- resultsDir = os.path.join(save_dir, "unweighted")
- if not os.path.exists(resultsDir):
- os.makedirs(resultsDir)
- savefileDir = os.path.join(resultsDir, fileDir)
- with open(savefileDir, "wb") as f:
- pickle.dump(regression_features, f)
- return regression_features
- if __name__ == "__main__":
- parser = argparse.ArgumentParser()
- # add arguments / inputs
- parser.add_argument(
- "--config_dir",
- type=str,
- help="Directory to the configuration file.",
- required=True,
- )
- parser.add_argument(
- "--config",
- type=str,
- help="Configuration.",
- required=True,
- )
- parser.add_argument(
- "--input_type",
- default="images",
- type=str,
- help="Images or miniclips",
- required=True,
- )
- args = parser.parse_args() # to get values for the arguments
- config = load_config(args.config_dir, args.config)
- args = parser.parse_args()
- input_type = args.input_type
- frame = config.getint(args.config, "img_frame")
- save_dir = config.get(args.config, "save_dir_cnn")
- # Hardcoded for now
- if args.config == "control_12":
- ALPHA_PER_TP = True
- print("Using alpha per timepoint for control_12")
- else:
- ALPHA_PER_TP = False
- if input_type == "images":
- feat_dir = config.get(args.config, "save_dir_feat_img")
- cnn_dir = config.get(args.config, "save_dir_cnn_img")
- else:
- feat_dir = config.get(args.config, "save_dir_feat_video")
- cnn_dir = config.get(args.config, "save_dir_cnn_video")
- encoding(
- input_type, feat_dir, cnn_dir, save_dir, frame, alpha_tp=ALPHA_PER_TP
- )
encoding_cnn.py at commit d069bb4, under MIT · at the source
Overview
- Department of Education and Psychology, Freie Universität Berlin, Berlin, Germany
- Charité – Universitätsmedizin Berlin, Einstein Center for Neurosciences Berlin, Berlin, Germany
- Bernstein Centre for Computational Neuroscience Berlin, Berlin, Germany
- Faculty of Biology, Albert-Ludwigs-Universität Freiburg, Freiburg, Germany
- Fraunhofer Institute for Laser Technology ILT, Aachen, Germany
- Department of Mathematics and Computer Science, Freie Universität Berlin, Berlin, Germany
- Department of Computer Science, Goethe Universität Frankfurt, Frankfurt am Main, Germany
- Berlin School of Mind and Brain, Faculty of Philosophy, Humboldt-Universität zu Berlin, Berlin, Germany
Abstract
Visual perception unfolds through a hierarchy of transformations, beginning with the extraction of low-level features, such as edges, and culminating in the representation of high-level features such as object categories. While the processing of low- and high-level features is well studied, the intermediate transformations, that is, mid-level features, remain poorly understood. Here, we introduce a stimulus set of naturalistic 3D-rendered images and videos with ground-truth annotations for five candidate mid-level features (reflectance, scene depth, world normals, lighting, and skeleton position) alongside for one low-level feature (edges) and for one high-level feature (action identity). To determine when these features are processed in the brain, we collected electroencephalography (EEG) responses during stimulus presentation and trained linearized encoding models to predict EEG responses from the annotations. We first showed that candidate mid-level features were best represented between ~100 and 250 ms post-stimulus, between low- and high-level features, and consistent with a bridging role linking sensory and semantic processing. We then assessed convolutional neural networks (CNNs) as models of mid-level feature processing in humans and observed that although their hierarchies were shallower, they exhibited a comparable processing order for mid-level but not low- or high-level features, only for videos. Together, our results support the view that mid-level features are tied to surface- and shape-related processing and establish 3D-rendered stimuli with annotations as a valuable tool for investigating mid-level vision in biological and artificial neural networks.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 21 matches between paragraphs and lines of code.
Agnessa14/Mid-level-features
d069bb4b3e5eef22d9487fc0e6fedf485b778322, 19 February 2026Availability: 1 check, the latest on 30 September 2026: the link answers
- 30 September 2026: the link answers
128 files
- CNN/
Activation_extraction_an , Python, 1 lined_prep/ __init__.py - CNN/
Activation_extraction_an , Python, 293 lines, 2 matchesd_prep/ activation_extraction_cn n_images.py - CNN/
Activation_extraction_an , Python, 378 lines, 2 matchesd_prep/ activation_extraction_cn n_videos.py - CNN/
Activation_extraction_an , Python, 483 linesd_prep/ pca_activations.py - CNN/
Activation_extraction_an , Python, 146 linesd_prep/ prepare_layers.py - CNN/
Encoding/ , Python, 1 line__init__.py - CNN/
Encoding/ , Python, 294 lines, 2 matchesencoding_cnn.py - CNN/
Encoding/ , Python, 275 lines, 2 matcheshyperparameter_optimizat ion_cnn.py - CNN/
Encoding/ , Python, 36 linesutils.py - CNN/
Plotting/ , Python, 757 lines, 2 matcheseeg_vs_cnn_corr_peak_lat encies.py - CNN/
Plotting/ , Python, 466 linesencoding_plot_cnn.py - CNN/
Stats/ , Python, 1 line__init__.py - CNN/
Stats/ , Python, 567 linesencoding_bootstrapping_c nn.py - CNN/
Stats/ , Python, 410 linesencoding_difference_boot strapping_cnn.py - CNN/
Stats/ , Python, 278 linesencoding_difference_sign ificance_stats_cnn.py - CNN/
Stats/ , Python, 261 linesencoding_significance_st ats_cnn.py - CNN/
__init__.py , Python, 1 line - Controls/
__init__.py , Python, 1 line - Controls/
control_analysis_1/ , Shell, 63 linesc1_miniclips.sh - Controls/
control_analysis_1/ , Shell, 20 linessbatch_c1.sh - Controls/
control_analysis_10/ , Python, 1 line__init__.py - Controls/
control_analysis_10/ , Python, 129 linesdata.py - Controls/
control_analysis_10/ , Python, 49 linesdownload_kinetics.py - Controls/
control_analysis_10/ , Shell, 13 linesdownload_kinetics_train. sh - Controls/
control_analysis_10/ , Shell, 13 linesdownload_kinetics_val.sh - Controls/
control_analysis_10/ , Shell, 7 linesex_c10.sh - Controls/
control_analysis_10/ , Python, 43 linesmodel.py - Controls/
control_analysis_10/ , Shell, 53 linesrun_c10.sh - Controls/
control_analysis_10/ , Shell, 20 linessbatch_c10.sh - Controls/
control_analysis_10/ , Shell, 21 linessbatch_download.sh - Controls/
control_analysis_10/ , Shell, 21 linessbatch_ex.sh - Controls/
control_analysis_10/ , Shell, 32 linessbatch_start_tensorboard .sh - Controls/
control_analysis_10/ , Shell, 23 linessbatch_train.sh - Controls/
control_analysis_10/ , Python, 165 linestrain.py - Controls/
control_analysis_10/ , Shell, 27 linestrain.sh - Controls/
control_analysis_10/ , Shell, 27 linestrain_weight_decay.sh - Controls/
control_analysis_10/ , Python, 27 linesutils.py - Controls/
control_analysis_11/ , Shell, 8 linesex_c11.sh - Controls/
control_analysis_11/ , Shell, 53 linesrun_c11.sh - Controls/
control_analysis_11/ , Shell, 20 linessbatch_c11.sh - Controls/
control_analysis_11/ , Shell, 21 linessbatch_ex.sh - Controls/
control_analysis_12/ , Shell, 23 linesc12_differences.sh - Controls/
control_analysis_12/ , Shell, 26 linesc12_differences_cnn.sh - Controls/
control_analysis_12/ , Shell, 45 linesc12_images.sh - Controls/
control_analysis_12/ , Shell, 42 linesc12_images_cnn.sh - Controls/
control_analysis_12/ , Shell, 45 linesc12_miniclips.sh - Controls/
control_analysis_12/ , Shell, 42 linesc12_miniclips_cnn.sh - Controls/
control_analysis_12/ , Shell, 18 linessbatch_c12.sh - Controls/
control_analysis_2/ , Shell, 62 linesc2_miniclips.sh - Controls/
control_analysis_2/ , Shell, 20 linessbatch_c2.sh - Controls/
control_analysis_3/ , Shell, 44 linesc3_miniclips.sh - Controls/
control_analysis_3/ , Python, 308 lines, 1 matchencoding_c3.py - Controls/
control_analysis_3/ , Python, 319 lines, 1 matchhyperparameter_optimizat ion_c3.py - Controls/
control_analysis_3/ , Shell, 20 linessbatch_c3.sh - Controls/
control_analysis_4/ , Python, 281 linescontrol_analysis_4.py - Controls/
control_analysis_4/ , Shell, 9 linesrun_c4.sh - Controls/
control_analysis_4/ , Shell, 20 linessbatch_c4.sh - Controls/
control_analysis_5/ , Python, 214 linescontrol_analysis_5.py - Controls/
control_analysis_5/ , Shell, 9 linesrun_c5.sh - Controls/
control_analysis_5/ , Shell, 20 linessbatch_c5.sh - Controls/
control_analysis_6/ , Python, 293 linescontrol_analysis_6.py - Controls/
control_analysis_6/ , Python, 420 linescontrol_analysis_6_plott ing.py - Controls/
control_analysis_6/ , Shell, 49 linesrun_c6_1_images.sh - Controls/
control_analysis_6/ , Shell, 46 linesrun_c6_1_miniclips.sh - Controls/
control_analysis_6/ , Shell, 38 linesrun_c6_2_images.sh - Controls/
control_analysis_6/ , Shell, 37 linesrun_c6_2_miniclips.sh - Controls/
control_analysis_6/ , Shell, 18 linessbatch_c6_1.sh - Controls/
control_analysis_6/ , Shell, 18 linessbatch_c6_2.sh - Controls/
control_analysis_7/ , Python, 219 linescontrol_analysis_7_cka.p y - Controls/
control_analysis_7/ , Python, 201 linescontrol_analysis_7_naive .py - Controls/
control_analysis_7/ , Python, 283 linescontrol_analysis_7_rsa.p y - Controls/
control_analysis_7/ , Shell, 15 linesrun_c7.sh - Controls/
control_analysis_7/ , Shell, 15 linesrun_c7_cka.sh - Controls/
control_analysis_7/ , Shell, 15 linesrun_c7_rsa.sh - Controls/
control_analysis_7/ , Shell, 20 linessbatch_c7.sh - Controls/
control_analysis_8/ , Shell, 53 linesrun_c8.sh - Controls/
control_analysis_8/ , Shell, 20 linessbatch_c8.sh - Controls/
control_analysis_8/ , Python, 308 linestime_gen_diff_plotting.p y - Controls/
control_analysis_8/ , Python, 300 linestime_gen_plotting.py - Controls/
control_analysis_8/ , Python, 268 linestime_gen_stats.py - Controls/
control_analysis_8/ , Python, 286 linestime_gen_stats_diff.py - Controls/
control_analysis_8/ , Python, 279 linestime_generalization.py - Controls/
control_analysis_9/ , Shell, 38 linesc9_images.sh - Controls/
control_analysis_9/ , Shell, 38 linesc9_miniclips.sh - Controls/
control_analysis_9/ , Shell, 20 linessbatch_c9.sh - Controls/
create_config.py , Python, 566 lines - Controls/
default_after_decoding.s , Shell, 46 linesh - Controls/
default_decoding_images. , Shell, 16 linessh - Controls/
default_decoding_videos. , Shell, 17 linessh - Controls/
default_differences.sh , Shell, 23 lines - Controls/
default_differences_cnn. , Shell, 26 linessh - Controls/
default_images.sh , Shell, 50 lines - Controls/
default_images_cnn.sh , Shell, 53 lines - Controls/
default_miniclips.sh , Shell, 45 lines - Controls/
default_miniclips_cnn.sh , Shell, 54 lines - Controls/
ex_images_cnn.sh , Shell, 14 lines - Controls/
ex_miniclips_cnn.sh , Shell, 12 lines - Controls/
sbatch_decoding.sh , Shell, 21 lines - Controls/
sbatch_decoding_images.s , Shell, 30 linesh - Controls/
sbatch_decoding_videos.s , Shell, 28 linesh - Controls/
sbatch_default.sh , Shell, 19 lines - Controls/
sbatch_ex.sh , Shell, 21 lines - EEG/
Decoding/ , Python, 1 line__init__.py - EEG/
Decoding/ , Python, 544 lines, 2 matchesdecoding.py - EEG/
Decoding/ , Python, 91 linesutils.py - EEG/
Encoding/ , Python, 1 line__init__.py - EEG/
Encoding/ , Python, 394 lines, 2 matchesannotation_prep_images.p y - EEG/
Encoding/ , Python, 455 lines, 2 matchesannotation_prep_videos.p y - EEG/
Encoding/ , Python, 402 linesencoding.py - EEG/
Encoding/ , Python, 387 lineshyperparameter_optimizat ion.py - EEG/
Encoding/ , Python, 480 lines, 1 matchmvnn_encoding.py - EEG/
Encoding/ , Python, 373 lines, 1 matchnoise_ceiling.py - EEG/
Encoding/ , Python, 718 linesutils.py - EEG/
Plotting/ , Python, 463 linesplot_decoding.py - EEG/
Plotting/ , Python, 657 linesplot_encoding.py - EEG/
Preprocessing/ , Python, 863 lines, 1 matchpreprocessing_eeg.py - EEG/
Stats/ , Python, 364 linesdecoding_bootstrapping.p y - EEG/
Stats/ , Python, 295 linesdecoding_difference_boot strapping.py - EEG/
Stats/ , Python, 313 linesdecoding_difference_sign ificance_stats.py - EEG/
Stats/ , Python, 288 linesdecoding_significance_st ats.py - EEG/
Stats/ , Python, 382 linesencoding_bootstrapping.p y - EEG/
Stats/ , Python, 530 linesencoding_difference_boot strapping.py - EEG/
Stats/ , Python, 327 linesencoding_difference_sign ificance_stats.py - EEG/
Stats/ , Python, 319 linesencoding_significance_st ats.py - EEG/
__init__.py , Python, 1 line - copy_results.sh, Shell, 12 lines
- LICENSE, License, 21 lines
- README.md, Text, 164 lines
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 126 scripts, each with its path and the digest of its content;
- 21 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Datasets cited
Data and Code Availability
The neural data, stimuli, and ground-truth annotations are uploaded on https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 1, 30 September 2026: the first record
Recorded: type, language, journal, volume, pages, dates, 8 authors, 6 keywords, 1 funder, 69 references.
Cite
This paper
Karapetian, A., Lenders, A., Bawa, V., Pflaum, M., Leuner, R., Roig, G., Dwivedi, K., & Cichy, R. M. (2026). Investigating the temporal dynamics and modeling of mid-level feature representations in humans. Imaging neuroscience (Cambridge, Mass.), 4, IMAG.a.1207. https://
BibTeX
@article{karapetian2026i
author = {Karapetian, Agnessa and Lenders, Alexander and Bawa, Vanshika and Pflaum, Martin and Leuner, Raphael and Roig, Gemma and Dwivedi, Kshitij and Cichy, Radoslaw M},
title = {{Investigating the temporal dynamics and modeling of mid-level feature representations in humans}},
journal = {Imaging neuroscience (Cambridge, Mass.)},
year = {2026},
month = apr,
volume = {4},
pages = {IMAG.a.1207},
publisher = {MIT Press},
issn = {2837-6056},
doi = {10.1162/
url = {https://
pmid = {42065116},
pmcid = {PMC13125056}
}
RIS
TY - JOUR
AU - Karapetian, Agnessa
AU - Lenders, Alexander
AU - Bawa, Vanshika
AU - Pflaum, Martin
AU - Leuner, Raphael
AU - Roig, Gemma
AU - Dwivedi, Kshitij
AU - Cichy, Radoslaw M
TI - Investigating the temporal dynamics and modeling of mid-level feature representations in humans
T2 - Imaging neuroscience (Cambridge, Mass.)
J2 - Imaging Neurosci (Camb)
PY - 2026
DA - 2026/
VL - 4
SP - IMAG.a.1207
SN - 2837-6056
PB - MIT Press
DO - 10.1162/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1162/
"type": "article-journal",
"title": "Investigating the temporal dynamics and modeling of mid-level feature representations in humans",
"container-title": "Imaging neuroscience (Cambridge, Mass.)",
"author": [
{
"family": "Karapetian",
"given": "Agnessa"
},
{
"family": "Lenders",
"given": "Alexander"
},
{
"family": "Bawa",
"given": "Vanshika"
},
{
"family": "Pflaum",
"given": "Martin"
},
{
"family": "Leuner",
"given": "Raphael"
},
{
"family": "Roig",
"given": "Gemma"
},
{
"family": "Dwivedi",
"given": "Kshitij"
},
{
"family": "Cichy",
"given": "Radoslaw M"
}
],
"container-title-short":
"volume": "4",
"page": "IMAG.a.1207",
"DOI": "10.1162/
"PMID": "42065116",
"PMCID": "PMC13125056",
"ISSN": "2837-6056",
"publisher": "MIT Press",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
4,
27
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1038/s42003-026-10169-0 [code]
- Shared representations in brains and models reveal a two-route cortical organization during scene perception.Journal: Communications biologyIn common: Pillow, statsmodels, PyTorch, 6 other tools, cognitive, 8 references
- [2] doi:10.1038/s42003-026-10843-3 [code]
- Self-supervised learning yields representational signatures of category-selective cortex.Journal: Communications biologyIn common: 9 references, author Radoslaw Cichy
- [3] doi:10.1093/cercor/bhag075 [code]
- Cortical dynamics of icon perception: effects of concreteness and attractiveness.Journal: Cerebral cortex (New York, N.Y. : 1991)In common: MNE-Python, Pillow, statsmodels, 5 other tools, cognitive, 7 references
- [4] doi:10.1167/jov.26.8.4 [code]
- The neural processes of illusory occlusion in object recognition.Journal: Journal of visionIn common: MNE-Python, seaborn, scikit-learn, 4 other tools, EEG, cognitive, 8 references
- [5] doi:10.1523/eneuro.0344-25.2026 [code]
- Long-Term Variability in Visual Processing versus Perceptual Stability.Journal: eNeuroIn common: MNE-Python, statsmodels, seaborn, 5 other tools, cognitive, 7 references
- [6] doi:10.1038/s41597-025-05174-7 [code]
- A large-scale MEG and EEG dataset for object recognition in naturalistic scenesJournal: n/aIn common: MNE-Python, OpenCV, Pillow, 7 other tools, EEG, 4 references
- [7] doi:10.1038/s41467-026-76098-y [code]
- A single computational objective can produce specialization of streams in visual cortex.Journal: Nature communicationsIn common: Pillow, statsmodels, PyTorch, 6 other tools, 5 references
- [8] doi:10.1523/jneurosci.0038-26.2026 [code]
- Multidimensional Feature Tuning in Category Selective Areas of Human Visual Cortex.Journal: The Journal of neuroscience : the official journal of the Society for NeuroscienceIn common: Pillow, statsmodels, PyTorch, 6 other tools, 3 references
- [9] doi:10.1167/jov.26.8.1 [code]
- MAME: Multidimensional adaptive metamer exploration with human perceptual feedback.Journal: Journal of visionIn common: OpenCV, Pillow, PyTorch, 5 other tools, cognitive, 3 references
- [10] doi:10.1038/s41593-026-02207-1 [code]
- Neuronal tuning aligns dynamically with object and texture manifolds across the visual hierarchy.Journal: Nature neuroscienceIn common: Pillow, statsmodels, PyTorch, 6 other tools, 3 references
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 126 scripts, and 21 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:a6230e9675b835c5…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
