Analysis code for "Visual and auditory deep learning models capture neural representations of naturalistic social interaction in the superior temporal sulcus"
analysis_code/
├── config.py # Centralized paths and parameters
├── utils/ # Shared utilities
│ ├── fmri_io.py # fMRI data loading/saving
│ ├── stats.py # Statistical functions
│ └── visualization.py # Plotting utilities
├── 00_preprocessing/
│ └── extract_frames.py # Extract video frames by TR
├── 00_rois/
│ ├── ffa_mask.nii # Fusiform face area mask
│ ├── ppa_mask.nii.gz # Parahippocampal place area mask
│ ├── sts_mask.nii # Superior temporal sulcus mask
│ ├── sts_anterior_mask.nii # Anterior STS mask
│ └── sts_posterior_mask.nii # Posterior STS mask
├── 01_feature_extraction/
│ ├── extract_clip.py # CLIP visual features
│ ├── extract_clap.py # CLAP audio features
│ ├── extract_dino.py # DINOv2 visual features (control)
│ └── extract_hubert.py # HuBERT audio features (control)
├── 02_encoding/
│ ├── voxelwise_encoding_ridge_gpu.py # GPU-accelerated ridge regression
│ ├── encoding_utils.py # Encoding helper functions
│ └── models_config.py # Model feature configurations
├── 03_variance_partitioning/
│ └── preference_mapping.py # Two-stage FDR unique variance
├── 04_pca/
│ └── pca_encoding_weights.py # PCA on encoding weights
├── 05_stimulus_correlates/
│ ├── annotate_shotvl.py # Shot scale annotation (ShotVL)
│ ├── annotate_gpt4o.py # Social interaction annotation (GPT-4o)
│ └── extract_wavlm_emotion.py # Emotion extraction (WavLM)
└── 06_geometry/
└── tsne_predicted_signal.py # t-SNE visualization
| Figure | Description | Script(s) |
|---|---|---|
| Fig. 1 | Schematic overview | N/A (illustration) |
| Fig. 2a | Encoding model performance (R²) | 02_encoding/voxelwise_encoding_ridge_gpu.py |
| Fig. 2b | ROI comparison bar plots | 02_encoding/voxelwise_encoding_ridge_gpu.py |
| Fig. 3a | CLIP vs CLAP preference maps | 03_variance_partitioning/preference_mapping.py |
| Fig. 3b | Unique variance brain maps | 03_variance_partitioning/preference_mapping.py |
| Fig. 4a | PCA scree plot | 04_pca/pca_encoding_weights.py |
| Fig. 4b | PC-annotation correlation heatmap | 04_pca/pca_encoding_weights.py |
| Fig. 4c | PC brain maps | 04_pca/pca_encoding_weights.py |
| Fig. 5 | t-SNE of predicted responses | 06_geometry/tsne_predicted_signal.py |
| Fig. S1 | Control model comparisons | 02_encoding/voxelwise_encoding_ridge_gpu.py |
| Fig. S2 | Anterior vs posterior STS | 02_encoding/voxelwise_encoding_ridge_gpu.py |
Edit config.py to set paths for your system:
PROJECT_ROOT: Base project directoryDATA_DIR: Raw data (video, audio)FMRI_DATA_DIR: fMRI data locationANNOTATIONS_DIR: Feature annotationsRESULTS_DIR: Output directoryExtract video frames:
python 00_preprocessing/extract_frames.py \
--video_path /path/to/sherlock.mp4 \
--output_dir /path/to/frames
Extract DNN features from movie:
# Visual features (CLIP)
python 01_feature_extraction/extract_clip.py
# Audio features (CLAP)
python 01_feature_extraction/extract_clap.py
# Control models
python 01_feature_extraction/extract_dino.py
python 01_feature_extraction/extract_hubert.py
Run voxelwise encoding:
python 02_encoding/voxelwise_encoding_ridge_gpu.py \
--model clip_full \
--roi sts \
--gpu_id 0
Compare unique variance between models:
python 03_variance_partitioning/preference_mapping.py \
--joint /path/to/clip_clap_results \
--model1 /path/to/clip_results \
--model2 /path/to/clap_results \
--joint_name clip_clap \
--model1_name clip_full \
--model2_name clap_full \
--output preference_map.html
Analyze encoding weight structure:
python 04_pca/pca_encoding_weights.py --model clip_full
Annotate stimulus features:
# Shot scale (requires ShotVL)
python 05_stimulus_correlates/annotate_shotvl.py
# Emotion from audio
python 05_stimulus_correlates/extract_wavlm_emotion.py
Visualize representational geometry:
python 06_geometry/tsne_predicted_signal.py \
--model clip_full \
--roi sts
requirements.txt for full dependenciesPython
100.0%
Analysis code for "Visual and auditory deep learning models capture neural representations of naturalistic social interaction in the superior temporal sulcus"
analysis_code/
├── config.py # Centralized paths and parameters
├── utils/ # Shared utilities
│ ├── fmri_io.py # fMRI data loading/saving
│ ├── stats.py # Statistical functions
│ └── visualization.py # Plotting utilities
├── 00_preprocessing/
│ └── extract_frames.py # Extract video frames by TR
├── 00_rois/
│ ├── ffa_mask.nii # Fusiform face area mask
│ ├── ppa_mask.nii.gz # Parahippocampal place area mask
│ ├── sts_mask.nii # Superior temporal sulcus mask
│ ├── sts_anterior_mask.nii # Anterior STS mask
│ └── sts_posterior_mask.nii # Posterior STS mask
├── 01_feature_extraction/
│ ├── extract_clip.py # CLIP visual features
│ ├── extract_clap.py # CLAP audio features
│ ├── extract_dino.py # DINOv2 visual features (control)
│ └── extract_hubert.py # HuBERT audio features (control)
├── 02_encoding/
│ ├── voxelwise_encoding_ridge_gpu.py # GPU-accelerated ridge regression
│ ├── encoding_utils.py # Encoding helper functions
│ └── models_config.py # Model feature configurations
├── 03_variance_partitioning/
│ └── preference_mapping.py # Two-stage FDR unique variance
├── 04_pca/
│ └── pca_encoding_weights.py # PCA on encoding weights
├── 05_stimulus_correlates/
│ ├── annotate_shotvl.py # Shot scale annotation (ShotVL)
│ ├── annotate_gpt4o.py # Social interaction annotation (GPT-4o)
│ └── extract_wavlm_emotion.py # Emotion extraction (WavLM)
└── 06_geometry/
└── tsne_predicted_signal.py # t-SNE visualization
| Figure | Description | Script(s) |
|---|---|---|
| Fig. 1 | Schematic overview | N/A (illustration) |
| Fig. 2a | Encoding model performance (R²) | 02_encoding/voxelwise_encoding_ridge_gpu.py |
| Fig. 2b | ROI comparison bar plots | 02_encoding/voxelwise_encoding_ridge_gpu.py |
| Fig. 3a | CLIP vs CLAP preference maps | 03_variance_partitioning/preference_mapping.py |
| Fig. 3b | Unique variance brain maps | 03_variance_partitioning/preference_mapping.py |
| Fig. 4a | PCA scree plot | 04_pca/pca_encoding_weights.py |
| Fig. 4b | PC-annotation correlation heatmap | 04_pca/pca_encoding_weights.py |
| Fig. 4c | PC brain maps | 04_pca/pca_encoding_weights.py |
| Fig. 5 | t-SNE of predicted responses | 06_geometry/tsne_predicted_signal.py |
| Fig. S1 | Control model comparisons | 02_encoding/voxelwise_encoding_ridge_gpu.py |
| Fig. S2 | Anterior vs posterior STS | 02_encoding/voxelwise_encoding_ridge_gpu.py |
Edit config.py to set paths for your system:
PROJECT_ROOT: Base project directoryDATA_DIR: Raw data (video, audio)FMRI_DATA_DIR: fMRI data locationANNOTATIONS_DIR: Feature annotationsRESULTS_DIR: Output directoryExtract video frames:
python 00_preprocessing/extract_frames.py \
--video_path /path/to/sherlock.mp4 \
--output_dir /path/to/frames
Extract DNN features from movie:
# Visual features (CLIP)
python 01_feature_extraction/extract_clip.py
# Audio features (CLAP)
python 01_feature_extraction/extract_clap.py
# Control models
python 01_feature_extraction/extract_dino.py
python 01_feature_extraction/extract_hubert.py
Run voxelwise encoding:
python 02_encoding/voxelwise_encoding_ridge_gpu.py \
--model clip_full \
--roi sts \
--gpu_id 0
Compare unique variance between models:
python 03_variance_partitioning/preference_mapping.py \
--joint /path/to/clip_clap_results \
--model1 /path/to/clip_results \
--model2 /path/to/clap_results \
--joint_name clip_clap \
--model1_name clip_full \
--model2_name clap_full \
--output preference_map.html
Analyze encoding weight structure:
python 04_pca/pca_encoding_weights.py --model clip_full
Annotate stimulus features:
# Shot scale (requires ShotVL)
python 05_stimulus_correlates/annotate_shotvl.py
# Emotion from audio
python 05_stimulus_correlates/extract_wavlm_emotion.py
Visualize representational geometry:
python 06_geometry/tsne_predicted_signal.py \
--model clip_full \
--roi sts
requirements.txt for full dependenciesPython
100.0%