ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Cell-DINO 实战指南:基于 DINOv2 的荧光显微细胞自监督表征训练与评估

Cell-DINO 实战指南:基于 DINOv2 的荧光显微细胞自监督表征训练与评估 Cell-DINO 实战指南基于 DINOv2 的荧光显微细胞自监督表征训练与评估【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2导读Cell-DINO 是 Meta AIFAIR在 DINOv2 自监督学习框架之上为细胞荧光显微图像Cell Fluorescent Microscopy定制的扩展版本核心贡献是把 DINOv2 的 ViT 骨干网络从自然图像迁移到多通道荧光显微镜数据并配以专门设计的数据增强策略与评测流程。本文将围绕仓库中的 docs/README_CELL_DINO.md 展开完整讲解其环境搭建、HPA 数据集准备、大规模分布式预训练、线性分类与 k-NN 评估、CHAMMI 基准评测等全部流程并补充配置文件、数据加载器与评估脚本的源码级解析。读完本文你将能够独立在 HPA 单细胞 / 视野FoV数据集上复现 Cell-DINO 训练并评测其蛋白定位与细胞系分类性能也能理解其与 Channel-Adaptive DINOBag of Channels之间的关系与差异。注意本仓库代码与模型权重仅供研究使用不适用于任何医疗流程包括诊断、治疗或治愈性应用不得用于临床目的也不得作为专业医学判断的替代品。背景为什么荧光显微图像需要单独的 DINOv2 变体DINOv2 通过自蒸馏self-distillation在数亿张自然图像上学习通用视觉特征其预训练权重对下游分类、分割、深度估计等任务都表现优异。但荧光显微镜图像与自然图像有本质差异通道语义固定HPA 数据中 4 个通道通常分别对应蛋白质protein、微管microtubule、内质网ER与核酸nucleic acid通道顺序携带生物学含义不能像自然图像那样随意按 RGB 通道处理噪声与伪影强成像存在大量噪声、背景荧光与拍摄伪影需要专门的数据增强多标签语义蛋白定位是多标签任务一个细胞可能同时存在多个目标位置细胞系则是多分类任务通道数可变不同数据集HPA、Cell Painting、WTC 等通道数量与含义不同单一in_chans3的预训练模型难以泛化。Cell-DINO 正是为了解决这些问题在保留 DINOv2 自监督学习范式的同时把输入通道改为 4in_chans: 4引入专门面向细胞图像的数据增强并基于ExtendedVisionDataset设计了HPAone、HPAFoV等专用数据加载器。环境搭建文档建议两种路径一是遵循 DINOv2 官方 README 的安装说明二是直接构建如下环境推荐conda create -n py310 python3.10 conda activate py310 pip install -r requirements.txt pip install -U scikit-learn仓库根目录同时提供了 conda.yamlGPU 环境的完整依赖清单包含submitit、torch等与 requirements.txt。如果还要跑深度估计、语义分割等 DINOv2 附带任务可参考 requirements-extras.txt开发与测试依赖见 requirements-dev.txt。关键前提执行本文后续所有训练与评估命令前必须把dinov2包加入 Python 模块搜索路径即在命令前加PYTHONPATH.。例如评估命令中的PYTHONPATH.:dinov2/data其中.使仓库根目录可被 importdinov2/data是为了兼容dinov2.data模块的导入方式。此外评估脚本依赖scikit-learn用于f1_score等指标计算因此单独pip install -U scikit-learn是必要步骤。数据准备HPAone 与 HPAFoVCell-DINO 的预训练与评测围绕两个 HPAHuman Protein Atlas数据集展开均可从 BioStudies 数据集 S-BIAD2443 获取压缩包内还附带sample_images目录的三张样例图可快速验证 notebooks/cell_dino/inference.ipynb 的推理流程。HPA 单细胞数据集HPAonedinov2/data/datasets/cell_dino/hpaone.py中的HPAone数据集要求 root 目录下包含以下文件文件用途varied_size_masked_single_cells_HPA变尺寸掩膜单细胞图像SSL 预训练用无标签fixed_size_masked_single_cells_HPA定尺寸掩膜单细胞图像带标签评测用varied_size_masked_single_cells_pretrain_20240507.csvSSL 预训练样本清单img_path列fixed_size_masked_single_cells_evaluation_20240507.csv评测集标签VAL 用fixed_size_masked_single_cells_pretrain_20240507.csv训练集标签TRAIN 用从源码可以看到标签的解析逻辑蛋白定位19 类多标签PROTEIN_LOCALIZATION列表定义了 19 个位置类如nucleoplasm、mitochondria、plasma membrane,cell junctions等CSV 中对应列为True则置 1得到 one-hot 多标签向量细胞系29 类单标签CELL_TYPE列表定义了 29 种细胞系A-431、A549、HeLa、U-2 OS 等CSV 中对应列为True的类即标签splitALL用于 SSL 预训练读varied_size_masked_single_cells_pretrain_20240507.csv标签为占位符 0splitTRAIN/VAL用于评测分别读fixed_size_masked_single_cells_pretrain/evaluation_20240507.csv。HPA 视野数据集HPAFoVHPAFoV数据集dinov2/data/datasets/cell_dino/hpafov.py面向整张视野Field of View图像是 Channel-Adaptive DINO 训练与 CHAMMI 评测使用的数据源。root 目录需要512_whole_images512×512 的整视野图像whole_images_512_train.csv/whole_images_512_test.csv训练/测试标签normalized_data与whole_images_names.csvSSL 模式splitSSL使用的无标签图像。HPAFoV 同样支持PROTEIN_LOCALIZATION28 类与CELL_TYPE36 类两种标签模式。注意其蛋白定位列表与 HPAone 的 19 类并不完全相同HPAFoV 更细含microtubule ends、rods rings等因此两个数据集不能混用同一个线性分类头。分布式训练ViT-L/16 在 32 块 A100 上的预训练标准 Cell-DINO 训练HPAone在 SLURM 集群上通过 submitit 提交 4 个 A100-80GB 节点共 32 块 GPU的训练任务python dinov2/run/train/train.py \ --nodes 4 \ --config-file dinov2/configs/train/cell_dino/vitl16_hpaone.yaml \ --output-dir PATH/TO/OUTPUT/DIR \ train.dataset_pathHPAone:splitALL:rootPATH/TO/DATASET预期训练耗时约 2 天4 节点 A100得到的 checkpoint 在线性评估下蛋白定位 F1 可达 78.5。训练代码每 9000 次迭代会把 teacher 权重保存到eval目录供后续评估。配置文件 dinov2/configs/train/cell_dino/vitl16_hpaone.yaml 关键项解读配置段参数值含义trainbatch_size_per_gpu16单卡 batch32 GPU × 16 512 有效 batchtrainOFFICIAL_EPOCH_LENGTH1756HPAone SSL 集每 epoch 的迭代数traincell_augmentationtrue启用细胞专用增强CellAugmentationDINOstudent / teacherarchvit_largeViT-Large 骨干student / teacherpatch_size1616×16 patchstudent / teacherin_chans44 通道荧光输入studentdrop_path_rate0.1DropPath 概率studentblock_chunks4iBOT 局部 token 蒸馏的分块数teachermomentum_teacher0.996teacher EMA 动量teacherwarmup_teacher_temp_epochs20teacher 温度 warmup 轮数optimbase_lr5.0e-4基础学习率optimweight_decay_end0.2权重衰减终值optimwarmup_epochs20学习率 warmup 轮数cropsglobal_crops_scale[0.4, 1.0]全局裁剪面积比例范围cropslocal_crops_scale[0.005, 0.4]局部裁剪面积比例范围cropsglobal_crops_size/local_crops_size224 / 96全局/局部裁剪尺寸cropslocal_crops_number8局部裁剪数量evaluationeval_period_iterations9000teacher 权重保存周期迭代Channel-Adaptive DINO 训练HPAFoV Bag of Channels对于通道数可变的数据HPA-FoV、CHAMMI 的 Cell Painting / WTC 等仓库还提供 Channel-Adaptive DINO 配置 dinov2/configs/train/cell_dino/vitl16_boc_hpafov.yamlpython dinov2/run/train/train.py \ --nodes 4 \ --config-file dinov2/configs/train/cell_dino/vitl16_boc_hpafov.yaml \ --output-dir PATH/TO/OUTPUT/DIR \ train.dataset_pathHPAFoV:splitTRAIN:rootPATH/TO/DATASET:wildcardSEPARATE_CHANNELS与标准 Cell-DINO 配置的差异student.in_chans/teacher.in_chans为1即模型只吃单通道输入多通道通过Bag of Channels聚合train.channel_adaptive: true与train.cell_augmentation: true同时开启train.epochs: 400、OFFICIAL_EPOCH_LENGTH: 450teacher 权重每12500次迭代保存一次wildcardSEPARATE_CHANNELS是训练命令中的关键参数在 hpafov.py 的_WildCard枚举中定义为separate_channels表示把每张图的每个通道当作独立样本并在解码时叠加通道索引信息get_image_data中把通道编号编码进返回的字节流。Channel-Adaptive DINO 的论文为 Scaling Channel-Adaptive Self-Supervised Learning详见 docs/README_CHANNEL_ADAPTIVE_DINO.md仓库只包含Bag of Channels实现不包含 Hierarchical attention 方法预训练权重在 Extended CHAMMI 数据集5 个细胞显微数据集的组合通道数可变上通过 torchhub 发布可在 dinov2/hub/cell_dino/backbones.py 中查看 torchhub 入口。运行该模型需要额外安装pandas与tifffile两个依赖。细胞专用数据增强CellAugmentationDINOtrain.cell_augmentation: true会启用 dinov2/data/cell_dino/augmentations.py 中的CellAugmentationDINO其增强流水线分为三段first transforms裁剪前Div255()除以 255 归一化→RandomRemoveChannelExceptProtein()以 0.2 概率随机黑掉通道 0/2/3 之一保留蛋白质通道 1→RandomContrastProteinChannel()以 0.2 概率只对蛋白质通道做对比度缩放模拟不同染色浓度crop全局裁剪用RandomResizedCrop(size224, scale[0.4, 1.0])局部裁剪用RandomResizedCrop(size96, scale[0.005, 0.4])additional transforms裁剪后RandomHorizontalFlipRandomVerticalFlipRandomBrightness逐通道亮度扰动RandomContrast逐通道对比度扰动SelfNormalizeNoDiv逐通道自归一化减去均值、除以标准差std1e-7防止除零。输出结构与标准 DINO 一致2 个全局裁剪 8 个局部裁剪teacher 与 student 共享全局裁剪视图。这些增强的生物学动机是荧光成像中通道相对亮度会随染色与拍摄条件漂移模型必须对亮度、对比度、通道缺失保持鲁棒。线性评估蛋白定位与细胞系分类训练过程中定期保存的 teacher 权重位于output-dir/eval/training_iter/teacher_checkpoint.pth可直接用于下游评测。线性评估脚本入口为 dinov2/run/eval/cell_dino/linear.pysubmitit 启动器核心逻辑在 dinov2/eval/cell_dino/linear.py。蛋白定位HPAone 多标签19 类PYTHONPATH.:dinov2/data python dinov2/run/eval/cell_dino/linear.py \ --config-file dinov2/configs/eval/cell_dino/vitl16_pretrain.yaml \ --pretrained-weights PATH/TO/OUTPUT/DIR/eval/training_44999/teacher_checkpoint.pth \ --output-dir PATH/TO/OUTPUT/DIR/eval/training_44999/linear \ --train-dataset HPAone:splitTRAIN:modePROTEIN_LOCALIZATION:rootPATH/TO/DATASET \ --val-dataset HPAone:splitVAL:modePROTEIN_LOCALIZATION:rootPATH/TO/DATASET \ --val-metric-type mean_per_class_multilabel_f1 \ --loss-type binary_cross_entropy \ --avgpool评估预训练发布权重时仅把--pretrained-weights换成CHECKPOINT/PATH即可也可直接替换--config-file使用vitl16_pretrain.yaml与上方命令等价。细胞系分类HPAone 单标签29 类PYTHONPATH.:dinov2/data python dinov2/run/eval/cell_dino/linear.py \ --config-file dinov2/configs/eval/cell_dino/vitl16_pretrain.yaml \ --pretrained-weights CHECKPOINT/PATH \ --output-dir PATH/TO/OUTPUT/DIR \ --train-dataset HPAone:splitTRAIN:modeCELL_TYPE:rootPATH/TO/DATASET \ --val-dataset HPAone:splitVAL:modeCELL_TYPE:rootPATH/TO/DATASET \ --val-metric-type mean_per_class_multiclass_f1 \ --avgpool若在 HPAFoV 上评测只需把HPAone替换为HPAFoV并确保加载对应的模型权重两个数据集的类别数不同HPAone 蛋白定位 19 类、细胞系 29 类HPAFoV 蛋白定位 28 类、细胞系 36 类。评估脚本的关键实现细节从 dinov2/eval/cell_dino/linear.py 头部注释可以看到它与标准 DINOv2 线性评估的差异清单核心包括优化器使用 Adam 而非 SGD调度器支持OneCycleLR或CosineAnnealingLR两种损失函数新增binary_cross_entropy选项供蛋白定位多标签任务使用源码中LossType枚举特征提取支持n_last_blocks取最后 N 个 block 的 token与avgpool对 token 做平均池化而不是只用 CLS token两种聚合方式通过create_linear_input组合评估变换使用make_classification_eval_cell_transformdinov2/data/cell_dino/transforms.py默认SELF_NORM_CENTER_CROP模式Div255 → Resize(可选) → CenterCrop(crop_size) → SelfNormalizeNoDiv另一模式SELF_NORM_AUG_DECODER则用RandomCrop 随机翻转做数据增强式评测CHAMMI 专用支持--leave-one-out-dataset做留一法leave-one-out评估与最优 weight decay 网格搜索。Channel-Adaptive 模型的线性评估HPAFoVPYTHONPATH.:dinov2/data python dinov2/run/eval/cell_dino/linear.py \ --config-file dinov2/configs/eval/cell_dino/vitl16_channel_adaptive_pretrain.yaml \ --pretrained-weights PATH/TO/OUTPUT/DIR/eval/training_359999/teacher_checkpoint.pth \ --output-dir PATH/TO/OUTPUT/DIR/eval/training_359999/linear \ --train-dataset HPAFoV:splitTRAIN:modePROTEIN_LOCALIZATION:rootPATH/TO/DATASET \ --val-dataset HPAFoV:splitVAL:modePROTEIN_LOCALIZATION:rootPATH/TO/DATASET \ --val-metric-type mean_per_class_multilabel_f1 \ --loss-type binary_cross_entropy \ --bag-of-channels \ --crop-size 384 \ --n-last-blocks 4 \ --batch-size 32 \ --epoch-length 145 \ --epochs 30 \ --avgpool对应的评估配置 dinov2/configs/eval/cell_dino/vitl16_channel_adaptive_pretrain.yaml 中student.channel_adaptive: true、in_chans: 1。--bag-of-channels会改变特征聚合方式在 dinov2/eval/cell_dino/linear.py 的create_linear_input中每个通道独立过骨干网络得到 token再跨通道拼接/求和SCALE ADAPTIVE STRATEGY即多通道共享同一套权重通道数可任意伸缩。--n-last-blocks 4表示取最后 4 个 block 的特征--crop-size 384提供更高分辨率输入。Bag of Channels 在 ViT 前向中的实现Channel-Adaptive 训练除了配置开关还在模型层面生效dinov2/models/vision_transformer.py中self.bag_of_channels channel_adaptive第 107 行在前向时对通道维度做遍历处理第 310、329 行附近。也就是说单通道 ViT 会对一个 batch 内的每个通道分别编码再在合适位置聚合从而实现训练时见过 1 通道推理时支持任意通道数的通道自适应能力。这与数据加载器hpafov.py 的get_image_data把通道索引拼进字节流共同构成完整的 channel-adaptive 数据通路。k-NN 评估k-NN 评估无需训练线性头直接比较特征距离更适合快速验证表征质量。入口为 dinov2/run/eval/cell_dino/knn.py核心逻辑在 dinov2/eval/cell_dino/knn.py。HPAone 细胞系分类PYTHONPATH.:dinov2/data python dinov2/run/eval/cell_dino/knn.py \ --config-file dinov2/configs/eval/cell_dino/vitl16_pretrain.yaml \ --pretrained-weights CHECKPOINT/PATH \ --output-dir PATH/TO/OUTPUT/DIR \ --train-dataset HPAone:splitTRAIN:modeCELL_TYPE:rootPATH/TO/DATASET \ --val-dataset HPAone:splitVAL:modeCELL_TYPE:rootPATH/TO/DATASET \ --metric-type mean_per_class_multiclass_f1 \ --crop-size 384 \ --batch-size 256 \ --resize-size 0 \ --nb_knn 1参数说明--crop-size 384提高输入分辨率--resize-size 0表示不先 Resize直接用原始分辨率裁剪--nb_knn 1用 1 近邻--metric-type决定指标类型多分类用mean_per_class_multiclass_f1。在 HPAFoV 上做 k-NN 时把HPAone替换为HPAFoV即可做蛋白定位时把metric-type换成mean_per_class_multilabel_f1。CHAMMI 基准WTC / HPA / CP 三数据集 × 四任务Channel-Adaptive 模型的跨数据集泛化能力通过 CHAMMI 基准评测。仓库在 scripts/cell_dino/launcher_knn_eval_on_chammi.sh 提供了现成启动器同目录下还有launcher_linear_eval_on_chammi.sh用于线性评估。使用步骤修改脚本开头的三个变量CHAMMI_DATA_PATH数据根目录、CHANNEL_AGNOSTIC_CELL_MODEL模型权重路径、OUTPUT_DIR输出目录依次运行第一个参数是数据集 WTC/HPA/CP第二个是任务编号./launcher_knn_eval_on_chammi.sh WTC TASK_ONE ; ./launcher_knn_eval_on_chammi.sh WTC TASK_TWO ; ./launcher_knn_eval_on_chammi.sh HPA TASK_ONE ; ./launcher_knn_eval_on_chammi.sh HPA TASK_TWO ; ./launcher_knn_eval_on_chammi.sh HPA TASK_THREE ; ./launcher_knn_eval_on_chammi.sh CP TASK_ONE ; ./launcher_knn_eval_on_chammi.sh CP TASK_TWO ; ./launcher_knn_eval_on_chammi.sh CP TASK_THREE ; ./launcher_knn_eval_on_chammi.sh CP TASK_FOUR ;线性评估同理改用launcher_CHAMMI_eval.sh脚本会设置PYTHONPATH..:../../dinov2/data并使用vitl16_channel_adaptive_pretrain.yaml配置与--bag-of-channels。脚本细节值得注意CHAMMI_$1会拼成CHAMMI_CP/CHAMMI_HPA/CHAMMI_WTC对应 dinov2/data/datasets/cell_dino/ 下的chammi_cp.py、chammi_hpa.py、chammi_wtc.py三个数据加载器数据来自 CHAMMI 论文的morphem70k_v2.csv元数据TASK_FOUR与HPA/TASK_THREE会额外追加--leave-one-out-dataset参数指向enriched_meta.csv做留一法评测chammi_cp.py中CLASS_LABELS定义了 7 个化合物类别其中BRD-K11129031只在 TASK_FOUR 中出现这正是需要留一法的原因默认--crop-size 224 --resize-size 256 --batch-size 32 --metric-type mean_per_class_multiclass_f1。CHAMMI 已复现结果仓库文档提供了 knn 与 Linear 两种方法的复现结果与论文对照方法WTC-T1WTC-T2HPA-T1HPA-T2HPA-T3CP-T1CP-T2CP-T3CP-T4knn 复现80.379.391.661.429.089.857.623.418.4knn 论文79.479.086.659.329.692.657.622.118.5Linear 复现89.987.992.787.266.289.959.826.632.5Linear 论文90.589.288.384.765.090.560.525.832.7指标为 F1 分数。复现值与论文数值的细微差异源于数据版本与训练细节整体趋势一致具体以 docs/README_CHANNEL_ADAPTIVE_DINO.md 为准。快速推理示例若只想用现成权重跑一次推理可参考 notebooks/cell_dino/inference.ipynb配合数据包中的sample_images即可快速验证。权重可通过 torchhub 加载入口在 dinov2/hub/cell_dino/backbones.pyCell-DINO 与 Channel-Adaptive DINO 权重均在此发布。许可证与引用代码Cell-DINO 代码基于 CC BY-NC 许可发布详见 LICENSE_CELL_DINO_CODE模型权重基于 FAIR 非商业研究许可发布详见 LICENSE_CELL_DINO_MODELS社区规范贡献指南见 CONTRIBUTING.md行为准则见 CODE_OF_CONDUCT.md。引用 Cell-DINO论文在审于 PloS One Computational Biology2025misc{, title{Cell-DINO: Self-Supervised Image-based Embeddings for Cell Fluorescent Microscopy}, author{Moutakanni, Th\eo and Couprie, Camille and Yi, Seungeun and Gardes, Elouan Gardes and Bojanowski, Piotr and Touvron, Hugo and Doron, Michael and Chen, Zitong S. and Moshkov, Nikita and Caron, Mathilde and Joulin, Armand and Pernice, Wolfgang M. and Caicedo, Juan C.}, journal{in review to PloS One on Computational Biology}, year{2025} }若同时使用 Channel-Adaptive DINO 或其 DINOv2 基础可一并引用 Scaling Channel-Adaptive Self-Supervised LearningTMLR, 2025与 DINOv2: Learning Robust Visual Features without SupervisionarXiv:2304.07193完整 BibTeX 见 docs/README_CHANNEL_ADAPTIVE_DINO.md。小结Cell-DINO 把 DINOv2 的自监督范式成功迁移到细胞荧光显微图像通过 4 通道输入、细胞专用增强通道随机遮蔽、蛋白质通道对比度扰动、自归一化与 iBOT 局部裁剪蒸馏在 HPAone 上以约 2 天 / 32 GPU 的训练成本达到 78.5 的线性 F1。在此基础上Channel-Adaptive DINO 进一步用 Bag of Channels 把模型推广到任意通道数的多数据集场景并在 CHAMMI 基准的 9 个任务上验证了跨数据集泛化能力。无论是复现论文结果、在自有荧光数据上预训练还是直接加载权重做下游分析本文给出的命令与配置都可以直接作为起点。【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表