跑训练:自监督修复缺失楔形
用公开工具,把含噪、缺楔形的断层图交给一个无需真值的网络去修复 —— 准备、训练、预测,一步步跑通
到这一步,你手上已经有了一个三维体(.mrc):重构出来的断层图。但它有两个老毛病——噪声大(剂量低,散粒噪声把弱信号埋住)、缺失楔形(只能倾到 ±60°,傅里叶空间缺了一块,结构沿 z 被拉长、糊掉,见 缺失楔形)。这一页教你跑一个自监督网络去修这两件事:输入是你这张含噪、缺楔形的体,输出是一张去噪、更各向同性的修正体。关键词是”自监督”——全程不需要任何干净的真值,网络只从你已有的脏数据里学。
目标说清楚:把”含噪 + 缺楔形的观测体”映射成”更接近真实结构的修正体”。没有干净参考可学,靠的是数据自带的两种约束——旋转 / 缺楔一致性,以及 even/odd 拆分出来的独立噪声配对。下面先认工具,再走一遍通用的”准备 → 训练 → 预测”流程。
能跑的公开工具
这些都是公开、有文档的标准工具,先按名字记住各自擅长什么:
- IsoNet —— 主攻缺失楔形。它的思路是:真实结构在各个方向应该长得差不多(统计上各向同性),而缺失楔形只破坏某些方向;于是把体旋转一下、人为再挖一个楔形,逼网络从”残缺的旋转视角”里恢复出”完整的另一视角”,靠这种旋转 + 缺楔一致性自监督地补回缺的那块,同时去噪。
- cryoCARE —— 主攻去噪,走 Noise2Noise 路线。它要的就是上一页那对 even/odd 半图:拿一半当输入、另一半当目标,因为两半信号相同、噪声独立,网络只能学到共享的干净结构(推导见 even/odd 那页)。
- DeepDeWedge —— 把上面两件事合到一起:既用 even/odd 的独立噪声配对去噪,又在训练里加入缺楔一致性去补楔形。等于 cryoCARE 的去噪 + IsoNet 的补楔形。
三者准备数据的方式略有不同(IsoNet 从单张体 + 旋转,cryoCARE / DeepDeWedge 从 even/odd 对),但**“准备 → 训练 → 预测”这条主干完全一样**。下面讲的就是这条主干。
先问自己一句:你手上有没有 even/odd 那对独立半图?有 → cryoCARE / DeepDeWedge 都能用,去噪最干净。只有单张体、最在意的是缺失楔形 → 从 IsoNet 起步。两条路下面的步骤几乎重叠。
第 1 步:准备元数据
做什么。 给工具一份清单,列出要处理哪些断层图、以及最关键的像素尺寸 (pixel size, 单位 Å/pixel)。通常是一个 star 文件(见 数据处理 里讲的元数据契约),逐行登记每个体的路径、像素尺寸,按需还有欠焦量等。
为什么。 像素尺寸决定了”频率↔分辨率”的换算,也决定子断层取多大才合理。这一步填错——尤其像素尺寸——后面全跑偏却不报错,是最常见的坑。
# 命令形状(不是真实 flag):生成一个列出体与像素尺寸的 star 文件
<tool> prepare_star --tomos tomo1.mrc tomo2.mrc --pixel-size <Å/px> --out tomograms.star
第 2 步:CTF 反卷积,提对比
做什么。 在训练前对断层图做一次 CTF 反卷积 (deconvolution),把低频对比提上来(IsoNet 自带这个步骤;cryoCARE / DeepDeWedge 也建议在反卷积过的体上训练)。原理见 数据处理:反卷积不增加新信息,只是把已有频率重新加权,让膜、细胞器这些大结构跳出来。
为什么。 对比度上来后,网络(和你肉眼)更容易抓住真实结构,而不是在一片发灰里乱学。
这里复述一条铁律(数据处理 已讲过):训练域和推理域必须一致。如果你在反卷积过的体上训练,预测时也只能喂反卷积过的体;剂量加权、滤波、像素尺寸同理。反卷积改变了数据的频谱分布,模型学到的是那个分布下的统计规律——换一种预处理,等于把输入换到另一个域,结果会悄悄变差却不报错。所以从这一步起,记住你这条数据链做了哪些预处理,预测时原样复刻。
第 3 步:生成采样掩膜
做什么。 给体配一张掩膜 (mask),标出”哪里有真东西”(细胞、膜、颗粒)、哪里是空冰。训练样本只从掩膜内取。
为什么。 一张断层图里很大一片是空冰——纯噪声、没有结构。若让网络从这些区域取样,它会把训练预算浪费在”学噪声该长什么样”上。把取样限制在有信号的区域,网络才把容量用在真正要修的结构上。
第 4 步:抽取子断层(小立方块)
做什么。 从掩膜区域里切出许多固定大小的小立方块 (subtomograms / patches),比如边长几十体素,作为训练样本。
为什么。 整张体太大,喂不进显存,也不需要——网络要学的是局部的”脏→干净”映射,小块足够,还能切出成千上万个样本喂饱训练。这里 even/odd 路线会成对地切:同一位置,一块取自 even 半图、一块取自 odd 半图,构成 (输入, 目标) 对。
# 命令形状:在掩膜内抽取固定大小的子断层
<tool> extract --star tomograms.star --mask mask.mrc --cube-size <N> --out subtomos/
第 5 步:自监督训练
做什么。 用上面切好的样本训练网络。它学的是条件分布 ——
- IsoNet 路线:从旋转 + 缺楔一致性里学(“换个方向看应该自洽,缺的那块按其它方向的统计补回来”);
- cryoCARE / DeepDeWedge 路线:从 even/odd 独立噪声配对里学(一半预测另一半,最优解是共享的干净结构)。
两条路殊途同归:网络最终输出的,是把独立噪声平均掉、把缺楔形按学到的先验补上之后的估计干净结构。
为什么需要重视硬件。 这一步必须有支持 CUDA 的 NVIDIA 显卡,而且要跑数小时(取决于体的数量、子断层数、网络大小)。这不是笔记本能干的活——拿 CPU 或集成显卡跑,要么直接报错、要么慢到没法用。把它放到带 GPU 的机器上。
# 命令形状:自监督训练,损失会逐步下降
<tool> train --data subtomos/ --epochs <N> --gpu 0 --out model/
训练时盯三件事:(1) 训练损失要往下走——一直平、或者爆掉,多半是数据准备出了问题(掩膜空了、像素尺寸错了、even/odd 配错位)。(2) 训练能跑完、产出一个模型权重文件。(3) 心里记牢这个模型是在哪种预处理的数据上训的,下一步要对上。
第 6 步:预测(应用到整张体)
做什么。 把训好的模型应用到整张断层图上,得到一张去噪、更各向同性的修正体 .mrc。预测时网络在整个体上滑窗、逐块修复再拼回。
为什么。 训练只在小块上学映射,真正要的是整张体被修好。这一步把学到的映射铺满全图。
# 命令形状:把训好的模型应用到整张体,输出修正后的 .mrc
<tool> predict --model model/ --tomo tomo1.mrc --out tomo1_corrected.mrc
- 预览一张切片:在 3dmod 或 ChimeraX 里并排打开原体和修正体——膜该更连、噪声该更少、沿 z 的拉长该减轻。
- 训练和预测喂同一种数据:第 2 步那条铁律在这里收口。模型在反卷积过的体上训,就只喂反卷积过的体去预测;像素尺寸也要一致。
- 别过度相信补出来的细节:缺失楔形里的信息是网络推断出来的,不是测到的。当作有根据的猜测看,关键结论还要回到原始数据或独立证据上验。
同一条形状,更进一步:本站的方法
上面的公开工具,骨架都是 准备 → 训练 → 预测。本站研究的两套方法把这条骨架往前推,但形状不变,你已经会跑了:
- CryoGEN —— 给”什么是合理的干净结构”配一个显式的能量先验,再用最优传输 (optimal transport) 把退化观测推回最可能的那个干净体。仍然是自监督、无需真值的点估计:每张退化体对应一个修正体。
- CryoWGEN —— 在传输代价里加一项熵,得到一个后验分布而不是单点:对同一张退化体给出一族可能的重构,从而把”缺失楔形里到底是什么”的不确定性显式量化出来。
换句话说:IsoNet / cryoCARE / DeepDeWedge 让你把这条管线先跑通;CryoGEN / CryoWGEN 在同样的 prepare→train→predict 形状上,换更强的先验、并给出不确定性。先把公开工具这一遍跑顺,再去读方法页,会顺很多。
跑完拿到修正体之后,下一步就是把它看出来、做分割——见 IMOD 与 ChimeraX。
上一步:even/odd 拆分 · 下一步:IMOD 与 ChimeraX 可视化