| name | parallelized-hierarchical-connectome-phc |
| description | 并行化层次连接组(PHC)框架:用于脑网络时空循环建模的深度学习架构。结合结构连接和功能连接,通过并行化计算实现大规模脑网络的高效分析。适用于脑网络动力学、神经影像学、脑疾病预测。 |
Parallelized Hierarchical Connectome: A Spatiotemporal Recurrent Framework for Brain Network Analysis
并行化层次连接组框架:结合结构连接和功能连接的时空循环神经网络,实现大规模脑网络的高效建模与分析。
Metadata
- Source: arXiv:2604.01295
- Authors: Zhenyu Wang, Yang Liu, Yonghao Xu, Shuai Liu, Jianqiao Liu, Hao Chen, Zhe Wang, Yixuan Yuan
- Published: 2026-04-01
- Category: Brain Network Analysis, Graph Neural Networks, Neuroimaging
Core Methodology
Key Innovation
- Hierarchical Connectome Modeling: 多层次脑连接组建模
- Parallelized Computation: 并行化高效计算架构
- Spatiotemporal Integration: 时空特征联合建模
- Structure-Function Coupling: 结构-功能耦合分析
Architecture Overview
Input fMRI + DWI
↓
[Structural Connectome Extraction] → Adjacency Matrix
↓
[Functional Feature Extraction] → Node Features
↓
[Hierarchical Pooling] → Multi-scale Graph
↓
[Parallel Spatiotemporal Modules]
├─ Spatial Module (GNN)
├─ Temporal Module (RNN)
└─ Cross-Modal Fusion
↓
[Readout] → Prediction
Technical Components
1. Connectome Construction
- Structural: 从DWI提取纤维束追踪
- Functional: 从fMRI计算功能连接
- Multi-scale: 不同分辨率(ROI粒度)
2. Hierarchical Pooling
- Graph Coarsening: 图粗化降维
- Community Detection: 社区检测分组
- Attention-based: 注意力引导池化
3. Parallel Modules
- Spatial GNN: 图神经网络处理结构
- Temporal RNN: 循环网络处理时序
- Fusion Mechanism: 时空融合机制
Implementation Guide
Prerequisites
- Python 3.9+
- PyTorch Geometric (图神经网络)
- Nilearn (神经影像处理)
- Dipy (DWI处理)
- NetworkX (图分析)
Core Implementation
Step 1: Connectome Construction
import numpy as np
import networkx as nx
from nilearn import connectome, plotting
from dipy.tracking import streamline
class ConnectomeBuilder:
"""构建结构-功能耦合连接组"""
def __init__(self, atlas='schaefer400'):
self.atlas = atlas
self.n_rois = 400
def build_structural_connectome(self, tracts, atlas_labels):
"""
从纤维束追踪构建结构连接
Args:
tracts: 纤维束 [n_tracts, n_points, 3]
atlas_labels: ROI标签 [n_voxels]
Returns:
sc_matrix: 结构连接矩阵 [n_rois, n_rois]
"""
sc_matrix = np.zeros((self.n_rois, self.n_rois))
for tract in tracts:
start_label = atlas_labels[tuple(tract[0].astype(int))]
end_label = atlas_labels[tuple(tract[-1].astype(int))]
if start_label != end_label and start_label > 0 and end_label > 0:
sc_matrix[start_label-1, end_label-1] += 1
sc_matrix[end_label-, start_label-] +=
sc_matrix = sc_matrix / (sc_matrix.(axis=, keepdims=) + )
sc_matrix
():
fc_matrix = np.corrcoef(time_series)
fc_matrix = np.arctanh(np.clip(fc_matrix, -, ))
fc_matrix
():
method == :
alpha =
fused = alpha * sc_matrix + ( - alpha) * fc_matrix
method == :
fused = sc_matrix * np.(fc_matrix)
method == :
fused = .attention_fusion(sc_matrix, fc_matrix)
fused
Step 2: Hierarchical Graph Pooling
import torch
import torch.nn as nn
import torch_geometric.nn as geom_nn
class HierarchicalPooling(nn.Module):
"""层次图池化模块"""
def __init__(self, in_channels, hidden_channels, num_levels=3):
super().__init__()
self.num_levels = num_levels
self.convs = nn.ModuleList([
geom_nn.GCNConv(
in_channels if i == 0 else hidden_channels,
hidden_channels
)
for i in range(num_levels)
])
self.pools = nn.ModuleList([
geom_nn.DenseDiffPool(
hidden_channels,
max(10, in_channels // (2 ** (i+1))),
hidden_channels
)
for i in range(num_levels)
])
def forward(self, x, edge_index, batch):
"""
Args:
x: 节点特征 [N, F]
edge_index: 边索引 [2, E]
batch: 批次分配 [N]
Returns:
hierarchical_features: 各层级特征列表
assignments: 聚类分配
"""
hierarchical_features = []
assignments = []
current_x = x
current_edge_index = edge_index
current_batch = batch
for level in range(self.num_levels):
current_x = torch.relu(.convs[level](current_x, current_edge_index))
hierarchical_features.append(current_x)
level < .num_levels - :
x_dense, mask = geom_nn.to_dense_batch(current_x, current_batch)
adj_dense = geom_nn.to_dense_adj(current_edge_index, current_batch)
x_pooled, adj_pooled, link_loss, ent_loss = .pools[level](
x_dense, adj_dense, mask
)
assignments.append(.pools[level].assign_mat)
current_x = x_pooled.view(-, x_pooled.size(-))
current_edge_index = adj_pooled.nonzero().t()
current_batch = torch.arange(x_pooled.size(), device=x.device).repeat_interleave(x_pooled.size())
hierarchical_features, assignments
Step 3: Parallel Spatiotemporal Module
class ParallelSpatiotemporalModule(nn.Module):
"""并行时空处理模块"""
def __init__(self, node_dim, hidden_dim, time_steps=120):
super().__init__()
self.time_steps = time_steps
self.spatial_gnn = geom_nn.GCNConv(node_dim, hidden_dim)
self.temporal_rnn = nn.GRU(
node_dim, hidden_dim,
num_layers=2, batch_first=True
)
self.fusion_gate = nn.Sequential(
nn.Linear(hidden_dim * 2, hidden_dim),
nn.Sigmoid()
)
self.cross_attention = nn.MultiheadAttention(
hidden_dim, num_heads=8, batch_first=True
)
def forward(self, x_seq, edge_index):
"""
Args:
x_seq: 时序节点特征 [B, T, N, F]
edge_index: 图边索引 [2, E]
Returns:
output: 时空特征 [B, N, H]
"""
B, T, N, F = x_seq.shape
spatial_features = []
for t in range(T):
x_t = x_seq[:, t, :, :].reshape(B * N, F)
h_spatial = self.spatial_gnn(x_t, edge_index)
h_spatial = torch.relu(h_spatial)
spatial_features.append(h_spatial.view(B, N, -1))
spatial_features = torch.stack(spatial_features, dim=1)
temporal_features = []
n (N):
x_node = x_seq[:, :, n, :]
h_temporal, _ = .temporal_rnn(x_node)
temporal_features.append(h_temporal[:, -, :])
temporal_features = torch.stack(temporal_features, dim=)
spatial_agg = spatial_features.mean(dim=)
gate = .fusion_gate(torch.cat([spatial_agg, temporal_features], dim=-))
fused = gate * spatial_agg + ( - gate) * temporal_features
attn_out, _ = .cross_attention(fused, fused, fused)
output = fused + attn_out
output
Step 4: PHC Complete Model
class PHCModel(nn.Module):
"""Parallelized Hierarchical Connectome模型"""
def __init__(self,
n_rois=400,
node_dim=1,
hidden_dim=128,
num_classes=2,
num_levels=3,
time_steps=120):
super().__init__()
self.hierarchical_pooling = HierarchicalPooling(
node_dim, hidden_dim, num_levels
)
self.spatiotemporal_modules = nn.ModuleList([
ParallelSpatiotemporalModule(
hidden_dim, hidden_dim, time_steps
)
for _ in range(num_levels)
])
self.level_fusion = nn.Sequential(
nn.Linear(hidden_dim * num_levels, hidden_dim),
nn.ReLU(),
nn.Dropout(0.3)
)
self.readout = nn.Sequential(
nn.Linear(hidden_dim, hidden_dim // 2),
nn.ReLU(),
nn.Linear(hidden_dim // 2, num_classes)
)
def forward(self, x_seq, edge_index, batch):
"""
Args:
x_seq: 时序fMRI [B, T, N, F]
edge_index: 边索引
batch: 批次
Returns:
logits: 分类logits
"""
B, T, N, F = x_seq.shape
x_init = x_seq[:, 0, :, :]
x_init = x_init.reshape(B * N, F)
hier_features, assignments = .hierarchical_pooling(
x_init, edge_index, batch
)
level_outputs = []
level, (feat, st_module) (
(hier_features, .spatiotemporal_modules)
):
level == :
x_level = x_seq
:
x_level = .aggregate_by_assignment(
x_seq, assignments[level-]
)
level_out = st_module(x_level, edge_index)
level_outputs.append(level_out.mean(dim=))
fused = torch.cat(level_outputs, dim=-)
fused = .level_fusion(fused)
.readout(fused)
():
B, T, N, F = x_seq.shape
N_clusters = assignment.size()
assignment = assignment.unsqueeze().unsqueeze()
x_expanded = x_seq.unsqueeze(-)
aggregated = (x_expanded * assignment).(dim=)
aggregated = aggregated.permute(, , , )
aggregated
Training Configuration
data:
dataset: UKBiobank
n_subjects: 10000
n_rois: 400
time_points: 120
tr: 0.72s
model:
hidden_dim: 128
num_levels: 3
num_classes: 2
training:
batch_size: 8
learning_rate: 1e-4
epochs: 100
optimizer: Adam
scheduler: ReduceLROnPlateau
augmentation:
time_shift: true
gaussian_noise: 0.01
dropout_nodes: 0.1
Performance Metrics
Brain Network Analysis
| Task | Metric | Value |
|---|
| Alzheimer's Prediction | AUC | 0.92 |
| Autism Classification | Accuracy | 87.3% |
| Age Prediction | MAE | 2.1 years |
Efficiency
| Setup | Time | Memory |
|---|
| Single GPU | 45 min/epoch | 8 GB |
| 4-GPU Parallel | 12 min/epoch | 32 GB |
| CPU Only | 3 hours/epoch | 4 GB |
Applications
Brain Disease Prediction
- Alzheimer's Disease: 早期诊断
- Parkinson's Disease: 运动障碍预测
- Depression: 抑郁症识别
- Autism: 自闭症谱系障碍
Brain Network Analysis
- Community Structure: 社区结构检测
- Hub Identification: 枢纽节点识别
- Dynamic Connectivity: 动态连接分析
Neuroscience Research
- Developmental Studies: 脑发育研究
- Aging: 脑老化建模
- Plasticity: 神经可塑性
Pitfalls
Common Issues
-
Registration Errors: 配准误差影响连接
-
Motion Artifacts: 头动伪影
- Solution: 严格头动阈值 + scrubbing
-
Small Sample Size: 小样本问题
Limitations
- 依赖atlas分割质量
- 结构-功能耦合假设可能过于简化
- 计算资源需求高
Related Skills
- functional-connectivity-graph-neural-networks
- brain-graph-neural
- hyperbolic-gcn-brain-network
- adaptive-spiking-neuron-multimodal
References
- Wang et al. (2026). Parallelized Hierarchical Connectome: A Spatiotemporal Recurrent Framework for Brain Network Analysis. arXiv:2604.01295.
- Ying et al. (2018). Hierarchical Graph Representation Learning with Differentiable Pooling. NeurIPS.
- Kawahara et al. (2017). BrainNetCNN: Convolutional Neural Networks for Brain Networks. NeuroImage.
Citation
@article{wang2026parallelized,
title={Parallelized Hierarchical Connectome: A Spatiotemporal Recurrent Framework for Brain Network Analysis},
author={Wang, Zhenyu and Liu, Yang and Xu, Yonghao and Liu, Shuai and Liu, Jianqiao and Chen, Hao and Wang, Zhe and Yuan, Yixuan},
journal={arXiv preprint arXiv:2604.01295},
year={2026}
}