把空间转录组数据变成高清“组织地图”——SpaSEG 全流程白话指南


1. 为什么要关心空间转录组?

传统单细胞测序把组织“打碎”成单细胞悬液,好处是分辨率高,坏处是丢失了细胞原来的邻里关系。
空间转录组(Spatially Resolved Transcriptomics, SRT)反其道而行:让 RNA 在组织切片上“原位说话”,既能看基因表达,又能看表达发生在哪儿。

但数据量一上来,问题就来了:

  • 50 万个点、2 万个基因,电脑先“喊卡”。
  • 不同平台(10x Visium、Stereo-seq、MERFISH…)格式不统一,算法换平台就失灵。
  • 想连续看几张相邻切片,对齐步骤能把人逼疯。

SpaSEG 就是 BGI 团队给出的“一站式”答案。


2. SpaSEG 是什么?一句话解释

它是一个 无监督深度学习框架,把空间转录组数据当成一张多通道“图片”,用卷积神经网络(CNN)完成四件事:

  1. 划分空间域(spatial domain identification)
  2. 对齐多张切片(multi-section integration)
  3. 找到空间差异基因(SVG detection)
  4. 推断细胞-细胞相互作用(CCI inference)

3. 核心思路:把“点”变成“像素”

原始数据 SpaSEG 里的对应
每个点的基因表达向量 像素的 RGB 通道(几十维主成分)
点的 x, y 坐标 像素在图像中的行列号
划分空间域 图像语义分割

这样做的好处:

  • CNN 天生擅长处理网格数据,速度比图网络快。
  • 边缘强度正则化(edge-strength loss)让相邻像素尽量保持连续,避免把同一个组织区域拆得七零八落。

4. 两步训练法:先预习,再精修

阶段 目标 损失函数 作用
预习 400 epoch 让网络学会“自编码” 均方误差 MSE 得到合理的初始参数
精修 ≤2000 epoch 分域同时保边缘 α × 交叉熵 + β × 边缘强度 产生清晰边界

论文推荐超参数:

  • 单张切片:α=0.4,β=0.7
  • 多张切片整合:α=0.2,β=0.4

5. 安装与 5 行代码上手

SpaSEG 已集成进 BGI 的 Stereopy 工具包。
环境:Python ≥3.9,PyTorch ≥1.12,CUDA 可用更佳。

pip install stereopy

Jupyter Notebook 最小示例:

import stereopy as st

# 1. 读入 10x Visium 数据
data = st.io.read_10x_h5('dlpfc_151673.h5')

# 2. 预处理:归一化、PCA、z-score
st.pp.normalize_total(data)
st.pp.pca(data, n_comps=50)

# 3. 运行 SpaSEG,指定想要的空间域数量
st.tl.spa_seg(data, n_domains=7, alpha=0.4, beta=0.7)

# 4. 可视化
st.pl.domain(data, color='spa_seg')

# 5. 导出差异基因
svg = st.tl.spatial_variable_genes(data, domain_key='spa_seg')

6. 场景实战:4 个真实数据集结果速览

数据集 技术 点数 SpaSEG 用时 关键发现
人 DLPFC 10x Visium ~3,000 <1 min 6 层皮层 + 白质,ARI=0.554
小鼠全脑 Stereo-seq Bin20 526,716 8 min 26 倍快于 SpaGCN,内存占用 <16 GB
小鼠胚胎 seqFISH ~6,400 30 s 前/中/后脑区域精准分离
乳腺癌 IDC 10x Visium ~4,000 45 s 区分侵袭癌、原位癌与正常区

7. 一张图看懂输出结果

SpaSEG 空间域示意图
图:人脑 DLPFC 第 151673 切片。左为人工标注,右为 SpaSEG 自动划分,颜色对应不同层。


8. 常见问题 FAQ

Q1:我只有 8 GB 显存,能跑百万级点吗?
可以。SpaSEG 的核心是 3×3 小卷积,显存占用随点数线性增长。526 k 点 50 维 PCA 在 16 GB GPU 上峰值显存约 9 GB;8 GB 时可把 batch_size 调小或改用 CPU。

Q2:怎么知道该分多少个域?

  • 已知组织:按解剖区域设一个略大的数字,再让算法合并(后处理 100 epoch 自动完成)。
  • 未知组织:用 elbow 方法观察 NMI-versus-k 曲线拐点。

Q3:Stereo-seq 的坐标不是矩形网格怎么办?
论文给出缩放因子 φ 把坐标归一化到 0-1,再填 0 补成矩形张量,误差可忽略。


9. 进阶玩法 1:多张切片一键 3D 对齐

把相邻切片编号作为 batch 维度,SpaSEG 会在训练时同时学习跨切片对应关系,无需额外配准算法。

# 假设 list_data 是 4 张相邻切片
st.tl.spa_seg(list_data, n_domains=7, alpha=0.2, beta=0.4,
              batch_key='section_id')

结果:GCL、SEZ 等结构在 3D 重建中连续无错位,F1_LISI 提升 20-30%。


10. 进阶玩法 2:找“区域特异基因”

SpaSEG 在划分空间域后,用 Wilcoxon 检验 + 4 条过滤规则筛出 SVG:

  • log2FC > 1.5 且区域内表达比例 >75%
  • 区域间差异倍数或 CV 满足额外阈值

示例输出(小鼠胚胎):

基因 富集区域 已知功能
Nnat 脑区 神经发育
Krt10 表皮 角质化
Ibsp 软骨 成骨分化

11. 进阶玩法 3:推断细胞“聊天”地图

流程:

  1. 用 SpaSEG 得空间域。
  2. 用 cell2location 把单细胞图谱映射到每个点多细胞组分。
  3. 用 Squidpy 取配体-受体对,计算邻域平均共表达 × 细胞熵 = LR score。
  4. 验证:计算 LR score 与下游基因表达的 Spearman 相关性。

在乳腺癌示例中,CXCL12-CXCR4 与 CD4+ T 细胞招募显著正相关(SCC=0.78)。


12. 局限与下一步

  • 尚未直接利用 H&E 图像,未来版本计划融合多模态。
  • 对高度稀疏的基因矩阵仍依赖 PCA 去噪;更激进的降噪策略在探索中。

13. 总结:什么时候选 SpaSEG?

需求 建议
手里有 Stereo-seq 十万级点 直接上 SpaSEG,速度与精度兼得
想整合多张 10x Visium 用 SpaSEG 的多切片模式,省去 PASTE 对齐
需要临床可解释性 先做 SpaSEG 分域,再配 cell2location 看细胞类型

一句话:把复杂空间组学数据变成看得懂的“高清组织地图”,SpaSEG 是目前门槛最低、通用性最强的方案之一。


附录:一键直达资源

  • 论文原文: https://genomebiology.biomedcentral.com/articles/10.1186/s13059-025-03697-1
  • 文档与示例: https://stereopy.readthedocs.io/en/v1.6.0/Tutorials(Multi-sample)/SpaSEG.html