TRIBE v2核心架构深度解析:FmriEncoder Transformer如何将多模态特征映射到皮层表面
【免费下载链接】tribev2This repository contains the code to train and evaluate TRIBE v2, a multimodal model for brain response prediction项目地址: https://gitcode.com/gh_mirrors/tr/tribev2
TRIBE v2 是一个多模态脑响应预测模型(Foundation Model),它能预测人脑 fMRI 对视频、音频、文本等自然刺激的响应。本文带你快速读懂 TRIBE v2 的核心架构:FmriEncoder如何用 Transformer 把视觉、听觉、语言三类特征统一映射到皮层表面(约 2 万个顶点),无需大量代码基础也能看懂。🧠
一、TRIBE v2 是做什么的?
想象一个场景:给模型看一段 10 秒的影片,它就能"预测"这个人脑皮层表面每个位置的血氧信号(BOLD)。
- 输入:视频、音频、文本(文本会自动转成语音再转录为带时间戳的词语)
- 输出:fsaverage5 皮层网格上约 2 万个顶点的 fMRI 响应
- 关键设定:预测输出向后偏移 5 秒,以补偿血流动力学的滞后效应
整体项目结构可以在 README.md 中找到,核心文件如下:
| 文件 | 作用 |
|---|---|
| tribev2/model.py | FmriEncoder:Transformer 多模态→fMRI 主模型 |
| tribev2/main.py | 实验流水线:Data 加载器、TribeExperiment 训练类 |
| tribev2/demo_utils.py | 推理入口TribeModel:from_pretrained / predict |
| tribev2/utils_fmri.py | 皮层表面投影(MNI/fsaverage)与 ROI 分析 |
| tribev2/grids/defaults.py | 完整默认实验配置 |
二、FmriEncoder 的四大构件 🏗️
FmriEncoder定义在 model.py,它是一条清晰的流水线,由四个构件串联而成:
1. 模态投影器(Projectors)
每种模态(text / audio / video)的特征维度各不相同,模型为每种模态构建一个独立的 MLP 投影器(LayerNorm + GELU 激活),把它压缩到统一的隐层维度。
- 若使用
cat聚合策略,每个模态先分到hidden // 模态数的宽度,最后拼接回完整宽度 - 若某个模态缺失,自动补零张量,模型依然能跑(见 aggregate_features)
💡 这正是"多模态融合"的关键一步:不同来源的特征先被"翻译成同一种语言"。
2. 时间 Transformer 编码器(Encoder)
融合后的时序特征(B, T, H)会加上可学习的时间位置编码(time_pos_embed),再送入一个 8 层深、隐层 1152 维的 TransformerEncoder(配置见 defaults.py)。
它让模型学习"过去发生了什么 → 现在大脑会怎么反应"的时序依赖关系,比如语言理解有几百毫秒的延迟。
3. 主体层(Subject Layers)
人脑之间存在个体差异,SubjectLayers为每位受试者维护一套预测权重(带 subject_dropout=0.1 的随机正则)。推理时average_subjects=True,相当于输出"平均大脑"的响应——这就是预训练模型对外提供预测的基础。
4. 时间池化(AdaptiveAvgPool1d)
fMRI 的时间分辨率(TR)远低于特征提取频率(2 Hz)。pooler(model.py)把模型输出的时序序列池化到与 fMRI 目标一致的步数,完成"降采样对齐"。
三、从刺激到皮层表面的完整数据流 🌊
视频/音频/文本 │ 特征提取器(V-JEPA2 / Wav2Vec2-BERT / Llama-3.2) ▼ 各模态时序特征 ──► 模态投影器 Projectors(维度统一) ▼ 拼接/聚合 ──► 时间平滑(可选高斯卷积) ▼ 时间 Transformer 编码器(8 层,学习时序动态) ▼ Subject Layers(平均大脑输出) ▼ 池化到 TR 分辨率 ──► 皮层表面约 20k 顶点的 fMRI 预测特征提取器配置在 defaults.py:视频用facebook/vjepa2,音频用Wav2VecBert,文本用meta-llama/Llama-3.2-3B——都是各自领域的 SOTA 模型,这也是"Foundation Model"名称的由来。
四、皮层表面投影:TribeSurfaceProjector
原始 fMRI 往往是三维体积数据,而 TRIBE v2 的输出定义在皮层网格上。TribeSurfaceProjector(utils_fmri.py)负责这两件事:
- 体积 → 表面:对 4D 体积数据调用 nilearn 的
vol_to_surf,沿皮层半径(radius=3mm)取球状邻域插值到 pial 表面 - 表面重采样:对已有表面数据,直接按顶点数量下采样到目标网格(如 fsaverage5 = 10242 顶点/半球)
支持的模板空间涵盖 MNI 系列、fsaverage3–6、CIFTI 等(FmriTemplateSpace),让你可以用同一套模型处理不同实验室的数据。
五、训练与推理:两条极简入口 🔧
训练
- 本地快速测试:
python -m tribev2.grids.test_run(test_run.py) - 大规模网格搜索:
python -m tribev2.grids.run_cortical(皮层)与run_subcortical(皮层下) - 默认训练 15 个 epoch,Adam 优化器 + OneCycleLR,用皮尔逊相关系数(Pearson)作为监控指标,损失为逐顶点的 MSE(defaults.py)
推理
只需三步,demo_utils.py 中的TribeModel已封装好一切:
from tribev2 import TribeModel model = TribeModel.from_pretrained("facebook/tribev2", cache_folder="./cache") df = model.get_events_dataframe(video_path="path/to/video.mp4") preds, segments = model.predict(events=df) # (n_timesteps, n_vertices)完整可视化演示(含大脑着色图)见 tribe_demo.ipynb。
六、架构设计亮点总结 ✅
| 设计选择 | 解决的问题 |
|---|---|
| 每模态独立投影器 + 缺失补零 | 灵活支持单/多模态输入 |
| 时间位置编码 + 8 层 Transformer | 建模数百毫秒级的神经响应动态 |
| Subject Layers + 平均大脑 | 个体差异建模,同时输出泛化的"平均人脑" |
| 皮层表面输出(fsaverage5) | 分辨率高、跨数据集对齐,适合 ROI 分析 |
| 5 秒滞后补偿 | 匹配血流动力学响应(HRF)的时间延迟 |
🎯一句话总结:TRIBE v2 的FmriEncoder用"投影器统一维度 → Transformer 学时序 → 主体层输出 → 池化对齐"四步流水线,把 LLM、语音、视觉三大领域的基础模型桥接到神经科学,实现了从"看一段视频"到"预测皮层表面 2 万个点的脑响应"的端到端映射。
代码遵循 CC-BY-NC-4.0 协议(见 LICENSE)。训练依赖需pip install -e ".[training]",可视化需pip install -e ".[plotting]"。
【免费下载链接】tribev2This repository contains the code to train and evaluate TRIBE v2, a multimodal model for brain response prediction项目地址: https://gitcode.com/gh_mirrors/tr/tribev2
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考