信息速览
秀丽隐杆线虫是唯一一种细胞数量少到可以逐个点清的动物。它的成体总共九百来个细胞,其中神经元三百零二个、其余多为体细胞;而这一切的起点是一个受精卵。从一枚受精卵到一个能在培养皿里爬行的个体,中间要经历约五百多次精确到个位的细胞分裂,每一次分裂产生的两个子细胞叫什么、在什么位置、活多久、走向什么命运,都有据可查。这份记录叫做细胞谱系,它在 1983 年由 Sulston 等人用显微镜一只一只盯出来,是全生物学界最早、也最完整的一份发育史。
但盯着看是有极限的。一个人可以在胚胎还只有几十个细胞时逐帧记录,等到细胞数上百、核直径缩到两三个微米、每小时还要分裂几十次的时候,肉眼就跟不上了。于是从 2000 年代初开始,有人尝试把这件工作交给机器:用组蛋白-GFP 把细胞核染亮,用共聚焦显微镜每隔一分钟扫一遍整个胚胎,剩下的交给软件。Fluo-N3DH-CE 就是这条技术路线留下的一段公开影像——秀丽隐杆线虫胚胎的三维延时序列,四条,来自华盛顿大学 Waterston 实验室,被 Cell Tracking Challenge 收纳为三维追踪赛道的给定考题。
一屏速览见下表。
| 项目 | 内容 |
|---|---|
| 规范名称 | Fluo-N3DH-CE(Fluo = 荧光,N = 细胞核,3D = 三维,H = 高密度,CE = C. elegans) |
| 提供方 | Waterston Lab,华盛顿大学基因组科学系 |
| 基准维护方 | Cell Tracking Challenge(马萨里克大学 CBIA) |
| 已公开序列数 | 4(训练 2 + 测试 2) |
| 每条序列帧数 | 训练两条各 250 帧;测试两条分别为 190 帧与 140 帧 |
| 单帧堆栈尺寸 | 训练序列一 708×512×35,序列二 712×512×31(宽×高×层数) |
| 相邻帧间隔 | 训练序列一分钟一帧,测试序列 1.5 分钟一帧 |
| 体素尺寸 | 0.09×0.09×1.0 微米(xy 与 z 各向异性约 11 倍) |
| 位深与格式 | 8-bit TIFF,逐时间点一组 z 层文件 |
| 追踪标注粒度 | 每个细胞核一个标记点 + 一个数值 track_id + 父子关系 |
| 谱系名 | 无(不含 ABala 这类 Sulston 式字符串) |
| 金标准追踪标注 | 覆盖全部细胞实例(针对真实数据的官方口径) |
| 分割标注 | 金标准仅覆盖极少数细胞;另有银标准分割(训练集) |
| 下载体积 | 训练包 3.1 GB,测试包 1.7 GB |
| 许可 | 研究免费;非 CTC 用途、商业用途与克隆再分发须获许可 |
| 站内同类资源 | Cell Tracking Challenge 全貌 |
§1 数据集速览:它到底是什么
1.1 一句话定位
Fluo-N3DH-CE 是一组「把一枚胚胎的每一次分裂都编成号」的三维影像考题:四条序列,每条两百多帧,每一帧是一个完整的三维体积,体积里每一个细胞核都被打了标记、编了号,并且知道自己上一帧属于谁、分裂后变成了哪两个。
它要回答的问题不是「胚胎长什么样」,而是:
给你一段只有亮点的三维视频,你能不能把每一个点在时间轴上一路跟下去,并且在它一分为二的那一刻认出来?
这件事在机器视觉里叫多目标追踪,难点在于目标会增殖。常规追踪里,物体数量恒定,最多有进出画面;胚胎里,细胞数量单调递增,每隔几帧就有若干个细胞分裂成两个,新出现的两个目标与旧目标没有外观差异,只能靠位置连续性、体积减半和分裂的近距关系来判定。荧光还会随分裂衰减,核越分越小,背景噪声相对越来越强。
1.2 为什么它不是「又一个显微图像数据集」
库内已有的细胞影像资源大多在做「一张图里有哪些细胞、边界在哪」这件事,也就是实例分割。Fluo-N3DH-CE 把它们推到了时间轴上,并且把问题切成三块互相咬合的:
| 任务 | 输入 | 输出 | 评分指标 |
|---|---|---|---|
| 检测 | 单帧三维体积 | 每个细胞核的中心点 | DET |
| 分割 | 单帧三维体积 | 每个细胞核的体素区域 | SEG |
| 追踪 | 整条序列 | 每帧标记 + 跨帧链接 + 分裂事件 | TRA |
三个任务共用同一批影像,却要三份不同的参考标注,而这三份标注的「真值等级」并不一致:追踪标注是人类专家做的(金标准),覆盖全部细胞但只给点不给区域;分割标注只覆盖极少数细胞,却给的是区域。这种「覆盖完整则精度差,精度好则覆盖差」的先天缝隙,是这套数据最容易被误读的地方,也是 §4 要展开的核心。
1.3 决策卡:你的处境与它能帮什么
左列是使用者的处境,不是数据集的功能清单。
| 你的处境 | Fluo-N3DH-CE 能帮你什么 |
|---|---|
| 在写细胞追踪算法,需要一个「有分裂事件」的硬骨头测试集 | 4 条序列全部含大量分裂事件,官方评测脚本按月打分,可与历史榜单直接比 |
| 想做三维各向异性体素的分割,需要先验证前处理是否失真 | z 向 1.0 微米对 xy 向 0.09 微米,一比十一,任何各向同性处理都会被这套数据的分数立刻暴露 |
| 想复现 2006 年前后那批自动谱系追踪工作的输入长什么样 | 这是 StarryNite/AceTree 路线在公开基准里的影像侧剪影,影像风格与原论文一致 |
| 需要一个「细胞会增殖」的多目标追踪练手集 | 4 条序列体积不大,训练包 3.1 GB,单卡机器可以完整跑完 |
| 想研究胚胎发育的谱系规律 | 不合适。请移步带谱系名的完整胚胎数据集,见 §1.4 |
1.4 不适合谁
如果你的需求是「拿到一份像家谱一样、每个细胞都有名字的胚胎发育树」,那这套序列给不了你。它确实有谱系,但谱系是用整数编号表达的:1 号细胞在某帧死后分裂出 17 号和 18 号,17 号又在某帧分裂出 43 号和 44 号。你能重建出一棵完整的二叉树的形状,却无法从数据本身读出「43 号是 ABala」——因为谱系名要靠外部映射表,而这套数据不提供。
如果你的需求是「统计线虫胚胎细胞分裂的时间分布」,它也给不了你。四条序列、两个实验室条件、其中两条还没有标注,这个样本量做不了群体统计。真正做这件事的是另一类资源:同一实验室对上百枚胚胎做批量追踪后汇总的分裂事件表,那是纯表格而非影像。
如果你的需求是「覆盖整个胚胎发育到孵化」,同样给不了。每条序列只有两百多帧,按一分钟一帧算约四小时,覆盖的是从早期卵裂到大约数百细胞的中间段,不是全流程。
只要你的目标是算法而不是生物学规律,这套数据就是对的;反之,请把它们当成路标而不是终点。
1.5 名字怎么读
名字本身是一张规格表,拆开看就知道它属不属于你要找的东西。
| 片段 | 含义 | 判断价值 |
|---|---|---|
| Fluo | 荧光显微,细胞核被打亮,背景暗 | 与明场/相差序列的处理路径完全不同 |
| N | 目标是细胞核(nuclei),不是整个细胞 | 只给核边界,不给膜边界 |
| 3D | 每个时间点是一个三维体积 | 内存与算力需求比二维高一个量级 |
| H | 高密度,目标多且相互贴近 | 分割难度显著高于稀疏场景 |
| CE | 物种秀丽隐杆线虫 | 与果蝇、斑马鱼序列可直接对照 |
同类命名里还有 Fluo-N3DL-DRO(果蝇,光片,低密度),以及 Fluo-N3DH-CHO(仓鼠卵巢细胞,高密度)。命名规则是一套可组合的语法,不是随意的代号,读懂了就能在官网一长串列表里快速筛掉不相关项。
§2 数据构成与规格
2.1 完整统计
四条序列的规格并不完全一致,差异本身就是信息:训练集用一分钟间隔采集,测试集用 1.5 分钟间隔采集。
| 序列 | 归属 | 宽×高 | z 层数 | 帧数 | 帧间隔 | 标注 |
|---|---|---|---|---|---|---|
| 01 | 训练 | 708×512 | 35 | 250 | 1 分钟 | 金标准追踪 + 金标准分割 + 银标准分割 |
| 02 | 训练 | 712×512 | 31 | 250 | 1 分钟 | 金标准追踪 + 金标准分割 + 银标准分割 |
| 01 | 测试 | 712×512 | 31 | 190 | 1.5 分钟 | 不公开 |
| 02 | 测试 | 712×512 | 31 | 140 | 1.5 分钟 | 不公开 |
单帧体素数在两者之间相差约一成,总采集时长则相差更多:训练序列 250 帧 × 1 分钟约 4.2 小时;测试序列一 190 帧 × 1.5 分钟约 4.8 小时,测试序列二 140 帧 × 1.5 分钟约 3.5 小时。三条时长接近、帧率不同,这个设计让算法无法靠「帧数即阶段」这种捷径蒙混。
2.2 采集条件
同一排规格数字背后,是一整套固定下来的物理条件。这些条件决定了影像的纹理,也决定了什么样的算法会失败。
| 条件 | 取值 | 它带来的后果 |
|---|---|---|
| 显微镜平台 | 蔡司 LSM 510 Meta 点扫描共聚焦 | 逐点扫描成像,帧率受限于扫描速度 |
| 物镜 | 63 倍油镜,数值孔径 1.4 | 横向分辨率高,但景深浅,必须逐层扫 |
| 横向像素 | 0.09 微米 | 单个核直径约三十个像素,细节充足 |
| z 向步进 | 1.0 微米 | 一个核只占三到四层,纵向细节严重不足 |
| 层数 | 三十一层至三十五层 | 覆盖约三十余微米的深度 |
| 通道 | 单通道荧光(核标记) | 没有膜通道,无法做细胞级分割 |
| 位深 | 8-bit | 动态范围窄,亮核易饱和 |
| 时间步长 | 一分钟或 1.5 分钟 | 快于此间隔的分裂中间态不可见 |
把这张表和 §3 的采样几何对照看,会发现两条约束是叠加的:物镜数值孔径高导致景深浅,所以必须多层扫描;层数有限导致纵向覆盖不足,所以贴顶贴底的核会被切掉。这些条件没有一个可以在后处理阶段修复,只能通过算法设计去容忍。
单通道这一点常被忽略。它意味着这套数据只能产出「核的谱系」,不能产出「细胞的谱系」。核与细胞是两个不同的对象:一个细胞在分裂之前核已经完成分裂,此后两个核共处一个细胞质内数十秒,此时核计数比细胞计数多一个。做细胞级分析必须补膜通道,而补膜通道需要另一次双色采集,这套序列没有。
2.3 目录结构与文件形态
官方压缩包解压后是固定层级,训练与测试两包只在有无标注目录上不同。
Fluo-N3DH-CE/
├── 01/ #-- 原始影像,逐时间点一个 TIFF
│ ├── t000.tif #-- 第 0 帧,一个 708x512x35 的 8-bit 体数据
│ ├── t001.tif
│ └── ... #-- 训练序列共 250 个
├── 01_GT/ #-- 金标准(仅训练集有)
│ ├── SEG/ #-- 分割标注:完整区域,但只覆盖极少数细胞
│ │ ├── man_seg000.tif
│ │ └── ...
│ └── TRA/ #-- 追踪标注:全部细胞,但只是标记点
│ ├── man_track000.tif #-- 每帧一张,像素值 = 该细胞在本帧的 track_id
│ ├── man_track001.tif
│ └── man_track.txt #-- 一张表,一行一条轨迹
├── 01_ST/ #-- 银标准分割(多数算法投票得出的多数意见)
│ └── SEG/
├── 02/ #-- 第二条训练序列,结构同上
├── 02_GT/
└── 02_ST/
一个细节值得单独指出:影像是一个时间点一个 TIFF 文件,每个文件内部是一个三维数组,而不是「一层一个文件」。这与很多人对显微数据的默认印象相反——共聚焦显微镜逐层扫描,直觉上应该是一层一张。打包者把同一时间点的所有层压进一个文件,是为了让「一帧 = 一个体数据」这个语义在文件系统层面就成立。
2.4 一条轨迹逐行解剖
追踪标注的核心是 man_track.txt,四列,无表头,每行描述一个细胞从出现到消失的完整生命。
#-- 从训练序列 01 的追踪标注里看前几行
head -5 01_GT/TRA/man_track.txt
#-- 输出形如:
#-- 1 0 218 0 <- 谱系根:第 0 帧出生,第 218 帧消失,无父
#-- 2 0 103 0 <- 另一条根,早期就终结
#-- 3 0 30 0
#-- 4 31 141 3 <- 父是 3:第 3 号在第 30 帧结束后分裂成 4 号与 5 号
#-- 5 31 145 3
四列的含义分别是:轨迹编号、出生帧、消失帧、父轨迹编号。
前三列是位置,第四列是拓扑。有了第四列,一张扁平的轨迹表立刻变成一棵树:编号为 0 的是根(极体或残留),父列为 0 表示非分裂产生的起点。任何一条「同一父亲、同一出生帧」的两行,就是一次分裂的两个产物。整棵树不需要额外文件,从四列数字里就能重建。
#-- 从 man_track.txt 重建分裂树并统计,无需影像即可运行
from collections import defaultdict
rows = []
with open("01_GT/TRA/man_track.txt") as fh:
for line in fh:
tid, t_birth, t_end, parent = (int(x) for x in line.split())
rows.append((tid, t_birth, t_end, parent))
by_tid = {r[0]: r for r in rows}
children = defaultdict(list)
for tid, _, _, parent in rows:
if parent != 0:
children[parent].append(tid)
#-- 每个父轨迹应当恰好有两个子(偶有多于两个,属于终止+重播的修正)
splits = [(p, sorted(c)) for p, c in children.items() if len(c) == 2]
roots = [r[0] for r in rows if r[3] == 0]
print(f"轨迹 {len(rows)} 条,分裂 {len(splits)} 次,根 {len(roots)} 个")
print(f"最长存活 {max(r[2] - r[1] for r in rows)} 帧")
这段代码是整个数据集最实用的一段:不加载一个体素,就能拿到分裂次数、树深、各分支寿命。多数论文里的「谱系拓扑分析」其实就是这几行。
2.5 与同类资源横向比较
| 资源 | 形态 | 谱系粒度 | 覆盖范围 | 许可 |
|---|---|---|---|---|
| Fluo-N3DH-CE | 4 条三维延时序列 | 数值 track_id,无名字 | 每条约 4 小时,数百细胞 | 研究免费,其他用途须许可 |
| Waterston 系完整胚胎谱系 | 逐核位置表 + 影像 | 有 Sulston 名,可到数百细胞 | 单胚胎全流程 | 分散在各实验室站点与附录 |
| 单细胞分辨率基因表达图谱 | 表达矩阵 | 与谱系名对齐 | 数百个细胞 | 随论文 |
| 胚胎形态学图谱(4D 分割) | 分割后的细胞表面 | 与谱系名对齐 | 全胚胎 | 随论文与站点 |
| 全脑钙成像(成年) | 逐帧神经元活动 | 神经元名 | 头部神经节 | 见对应词条 |
读法是一句话:要算法,用这一套;要生物学命名,用另外几种。 这一条界线在 §6 还会再划一次,因为它是误用率最高的一处。
§3 第一层:影像侧——它拍下了什么,没拍下什么
3.1 这一层回答的问题
做视觉算法的人第一个问题永远是「图像长什么样」。这一层不谈谱系,只谈原始数据——因为超过一半的失败案例不是算法不够强,而是对成像先验的判断就错了。
3.2 采样几何:为什么各向异性是关键
横向像素 0.09 微米,z 向步进 1.0 微米,比例一比十一。这意味着一个球形细胞核在这样的采样下会变成一个被压扁的椭球:xy 平面上看起来直径三十来个像素,沿 z 只有三到四层。三维各向同性核卷积(比如常见的 3×3×3)会把 z 向的邻近层混在一起,等于对每一层的邻层做了大幅模糊。
处理路径因此分两派:
| 路线 | 做法 | 代价 | 何时选它 |
|---|---|---|---|
| 各向异性卷积 | 用 3×3×1 之类的非对称核 | 需改动网络结构 | z 层数少、细胞核扁,这是最忠实的一派 |
| 重采样到各向同性 | z 向插值放大约十一倍 | 体素数暴涨,内存压力大 | 已有成熟的三维网络且不想改结构 |
| 逐层二维处理再缝合 | 每层单独分割,跨层用连通域合并 | 层间断裂多 | 只想做检测不做分割 |
这三派在同一份数据上的分数差异,很大一部分来自采样几何而非网络能力。这一点在比对榜单时必须记住:不同年份的提交,前处理未必一样。
3.3 信号衰减:一个被低估的失败源
荧光在细胞核每次分裂时被摊薄到两个子核里,核体积也相应变小。结果是同一胚胎在序列前段和后段的信噪比完全不同:
- 前段:核大而亮,相邻核之间有明确暗隙;
- 中段:核变小,暗隙收窄,两个刚分裂的姐妹核常常粘连;
- 后段:部分核的信号弱到与背景噪声同量级,靠形状已不可分,只能靠时间连续性推断。
公开文献在描述这套数据时提到,其信噪比约 6.74 dB,并且明确点出「荧光在细胞分裂时会衰减,细胞越变越小」这两条难点。这两条不是可选的注解,而是算法设计的硬约束:任何只用单帧信息的方法,都会在后段系统性失败。
3.4 视野与边界
z 层数三十五层、层距一微米,加上横向约 0.09 微米,可算出一个约 64×46×35 微米的三维视野。这个体积能否装下整个胚胎?早期胚胎可以,到了细胞数增多、胚胎被卵壳撑到接近百微米时,边缘细胞可能贴住视野边界甚至被切掉。
| 边界类型 | 表现 | 对算法的后果 |
|---|---|---|
| z 向上下截断 | 贴近顶/底的核只出现半个 | 体积特征失效,按体积过滤会误删 |
| xy 四周贴边 | 核中心在视野内、核体在视野外 | 分割指标被低估 |
| 卵壳反射 | 边缘处有弧形亮带 | 可能被误检为细胞 |
| 视野外的分裂 | 分裂发生在视野外,两个子核都不完整 | 追踪断开,计为漏检 |
这四类都不是算法能修的,只能靠预处理时把边界区标出来、在评估时单独处理。官方评测脚本对边界有专门规定,这也是提交前必须读评测文档的原因。
3.5 位深与动态范围的取舍
8-bit 意味着每像素只有 256 级。对荧光数据来说,这意味着动态范围被压得很窄:亮核的峰值容易饱和,暗背景的噪声又占了最低几级。
由此引出的实操建议:
- 归一化不要用固定阈值(如 0 到 255 线性拉伸),要按分位数裁切,因为不同序列的整体亮度不同;
- 后段暗核需要局部对比度增强,但全局增强会把背景噪声一起抬起来;
- 若做多序列联合训练,必须逐序列归一化,否则模型会学到「哪个序列更亮」这种无意义特征。
3.6 这一层的边界小结
影像侧的核心事实可以压成三句:采样是各向异性的,信号是随时间衰减的,边界是有截断的。 三条都不在标注里,只能从原始数据本身读出来。任何只用标注做实验、不看影像的人,都会在这三处翻车。
§4 第二层:标注侧——三种真值,三种残缺
4.1 这一层回答的问题
有了影像,第二个问题是「标准答案在哪、有多可信」。这一层的答案不在某个文件里,而在官方那套定义里:同一份数据有三种不同性质的标注,各自残缺的方向不同。理解它们的残缺方向,比理解它们的格式更重要。
4.2 三种真值的定义
官方的说法很清楚,把它们排在一起看:
| 名称 | 制作方式 | 覆盖 | 精度 | 用于评测什么 |
|---|---|---|---|---|
| 金标准追踪标注 | 人类专家共识或多专家多数意见 | 真实数据下覆盖全部细胞实例 | 只到标记点,区域信息很差 | 检测 DET、追踪 TRA |
| 金标准分割标注 | 人工逐核勾画 | 只覆盖极少数细胞 | 区域精确 | 分割参考 |
| 银标准分割标注 | 多届参赛算法结果的多数意见 | 覆盖良好 | 区域信息有限 | 补足分割覆盖不足 |
关键在那句「真实数据的金标准追踪标注覆盖全部细胞实例,但区域信息很差」。翻译成实务语言:
你可以相信每一个细胞都被数到了,但不能相信任何一个细胞的轮廓是准的。
反方向的银标准则是:轮廓大致可用,但它是算法投票的产物,不是人工裁定,遇到算法集体出错的地方会一起错。
4.3 一个分裂事件的完整解剖
用一个具体场景说明三种标注如何咬合。假设某胚胎在第 118 帧时,编号 57 的细胞核分裂。
帧 117:man_track117.tif 中,该位置像素值 = 57(一个标记点)
帧 118:man_track118.tif 中,同一区域出现两个不同的值,例如 131 与 132
同时 man_track.txt 新增两行:
131 118 190 57
132 118 175 57
把四件事拆开看:
- 位置信息:标记点落在哪个体素,就是算法预测中心点应该命中的位置;
- 身份信息:57 变成 131 与 132,编号的连续性不表示空间连续性,不能靠编号接近猜关系;
- 拓扑信息:131 与 132 的父都是 57,这构成一次二分叉,是谱系树的一条边;
- 时间信息:出生帧 118、消失帧 190 与 175,说明两个姐妹细胞此后寿命不同。
四件事里,只有第 2、3 项是人工确认过的;第 1 项是「一个点」,不是「一块区域」;第 4 项里的消失不一定是死亡,也可能是移出视野或信号消失。消失帧不等于凋亡时刻,这是最常被误读的一条。
4.4 为什么金标准分割的覆盖极少
这条设计不是为了省事。真实数据里,人工勾画一个三维核的边界,从阈值试错到逐层修正,一个核要若干分钟;一条序列二百五十帧、每帧上百个核,全勾完是几万核的工作量。银标准的出现正是为了分摊这件事:用多届算法的多数意见替代人工,覆盖上去了,权威性下来了。
于是形成了一个必须接受的不对称:
| 想做的事 | 该信哪种标注 | 风险 |
|---|---|---|
| 训练分割网络 | 银标准(覆盖够) | 学到的是多数算法的共识偏差 |
| 精修分割结果 | 金标准(精度高) | 只能评估极少数细胞,泛化存疑 |
| 训练/评测追踪 | 金标准追踪(覆盖全) | 只有点,边界得自己抠 |
| 评估分裂识别 | 金标准追踪的父子关系 | 分裂与「新生」可能混淆 |
4.5 与 name 体系的落差
由星形树可见,整个谱系是纯拓扑的。这套数据没有任何字符串形式的谱系名。而生物学界通用的谱系名体系(如 AB、P1、EMS、MS、E、C、D、P4 这些始祖细胞及其后代的拼接名)在这里完全缺席。
这意味着两件事:
- 做拓扑分析没问题:树形结构、分支度、深度、寿命分布,都能从 track_id 直接算出;
- 做生物学解释有问题:要知道「第 131 号是谁」,必须靠外部映射。而外部映射需要同一胚胎的完整谱系名文件,这套序列不提供。
映射的可行性还受限于第四条约束:不同胚胎的谱系名虽然一致,但 track_id 的编号规则与胚胎无关,两条序列的 131 号未必同名。跨序列对齐是另一个独立问题。
4.6 谱系树的四种读法
一棵只有编号的树,能读出哪些东西?至少有四个维度,它们对应四类不同的生物学问题。
| 读法 | 怎么算 | 对应的问题 | 常见陷阱 |
|---|---|---|---|
| 深度 | 从根到叶的最长祖先链长度 | 发育到第几层,胚胎走到哪个阶段 | 根可能不止一个,深度要按根分别算 |
| 分支时刻 | 每条子轨迹的出生帧 | 每次分裂发生在第几分钟 | 出生帧是帧号,乘以帧间隔才是真实时间 |
| 寿命分布 | 消失帧减出生帧 | 不同谱系的细胞周转速度差异 | 末期细胞的消失帧被序列截断,寿命被低估 |
| 对称性 | 姐妹两枝的最终细胞数之比 | 一次分裂是否等分 | 需要把「最终」定义为序列末仍存活的分支末端 |
四个维度里,对称性最容易做、也最容易做错。线虫胚胎的分裂并不总是等分:早期某些分裂产生一个大的前体与一个小的子代,两者的后代数量相差数倍。如果直接用「两个子枝的细胞数之比」衡量对称性,得到的数字混杂了「分裂是否等分」与「分支是否被截断」两件事,必须先把被序列截断的分支排除掉。
#-- 按根分别算深度与末端细胞数,绕开截断分支
from collections import defaultdict
rows = [(int(a), int(b), int(c), int(d)) for a, b, c, d in
(l.split() for l in open("01_GT/TRA/man_track.txt") if l.strip())]
kids = defaultdict(list)
for tid, _, _, par in rows:
if par:
kids[par].append(tid)
span = {r[0]: (r[1], r[2]) for r in rows}
last_frame = max(r[2] for r in rows)
def walk(node, depth, out):
#-- 只统计在序列末仍存活的末端,截断分支不计入对称性
if not kids[node]:
if span[node][1] >= last_frame - 1:
out.append(depth)
return
for c in kids[node]:
walk(c, depth + 1, out)
depth_of_leaves = []
for tid, _, _, par in rows:
if par == 0:
walk(tid, 0, depth_of_leaves)
print("最大深度", max(depth_of_leaves) if depth_of_leaves else 0)
print("完整末端数", len(depth_of_leaves))
这段代码只依赖那张四列表,不碰影像,可以在几毫秒内跑完。它给出的「最大深度」就是胚胎在序列结束时走过了多少轮分裂。
4.7 两条序列之间能不能对齐
不能。track_id 是逐序列各自编号的产物,同一枚胚胎的两条序列之间不存在编号对应。若要对齐,只有三条路可走,且每条都有代价。
| 对齐方式 | 做法 | 代价 |
|---|---|---|
| 时间对齐 | 按帧号直接配对 | 两条序列起点不同,帧号无共同基准 |
| 几何对齐 | 用早期细胞位置做刚体配准 | 胚胎在卵壳内会翻转,中期以后失效 |
| 拓扑对齐 | 按树的形状匹配 | 形状相似的分支极多,歧义严重 |
这也解释了为什么基准评测从不在序列之间做细胞对应:评测的单位是每条序列独立的追踪质量,而不是「同一细胞在两条序列里是否被认成同一个」。理解这一点,就不会花力气去做对齐——那是一个这套数据没有准备回答的问题。
§5 第三层:工具侧——怎么取、怎么算、怎么提交
5.1 这一层回答的问题
拿到影像与标注之后,实际动手会遇到一串琐碎但必答的问题:去哪下、怎么读、怎么用官方脚本算分、测试集怎么提交。这一层就是把这些答案固定下来。
5.2 下载与校验
#-- 两个包都必须下:训练包带标注,测试包只有影像
curl -O https://data.celltrackingchallenge.net/training-datasets/Fluo-N3DH-CE.zip
curl -O https://data.celltrackingchallenge.net/test-datasets/Fluo-N3DH-CE.zip
#-- 解压后先确认目录层级符合官方约定,否则评测脚本会找不到标注
unzip -q Fluo-N3DH-CE.zip -d train && unzip -q Fluo-N3DH-CE.zip -d test
ls train/Fluo-N3DH-CE/01_GT/TRA/man_track.txt
ls test/Fluo-N3DH-CE/01/t000.tif
注意两个包的目录名相同,解压到不同父目录才能并存。官方明确禁止克隆或再分发数据集及其标注,需要证明数据存在时应给出原始下载链接而不是镜像。
5.3 读取一个体数据
#-- 训练序列一第 0 帧:一个 8-bit 三维数组,形状为 (35, 512, 708)
import tifffile, numpy as np
vol = tifffile.imread("train/Fluo-N3DH-CE/01/t000.tif")
print(vol.shape, vol.dtype) #-- (35, 512, 708) uint8
print(vol.min(), vol.max())
#-- 用分位数裁切代替线性拉伸,避免少数饱和体素压暗整体
lo, hi = np.percentile(vol, [1, 99.5])
norm = np.clip((vol - lo) / max(hi - lo, 1e-6), 0, 1)
形状的轴序是 z、y、x,这一点从 TIFF 的维度顺序直接来,不需要推测。若用常见的 xy 优先思维去 reshape,会把层与列搞反,得到一张有条纹的怪图。
5.4 用 track 表做一次完整验证
写算法之前,先验证自己读标注的代码是对的。
#-- 交叉验证:man_track.txt 的轨迹集合,应等于所有标记 TIFF 中出现的像素值集合
import pathlib, tifffile, numpy as np
tra_dir = pathlib.Path("train/Fluo-N3DH-CE/01_GT/TRA")
tracks_in_table = {int(l.split()[0]) for l in (tra_dir / "man_track.txt").read_text().splitlines() if l.strip()}
ids_in_masks = set()
for p in sorted(tra_dir.glob("man_track*.tif")):
ids_in_masks |= set(np.unique(tifffile.imread(p)).tolist())
ids_in_masks.discard(0) #-- 0 是背景
print(len(tracks_in_table), len(ids_in_masks))
print("只在表里:", sorted(tracks_in_table - ids_in_masks)[:10])
print("只在掩膜里:", sorted(ids_in_masks - tracks_in_table)[:10])
如果两边数量完全一致,说明标注内部自洽;若不一致,多半是某帧的掩膜被覆盖或编号溢出(16-bit 掩膜的编号上限是 65535,这套数据远未触及,但换到别的高密度序列就要当心)。
5.5 评测与提交
官方对每个数据集提供评估程序,输出 DET、SEG、TRA 三个原始指标与两个组合操作分(检测加追踪、分割加追踪)。提交走在线评测:把结果按约定目录结构打包上传,服务端在测试序列上跑同样的脚本。
三条实操提醒:
| 事项 | 说明 |
|---|---|
| 结果目录命名 | 必须与官方约定一致,01_RES 对应测试序列 01 |
| 提交频率 | 历史上有次数限制,超限会被拒;先本地在训练集上跑通再提交 |
| 榜单解读 | 不同年份的提交前处理不同,跨年份比分数只能定性看,不能精确比较 |
5.6 三个指标各自惩罚什么
官方给的三个指标不是三种「准确率」,而是三种不同性质的损失函数。把它们混着看,会得出错误结论。
| 指标 | 惩罚什么 | 放过什么 | 什么时候会异常低 |
|---|---|---|---|
| 检测 | 该有的核没被发现,或凭空多出来一个 | 两个核粘在一起算成一个(算一次漏检) | 后段暗核消失 |
| 分割 | 预测区域与参考区域的交并比不足 | 区域略偏但重心正确 | 各向异性未处理,z 向过分割 |
| 追踪 | 跨帧链接错误、分裂未识别、轨迹断裂 | 单帧内的分割误差(只罚点) | 分裂密集段 |
| 检测+追踪组合 | 以上两类各占一半 | — | 分裂漏识 |
| 分割+追踪组合 | 同上 | — | 两者都差时 |
一条实用的读法:先看检测,再看追踪。 检测低说明找不到核,追踪再高也没有意义;检测高而追踪低,说明问题集中在跨帧关联与分裂识别,这与后段信号衰减直接相关。两个组合分不要单独看,它们只是把两个原始指标平均了一次。
还有一个容易忽略的细节:追踪指标基于「标记点」计算,因此一个核的分割区域再差,只要重心对了,追踪分数不受影响。这意味着用分割+追踪组合分横向比较不同方法时,分割能力被追踪能力稀释了一半。要谈分割,就看分割指标本身。
5.7 与前代工具的关系
这套数据的影像风格与 StarryNite/AceTree 时代一脉相承:同一实验室(Waterston Lab)、同样的核标记策略、接近的层数与帧率。它的原始出处论文正是这条自动化路线的方法学论文。因此有一个容易被忽略的用法:
把 Fluo-N3DH-CE 当作 StarryNite 输出的「影像侧剪影」来看。
StarryNite 的产物是一长串逐帧逐核文本记录,外人很难直观理解它吃进去的是什么;而这套公开序列给出了同一时代、同一平台的原始影像,配合可读的 track 表,可以让后来者明白那套流水线面对的是什么样的困难——低信噪比、各向异性、分裂衰减,一样不少。
#-- StarryNite 的输入命名约定(每帧每层一个文件),与这里的打包方式不同
#-- tif/081505_t056_p14.tif 表示序列 081505 的第 56 帧第 14 层
#-- 若要把两者互通,需先按该约定把体数据拆层,再转回 ACE 可读的中间格式
python - <<'PY'
import tifffile, numpy as np, pathlib
vol = tifffile.imread("train/Fluo-N3DH-CE/01/t000.tif")
out = pathlib.Path("tif"); out.mkdir(exist_ok=True)
#-- 注释记号固定为 #--,与本文体例一致
for z in range(vol.shape[0]):
tifffile.imwrite(out / f"ce_t000_p{z:02d}.tif", vol[z])
print("拆出", vol.shape[0], "层")
PY
§6 三条线的分工:胚胎谱系、连接组与全脑钙成像
6.1 库内已有的两条线
库内已有两条与秀丽隐杆线虫高度相关的资源,它们与这一条构成三角形的三个顶点,缺一不可。
| 资源 | 观测对象 | 时间维度 | 回答的问题 |
|---|---|---|---|
| 秀丽隐杆线虫连接组 | 成年个体的 302 个神经元及其化学突触与电连接 | 静态(跨若干发育阶段重建) | 神经系统是怎么连的 |
| 秀丽隐杆线虫全脑钙成像 | 自由活动个体的头部神经元钙信号 | 秒级动态 | 神经活动在做什么 |
| Fluo-N3DH-CE(本词条) | 胚胎期全部细胞核的分裂史 | 分钟级动态 | 这具身体是怎么长出来的 |
三者的观测单位完全不同:一个是突触,一个是动作电位代理信号,一个是细胞核的分裂事件。把三者混谈是常见的错位。
6.2 一条时间轴上的三段时间
把三条线放到同一条生命时间轴上,分工立刻清楚:
受精卵 ── 胚胎期(本词条)──> 孵化 ── 幼虫期 ──> 成虫
分裂 约五百次 │ │
分钟级分辨率 │ ├── 连接组(静态结构)
│ └── 全脑钙成像(秒级功能)
本词条的覆盖区间在最左端:受精后约数小时,细胞以分钟为单位不断翻倍。这一段里,神经还谈不上「活动」,最多是少数细胞在分化;连接组描述的是右端的成熟布线;钙成像则是在成熟布线上看信号如何流动。
有个细节值得点出:连接组的官方描述里提到其重建跨越了出生后若干发育阶段,也就是说连接组本身带有发育成分。但它记的是「连接随发育如何变化」,不是「细胞如何产生」。前者是布线演化,后者是细胞增殖,不是同一件事。
6.3 中间那条鸿沟:从细胞到回路
三者之间有一个真实存在、但很少有资源去填的空档:从最后一个分裂事件到第一条可测神经活动之间的那段。
胚胎末期细胞停止分裂、开始分化,神经元伸出轴突、寻找靶点、建立突触。这一段的影像学证据需要同时具备高分辨与长时间跨度,光学显微镜在这段往往失焦、光毒性与信号衰减都会累积。因此多数胚胎谱系研究止步于细胞数达到数百的时点,衔接后续发育需要靠幼虫期的独立成像。
这个空档的存在意味着:任何声称「从谱系直接推出连接组」的说法都缺少公开可查的中间证据链。三者能做的互补,是各管一段,而不是彼此推导。
6.4 检索路径
站内检索这三条线的最佳路径,按需求分:
| 你的问题 | 该进哪条 |
|---|---|
| 细胞分裂如何被自动追踪 | 本词条 |
| 神经如何跨突触传递 | 连接组 |
| 行为如何由神经活动编码 | 全脑钙成像 |
| 细胞追踪算法在通用基准上的排行 | Cell Tracking Challenge |
| 三维细胞核实例分割的做法 | NucMM 三维神经元核 |
| 二维明场细胞分割 | LIVECell |
| 通用显微实例分割赛题 | NeurIPS 2022 细胞分割挑战 |
| 细胞内部结构的参考尺度 | Allen 细胞影像集合 |
| 单细胞层面的物种级图谱 | 小鼠细胞图谱 |
6.5 三条线的共同盲区
三条线共享一个盲区:都只覆盖实验室条件下的标准品系。胚胎谱系来自被筛选过的健康胚胎,连接组来自固定后的同源个体,钙成像来自几种转基因品系。野生型变异、环境交互、病理状态,三者都不覆盖。要做这类问题,得去找各自方向的专门资源。
§7 质量评估与已知局限
7.1 阅读本节前需要知道的一件事
不要用「机器学习数据集」的框架评价这套资源。 它既不是训练集也不是榜单冠军的垫脚石,它是一套考题——它的价值在于难度与不可替代性,不在于规模与标注密度。
两种最常见的错位评价:
| 错位评价 | 为什么错 |
|---|---|
| 「只有四条序列,太小了,没有训练价值」 | 它的定位是评测基准,四条固定序列正是为了让所有方法在同一块地上比 |
| 「标注只有点没有区域,质量不行」 | 三种真值各司其职,追踪评测本来就只需要点与拓扑,不需要区域 |
一旦接受了「这是考题」这个前提,接下来的局限评估才有意义。
7.2 逐条局限
规模局限。 四条序列,其中两条无标注。作为算法回归测试够用,作为统计样本远远不够。
时间局限。 每条约四小时,帧间隔 1 至 1.5 分钟。比帧间隔更快的分裂过程(核膜破裂到两个子核分离的中间态)在大部分情况下只体现为「上一帧一个、下一帧两个」,中间态不可见。
空间局限。 z 向一微米,层数三十余层。直径小于两微米的后期细胞核在 z 向只占两三层,体积测量误差极大。
标注局限。 追踪标注只给点,分割标注只给极少数细胞;消失帧不等于凋亡;银标准是算法共识而非人工裁定。
命名局限。 无 Sulston 式谱系名,跨序列 track_id 不可比。
许可局限。 研究免费但非 CTC 相关的公开科学使用须获许可;商业使用须同时取得主办方与数据提供方许可;禁止克隆再分发。这比常见的知识共享许可严格得多。
7.3 DAIMS 视角下的元数据成熟度
DAIMS(Data Management and Sharing)框架关注元数据的完整与可追溯,用它逐项过一遍,能看出这套资源的长处与短处。
| 维度 | 现状 | 判断 |
|---|---|---|
| 数据来源可追溯 | 官网列出实验室、显微镜型号、物镜、体素尺寸、时间步长、参考文献 | 强 |
| 许可可追溯 | 使用条款写在同一页面,逐条编号 | 强 |
| 版本可追溯 | 随基准版本更新,但单数据集无独立版本号与变更日志 | 弱 |
| 标注流程可追溯 | 有独立的过程文档与命名约定文档 | 较强 |
| 技术元数据完整 | 位深、尺寸、轴序可从文件读,但无独立元数据文件 | 中 |
| 标识符稳定 | 以数据集缩写为标识,无 DOI 级别的持久标识 | 弱 |
| 引用机制 | 要求引用基准论文并致谢,未提供 DataCite 式引用格式 | 中 |
这张表暴露的短处是持久标识:四条序列没有各自独立、可长期解析的标识符,一旦主办方站点迁移,引用链就断了。使用者在论文方法段最好同时写下数据集缩写、官网页面与引用论文三样,而不只是一个 URL。
7.4 外部验证矩阵
不同来源对同一事实的交叉印证,能判断哪些数字可信。
| 事实 | 官方页面 | 第三方文献 | 一致性 |
|---|---|---|---|
| 训练两条分别 250 帧 | 官网 3D 数据集页 | 多篇方法论文的表格 | 一致 |
| 序列尺寸 708×512×35 与 712×512×31 | 官网 | 方法论文表格 | 一致 |
| 帧间隔 | 官网标 1 分钟并注 1.5 分钟 | 文献述为每分钟或 1.5 分钟 | 一致(对应训练/测试之差) |
| 体素 0.09×0.09×1.0 微米 | 官网 | 文献引用同值 | 一致 |
| 测试序列帧数 | 官网未直接列出 | 文献表列 190 与 140 | 单一来源,须谨慎 |
| 信噪比 6.74 dB | 官网未列 | 一篇方法论文给出 | 单一来源 |
| 金标准追踪覆盖全部细胞 | 官网标注页面明示 | 通常未重复 | 官方口径 |
两条单一来源的数字(测试帧数、信噪比)在本文按「文献报告值」处理,不作为官方规格。这也是引用纪律的一部分:官方没写的,注明是谁写的。
7.5 一句话的质量判断
它是这类任务的标准难点之一:规模小到可以完整跑,难度大到不能靠调参蒙过,且被同一套评测脚本反复测量了十年以上。这三条合起来,构成了不可替代性。
§8 版本与生态
8.1 它从哪来
故事起点是 1983 年那一份全谱系图。Sulston 与同事用微分干涉显微镜一只一只胚胎盯着看,把每一个细胞的名字、出生时刻、分裂次数、命运记下来,写成了整个生物学界的经典。那份工作的局限也很清楚:它到细胞数达到数百时就到了人的眼力极限。
二十年后,有人决定用机器接管后半段。2006 年,Bao 等人发表了自动谱系追踪的完整流程:用组蛋白-GFP 标记核,每分钟采集一次完整三维堆栈,用 C 语言写的追踪程序把所有核在时间轴上串起来,再用 Java 写的树形浏览工具做人工校正。2008 年,同一团队把方法推到表达谱层面,并给出了本文所指的四条序列的原始采集;同年,这套数据被收进刚成立不久的细胞追踪基准。
8.2 它靠什么活着
三个支点:
- 主办机构承载:马萨里克大学的一个专门研究组长期维护基准,有固定人员、固定评测服务器、固定的月度评估流程;
- 评测机制闭环:提交、打分、榜单、复盘,参与者需要分数,主办方需要参与度,形成正反馈;
- 下游依赖刚性:任何声称「在细胞追踪上有效」的方法,如果没有这套基准上的数字,审稿人会直接要求补。
还有一层不太显眼但很重要的:这套基准的方法论文本身被引用极广,数据集与论文绑在一起传播,等于每引用一次论文就提醒一次数据集的存在。
8.3 生态位
在细胞追踪的生态里,它占据「三维、高密度、天然增殖目标」这一格。
| 生态位 | 代表序列 | 特点 |
|---|---|---|
| 二维稀疏 | 多种二维荧光序列 | 入门难度 |
| 三维高密度、目标数恒定 | 培养细胞序列 | 分割难、追踪易 |
| 三维高密度、目标数递增 | 本词条 | 分割难、追踪难、还有分裂识别 |
| 光片、整胚胎 | 果蝇等序列 | 体积大、视野宽 |
| 合成数据 | 模拟序列 | 标注完美、真实度存疑 |
目标数递增这一格是最稀缺的:真实生物发育都是增殖过程,但多数基准数据为了控制难度选用了不分裂或分裂极少的样本。这一格的存在,使得「分裂识别」成为一个可被公正比对的独立能力。
8.4 十年榜单告诉了我们什么
把历年提交按指标拉通看,有一条趋势相当稳定:检测指标的提升明显快于追踪指标。原因不难理解——检测是单帧问题,可以直接借用分割网络的进展;追踪是序列问题,需要处理分裂歧义,而分裂歧义在低信噪比后段几乎是不可判定的。
这解释了为什么这套数据至今仍在榜:单帧能力已经饱和,序列能力还没有。
8.5 与周边资源的衔接
它的上游是影像采集平台(共聚焦、光片、转盘),下游是各类三维跟踪与谱系分析工具。与它衔接最紧的两类资源是:
- 同实验室的完整胚胎谱系数据(有谱系名,但分散在论文附录与实验室站点);
- 后续的整胚胎形态学图谱(把核追踪扩展到细胞膜分割,得到细胞级而非核级的形态)。
后者是一个重要的演进:核追踪只能得到细胞核的位置与谱系,得不到细胞形状;补上膜通道之后,才能研究细胞如何挤压、如何排列、如何形成组织。这一步由后来的研究团队完成,也在别处公开。就本文所写的这四条序列而言,它们停在核级。
8.6 为何它能持续
一句话:它是一件基础设施,不是一份产品。 产品靠更新维系,基础设施靠依赖维系。只要还有人写细胞追踪算法,只要审稿人还会问「在这个基准上什么分数」,它就会一直在线。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一周该做什么 | 不该做什么 |
|---|---|---|
| 算法研究者 | 下载训练包,跑通官方脚本,拿一条平庸的基线分数 | 一上手就改网络结构 |
| 生物学研究者 | 先用 track 表重建谱系树,看分支与寿命分布 | 直接把 track_id 当谱系名写进论文 |
| 工程实现者 | 先把读取与验证代码写对(§5.4 那段),再谈模型 | 在没验证标注自洽前就训练 |
9.2 最小实现:从影像到谱系树
下面这段把「读一帧、合并成体、连通域打标、按 track 表建树」四步串起来,可完整运行。
#-- 依赖:numpy、tifffile、scipy
python - <<'PY'
import tifffile, numpy as np
from scipy import ndimage as ndi
from collections import defaultdict
root = "train/Fluo-N3DH-CE/01"
vol = tifffile.imread(f"{root}/t120.tif").astype(np.float32)
#-- 分位数归一化后做阈值分割,得到候选核区域
lo, hi = np.percentile(vol, [2, 99.5])
mask = (vol - lo) / max(hi - lo, 1e-6) > 0.25
#-- 三维连通域打标;z 向按 1.0/0.09 缩放后做形态学开运算,减少层间断裂
st = np.zeros((3, 3, 3), bool); st[1, 1, :] = True; st[1, :, 1] = True; st[:, 1, 1] = True
lab, n = ndi.label(ndi.binary_opening(mask, st))
sizes = ndi.sum(mask, lab, range(1, n + 1))
#-- 体积下限按体素计:核半径约 1.5 微米时约 1600 体素,放宽到 300 容忍后段小核
keep = [i + 1 for i, s in enumerate(sizes) if s >= 300]
print(f"第 120 帧候选 {n} 个,按体积过滤后 {len(keep)} 个")
#-- 读 track 表,输出这一帧里仍存活的轨迹编号,供跨帧关联对照
alive = [int(l.split()[0]) for l in open(f"{root}_GT/TRA/man_track.txt")
if int(l.split()[1]) <= 120 <= int(l.split()[2])]
print(f"这一帧金标准存活轨迹 {len(alive)} 条")
PY
输出的两个数字——候选数与金标准存活数——就是最粗的基线。二者差距往往在数十个量级,这个差距里既有漏检也有误检,是改进的起点。
9.3 在 AI 流程中的位置
在典型的三段式流程里,这套数据处在中间偏后:
合成数据预训练 → 本数据集微调与评测 → 真实实验影像部署
│
└── 通过官方脚本给出可比的 DET/SEG/TRA
它的作用是提供一个不可自说自话的参照。前段可以随便造数据,后段可以各家自定义评估,中间这一段必须是公共的,否则跨团队的方法无法比较。
9.4 五个容易踩的坑
| 坑 | 表现 | 绕法 |
|---|---|---|
| 轴序搞反 | 读出的体数据像条纹布 | 先打印 shape 并与官方页面尺寸对照 |
| 逐层二维处理 | 层间断裂,体积偏小 | 三维连通域或 z 向插值 |
| 用消失帧当凋亡 | 凋亡率虚高 | 结合视野边界与信号强度再判 |
| 跨序列比 track_id | 结论完全错乱 | 只比拓扑,不比编号 |
| 用测试集调参 | 榜单分数虚高 | 测试集只在最终提交时用一次 |
9.5 如果只做一件事
把这四条序列当成回归测试。每次改动算法,跑一遍官方脚本,看三个指标是否退步。这件事不需要任何生物学知识,却能挡住绝大多数「改了反而更差」的改动。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 性质 | 公开的三维细胞追踪评测序列,非训练语料库 |
| 主要用途 | 三维细胞核检测、分割、跨帧追踪、分裂识别的训练与评测 |
| 不建议用途 | 谱系名映射、群体统计、跨物种泛化声明、商业再分发 |
| AI 相关风险 | track_id 被误当作生物学标识符写入结论 |
| 伦理 | 无人类数据;涉及动物实验伦理时按原始论文的实验规范引用 |
| 引用要求 | 引用基准论文并致谢数据来源;原始采集引用方法学论文 |
| 版本 | 以主办方当前打包为准,无独立版本号 |
| 状态 | 在线、可下载、持续接受提交与评估 |
常见误读
| 常见说法 | 实际情况 | 证据 |
|---|---|---|
| 「这是 C. elegans 的全胚胎发育记录」 | 每条序列约四小时,止于数百细胞段,未覆盖到孵化 | 帧数与帧间隔可算出总时长 |
| 「标注了谱系名,能直接查 ABala」 | 标注只有数值 track_id 与父子关系,无任何谱系名字符串 | man_track.txt 四列格式 |
| 「track 表里消失就是细胞死了」 | 也包含移出视野、信号衰减无法追踪 | 官方只定义起止帧 |
| 「金标准分割能评估我的分割精度」 | 金标准分割只覆盖极少数细胞,评测分区要分清 | 官方标注页面明示覆盖极有限 |
| 「四条序列太少,没有训练价值」 | 定位是评测基准不是训练集,固定序列才能公平比较 | 基准设计原则 |
| 「这只是二维切片的堆叠」 | 每帧是真正的三维体积,分区与相邻层都有结构 | 文件维度与官网尺寸 |
| 「和连接组/钙成像是一回事」 | 观测单位分别是细胞核、突触、钙信号,时间尺度差几个数量级 | 三条线各自的元数据 |
| 「可以随意镜像给同事」 | 官方明令禁止克隆再分发,须给原始链接 | 使用条款第 5 条 |
| 「split 与 merge 是同一类错误」 | 分裂是正常生物学事件,须单独识别;合并是错误 | 追踪任务的评分定义 |
附录 A 数据组织与文件格式
| 文件或目录 | 内容 | 格式 | 是否训练集独有 |
|---|---|---|---|
01/ |
原始影像,逐时间点一个文件 | 8-bit TIFF 体数据 | 否 |
01_GT/SEG/ |
金标准分割,覆盖极少细胞 | TIFF 掩膜 | 是 |
01_GT/TRA/ |
金标准追踪,标记点 | TIFF 掩膜 | 是 |
01_GT/TRA/man_track.txt |
轨迹表,四列 | 纯文本 | 是 |
01_ST/SEG/ |
银标准分割 | TIFF 掩膜 | 是 |
02/、02_GT/、02_ST/ |
第二条训练序列 | 同上 | 是 |
关于格式的两点补充:掩膜编码用 16-bit,0 为背景,非零值为 track_id 或标签号;体数据的轴序为 z、y、x,与多数深度学习框架默认的通道优先不同,送入模型前必须转置一次。
附录 B 谱系命名与主键
| 概念 | 这套数据里 | 生物学惯例里 |
|---|---|---|
| 唯一主键 | 数值 track_id,序列内唯一 | 谱系名字符串,如 ABala |
| 父子关系 | man_track.txt 第四列 | 名字前缀本身编码祖先 |
| 跨序列可比性 | 不可比,编号各自独立 | 同名即同源 |
| 时间标识 | 帧号 | 分钟或细胞周期数 |
| 细胞类型 | 无 | 由谱系名与命运表给出 |
这张表说明了一个实务要点:在这套数据里,主键是纯粹的追踪编号,没有生物学含义。 任何把编号当名字用的写法,都会在跨序列分析时崩塌。
附录 C 术语表
| 术语 | 解释 |
|---|---|
| 谱系 | 从受精卵出发、由历次分裂构成的树 |
| 谱系名 | 由祖先名字拼接而成的细胞标识,如 ABalapp |
| 金标准 | 人类专家共识形成的参考标注 |
| 银标准 | 多算法投票形成的多数意见标注 |
| 标记点 | 细胞核的位置点,不含区域 |
| track_id | 追踪编号,一个细胞从出生到消失的唯一标识 |
| 分裂事件 | 一个父细胞产生两个子细胞,在表里表现为两行同父 |
| 各向异性体素 | 三个方向的采样间距不同 |
| 帧间隔 | 相邻时间点之间的真实时间差 |
| DET | 检测准确度指标 |
| SEG | 分割准确度指标,基于区域重合 |
| TRA | 追踪准确度指标,含分裂与链接 |
| 体数据 | 一个时间点的完整三维体积 |
| 卵裂 | 早期胚胎的快速分裂阶段 |
| 极体 | 减数分裂遗留的小体,常被误检为细胞 |
| 分裂衰减 | 荧光被分摊到两个子核导致信号变弱 |
| 消失帧 | 轨迹在表中结束的帧,不必然等于死亡 |
| 测试集 | 标注不公开、只接受在线评测的序列 |
附录 D 常见误读 FAQ
Q1:这套序列能完整重建一棵谱系树吗?
能,但只能在拓扑层面。用 man_track.txt 的父子列可以完整重建二叉树的形状、深度与各分支寿命,无法得到谱系名。
Q2:为什么训练集和测试集的帧间隔不同?
官方在时间步长一栏同时写了 1 分钟与 1.5 分钟,对应训练与测试两批采集条件不同。这本身是一个刻意的异构设计,防止算法依赖固定帧率。
Q3:金标准分割只覆盖少数细胞,还怎么训练分割模型?
实际做法是用银标准训练、用金标准做精评,或者两者混合。官方的分割评测本身也分金标准分区与银标准分区。
Q4:测试集的标注能不能拿到?
不能。测试集只发影像,评测在主办方服务器上进行。这是榜单公平性的前提。
Q5:能用来做细胞类型分类吗?
不能。数据里没有细胞类型标签,也没有表达信息,只有核的位置与分裂关系。
Q6:和另一条 2D 的 HeLa 序列比,难度差多少?
不在一个量级。二维序列目标稀疏、无三维歧义;这一条要同时处理高密度、各向异性与分裂。
Q7:我可以把数据放进公司内部训练集群吗?
需要看用途。与基准参赛相关的内部使用通常被允许;商业用途须取得双重许可,先问再放。
Q8:为什么文档里强调「消失不等于死亡」?
因为轨迹结束的原因有四种:分裂、凋亡、移出视野、信号太弱。表中只记起止帧,不记原因。
Q9:这套数据适合做视频生成或预测模型吗?
可以作为数据来源,但没有为该任务设计的划分与指标,需自行建立评测协议。
Q10:有没有覆盖更晚阶段的同类公开序列?
有,但多为单一论文配套发布、格式各异,没有一个统一的稳定入口,这正是这套序列在公开基准中的位置所在。
附录 E 许可与引用
使用条款的关键句可以概括为五条:
| 条款 | 内容 |
|---|---|
| 引用义务 | 使用数据集产生的发表须引用基准论文并致谢来源 |
| 基准相关用途 | 参赛、准备提交、报告成绩,无需另行许可 |
| 非基准的公开科学使用 | 须取得主办方明确许可 |
| 商业使用 | 须取得主办方与数据提供方双方的许可 |
| 再分发 | 禁止克隆数据集或其任何部分,含参考标注;需说明存在时给原始链接 |
引用建议写法(同时给出数据集与两篇方法学论文):
Maska M, Ulman V, et al. The Cell Tracking Challenge: 10 years of objective
benchmarking. Nature Methods, 2023. doi:10.1038/s41592-023-01879-y
Murray JI, Bao Z, Boyle TJ, et al. Automated analysis of embryonic gene
expression with cellular resolution in C. elegans. Nature Methods, 2008;5(8):703-709.
数据来源:Cell Tracking Challenge, dataset Fluo-N3DH-CE,
https://celltrackingchallenge.net/3d-datasets/
最后一件事:如果论文里出现了谱系相关的结论,请明确写出「谱系以数值编号表示,未映射至经典谱系名」,否则审稿人有权要求补充映射表,而这份数据本身不提供。
编辑说明
核验时间:2026-10-29。核验方式:以 Cell Tracking Challenge 官方站点三页(3D 数据集页、标注说明页、数据集说明页)为主,辅以两篇第三方方法学论文的表格互校。序列尺寸、帧数、体素、时间步长取自官方页面;测试序列帧数与信噪比仅有第三方文献来源,正文已标注为文献报告值。未覆盖内容:未实际下载压缩包核对内部文件数与校验和(下载域名在本次核验环境下不可达);未逐帧统计细胞数量与分裂次数,因此正文不给出任何细胞总数的绝对值。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- tabula-sapiens — 共享标签:基因组学与多组学 / 单细胞基因组学
- single-cell-portal — 共享标签:基因组学与多组学 / 单细胞基因组学
- hcl — 共享标签:基因组学与多组学 / 单细胞基因组学
- single-cell-expression-atlas — 共享标签:基因组学与多组学 / 单细胞基因组学
- cellsnvreg — 共享标签:基因组学与多组学 / 单细胞基因组学
- cellxgene-census — 共享标签:基因组学与多组学 / 单细胞基因组学
- hra-knowledge-graph — 共享标签:基因组学与多组学 / 单细胞基因组学
- adrenal-gland-atlas — 共享标签:基因组学与多组学 / 单细胞基因组学
- expression-atlas-legacy — 共享标签:基因组学与多组学 / 单细胞基因组学
- expression-atlas — 共享标签:基因组学与多组学 / 单细胞基因组学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

