免标注训练细胞特征:Cell-DINO 自监督学习 3 步跑通指南
2026/9/13 18:59:29 网站建设 项目流程

免标注训练细胞特征:Cell-DINO 自监督学习 3 步跑通指南

【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2

如果你手上有一堆荧光显微镜拍出来的细胞图,但没有标注预算,这篇给你一条能直接落地的路。DINOv2 是 Meta 出的自监督视觉模型,这个仓库在它基础上专门加了细胞分支 Cell-DINO:不靠任何人工标签,就能从单细胞和多通道荧光图里学出可用的特征向量,再接一层线性分类器就能做蛋白质定位、细胞系分类这些下游任务。

从一张 512×512 荧光切片说起:细胞图到底难在哪

这节帮你看清"为什么通用模型在这里不够用"。你拍一张荧光图,蓝色是细胞核、红色是微管、绿色是目标蛋白——每个通道承载不同语义,而同一批细胞在不同状态下形态差异极大。更麻烦的是数据源本身不统一:仓库覆盖的 Human Protein Atlas(HPA)单细胞集有 1.3M 张、29 条细胞系,而 Cell Painting 扰动集有 8.5M 张图、通道数和内容又不一样。换句话说,你很少能用一个固定输入规格通吃所有数据。

Cell-DINO 的思路不是去适配每一种图,而是先在一批无标注细胞图上把"看得懂结构"这件事学扎实,剩下的交给轻量下游模型。仓库在 docs/README_CELL_DINO.md 里写明了预训练用的三套数据规模,你可以按自己的通道数去对号入座。

自蒸馏:让模型自己给自己出题

这节帮你弄懂"没有标签,它学的是什么"。核心机制叫自蒸馏(self-distillation),白话就是:模型分一个教师网络和一个学生网络,教师负责给同一张图的不同裁剪视角"出题打分",学生负责去拟合教师的输出,两者反复对齐,特征就被迫学到稳定、和视角无关的表示。你全程不需要一张标注图。

下面这张仓库里的框架图把三件事画在一起了:左侧是无标签自蒸馏流程,中间是 ViT(视觉 Transformer,靠注意力建模整图关系)如何把一张图切成 patch 序列,底部则是 HPA 4 通道和 Cell Painting 5 通道的实际样本。

3 步跑通最小推理流程

这节帮你把"拿到特征"这件事变成几行代码,你只需要确认自己的通道数。仓库把四种预训练模型都注册进了 dinov2/hub/cell_dino/backbones.py,选型的唯一依据是输入通道数。

from dinov2.hub.cell_dino.backbones import cell_dino_hpa_vitl16 # 4 通道的 HPA 单细胞 / 视野图 model = cell_dino_hpa_vitl16(pretrained=True, in_channels=4).eval() # 5 通道的 Cell Painting 图改用 cell_dino_cp_vits8(in_channels=5)

第二步,把图按 ImageNet 均值方差归一化后送进模型,每个细胞得到一条特征向量;第三步,这条向量接线性分类器或 KNN 就能用。仓库自带一个推理 notebook(notebooks/cell_dino/inference.ipynb),里面配了样例图,你不用准备数据就能先试跑一遍,确认环境没问题再上自己的图。

这里还有个值得知道的变体:如果不同数据集的通道数本身不稳定,可以用通道自适应模型,它对每个通道单独编码再组合,不要求输入通道数固定:

from dinov2.hub.cell_dino.backbones import channel_adaptive_dino_vitl16 model = channel_adaptive_dino_vitl16(pretrained=True, in_channels=1)

想换更强的特征:从头训一个 Cell-DINO

这节帮你在"现成权重不够用"时自己训一版。前提是你能拿到 HPAone 数据(单细胞集,fixed_size_masked_single_cells_HPA加几张 csv,文档列了完整清单)并把dinov2加进PYTHONPATH。官方给的最快配置是 ViT-L/16 在 HPAone 上训,跑在 4 台 A100-80G 节点(32 卡)上大约 2 天,线性评估能到 78.5 的蛋白质定位 F1。

python dinov2/run/train/train.py \ --nodes 4 \ --config-file dinov2/configs/train/cell_dino/vitl16_hpaone.yaml \ --output-dir <OUTPUT_DIR> \ train.dataset_path=HPAone:split=ALL:root=<DATASET_PATH>

配置文件就是上面那行里的 yaml(dinov2/configs/train/cell_dino/vitl16_hpaone.yaml),增广、教师更新频率都在这里调。训练代码每 9000 步会把教师权重存进eval文件夹,你后面评估直接取这个 checkpoint 就行。

用线性探针和 KNN 给特征打个分

这节帮你判断"学到的特征到底行不行"。最省事的验证是冻结特征、只训一层分类器(线性探针,linear probe),或者直接 KNN,两种入口都在 dinov2/run/eval/cell_dino/ 下。以蛋白质定位为例子:

PYTHONPATH=.:dinov2/data python dinov2/run/eval/cell_dino/linear.py \ --config-file dinov2/configs/eval/cell_dino/vitl16_pretrain.yaml \ --pretrained-weights <OUTPUT_DIR>/eval/training_44999/teacher_checkpoint.pth \ --output-dir <OUTPUT_DIR>/eval \ --train-dataset HPAone:split=TRAIN:mode=PROTEIN_LOCALIZATION:root=<DATASET_PATH> \ --val-dataset HPAone:split=VAL:mode=PROTEIN_LOCALIZATION:root=<DATASET_PATH> \ --val-metric-type mean_per_class_multilabel_f1 --avgpool

通道自适应版本在跨数据源上的线性探针 F1(复现值)如下,三个来源各取一个任务列:

数据源任务线性探针 F1(复现)
WTC 细胞周期Task 189.9
HPA 蛋白质定位Task 192.7
Cell PaintingTask 189.9

复现数字和论文原表基本对齐,说明这套特征对通道数不同的数据源都稳,不是只在一个集上好看。

它适合谁、不适合谁

这节帮你做取舍,免得白花时间。适合的场景:无标注细胞图做表征、小样本下游分类、跨数据集迁移、需要解释的注意力可视化。它的边界也很明确:仓库声明代码和权重仅用于研究,不能进临床诊断;从头训一版要 32 卡跑两天,算力不够就别硬训,直接用现成权重更划算;模型按通道数分了四档,通道数对不上就得换对应权重,不能拿 4 通道权重硬喂 5 通道图。

你的下一步

先确认你的图是几通道,去 docs/README_CELL_DINO.md 对出该用哪个权重;然后跑一遍推理 notebook 验证环境;特征够用就直接接线性分类器,不够再去train/cell_dino那套配置里改增广和教师更新频率重训一版。

【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询