如何用 Cell-DINO 在 HPAone 上运行蛋白质定位线性评估并得到 mean_per_class_multilabel_f1?
2026/9/15 16:26:31 网站建设 项目流程

如何用 Cell-DINO 在 HPAone 上运行蛋白质定位线性评估并得到 mean_per_class_multilabel_f1?

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

如果你已经拿到一个 Cell-DINO(ViT-L/16)模型权重,想验证它在 HPAone(HPA 单细胞)数据集上的蛋白质定位(protein localization)能力,本文给出仓库 docs/README_CELL_DINO.md 中的完整操作路径:冻结骨干网络、只训练线性分类头,并用mean_per_class_multilabel_f1作为验证指标。评估在单个节点上运行,跑完后你会在输出目录得到 best classifier 名称和对应的 F1 数值。

准备条件

1. 环境

按 docs/README_CELL_DINO.md 的安装说明,构建 Python 3.10 环境并安装依赖:

conda create -n py310 python=3.10 conda activate py310 pip install -r requirements.txt pip install -U scikit-learn

运行评估命令时必须让dinov2包位于 Python 模块搜索路径中,即命令前加PYTHONPATH=.(评估脚本实际写作PYTHONPATH=.:dinov2/data,因为需要直接引用dinov2/data下的数据集模块)。

2. 数据

HPA-FoV 和 HPA single cell(HPAone)数据集的下载入口见 docs/README_CELL_DINO.md 的 “Data preparation” 一节(文档给出了 EBI BioStudies 数据页链接,请自行查阅原文获取)。

HPAone 的数据加载器(dinov2/data/datasets/cell_dino/hpaone.py,dataloader : HPAone.py)要求数据集根目录下有以下 5 个文件:

  • fixed_size_masked_single_cells_HPA
  • varied_size_masked_single_cells_HPA
  • varied_size_masked_single_cells_pretrain_20240507.csv
  • fixed_size_masked_single_cells_evaluation_20240507.csv
  • fixed_size_masked_single_cells_pretrain_20240507.csv

其中训练 split(TRAIN)读取fixed_size_masked_single_cells_pretrain_20240507.csv,验证 split(VAL)读取fixed_size_masked_single_cells_evaluation_20240507.csv,图像统一从fixed_size_masked_single_cells_HPA目录加载。

蛋白质定位任务使用多标签(multilabel)标注:hpaone.py中定义的PROTEIN_LOCALIZATION共 19 个类别(如nucleoplasmmitochondrianuclear membrane等),每张图对应一个 19 维 0/1 标签向量。

3. 模型权重

--pretrained-weights需要一个检查点文件,文档给出两种来源:

  • 自训练产物:用 dinov2/run/train/train.py 在 HPAone 上训练时,训练代码每隔 9000 次迭代把 teacher 权重保存到eval文件夹。文档示例用的是<训练输出目录>/eval/training_44999/teacher_checkpoint.pth(迭代号随你的训练进度而定)。
  • 官方发布的预训练权重:README 指出下载说明在根目录 README.md 末尾 “DINO for Biology” 一节,HPA single cell 模型对应 hubconf 入口cell_dino_hpa_vitl16(见 dinov2/hub/cell_dino/backbones.py)。

执行线性评估

蛋白质定位任务的评估命令来自 docs/README_CELL_DINO.md:

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:split=TRAIN:mode=PROTEIN_LOCALIZATION:root=<PATH/TO/DATASET> \ --val-dataset HPAone:split=VAL:mode=PROTEIN_LOCALIZATION:root=<PATH/TO/DATASET> \ --val-metric-type mean_per_class_multilabel_f1 \ --loss-type binary_cross_entropy \ --avgpool

占位符替换说明(均沿用文档中的写法):

  • <CHECKPOINT/PATH>:上面第 3 小节准备的一个检查点路径,训练产物示例为<PATH/TO/OUTPUT/DIR>/eval/training_44999/teacher_checkpoint.pth
  • <PATH/TO/DATASET>:HPAone 数据集根目录(含上述 5 个文件);
  • <PATH/TO/OUTPUT/DIR>:评估结果与检查点输出目录,命令执行时会自动创建。

各参数的作用:

  • --config-file:指定 dinov2/configs/eval/cell_dino/vitl16_pretrain.yaml,内容为 student/teacher 均为vit_largepatch_size: 16in_chans: 4(HPA 图像为 4 通道),评估脚本据此构建并加载模型;
  • --train-dataset/--val-dataset数据集名:split=...:mode=...:root=...格式,mode=PROTEIN_LOCALIZATION决定加载 19 维多标签标注;换到 HPAFoV 时按文档说明把HPAone替换为HPAFoV并加载对应模型权重;
  • --val-metric-type mean_per_class_multilabel_f1:验证指标,在 dinov2/eval/metrics.py 中映射为MultilabelF1Score(num_labels=19, average="macro"),即每个定位类别先算 F1 再取宏平均;
  • --loss-type binary_cross_entropy:线性头损失用nn.BCEWithLogitsLoss()(多标签必需;细胞系分类任务则用默认 cross entropy);
  • --avgpool:在线性输入中额外拼接 patch tokens 的平均池化结果(除 CLS token 外)。

脚本内部行为(见 dinov2/eval/cell_dino/linear.py):骨干网络冻结,只训练LinearClassifier线性头;优化器为 AdamW,默认调度器 CosineAnnealingLR;学习率在 16 个候选值上做网格搜索,weight decay 在[0.0, 0.0001, 1.0e-05]中搜索,每个 (lr, wd) 组合各训一个线性头,默认epochs=30epoch_length=145batch_size=64。每eval_period_iterations次迭代在验证集上评一次,F1 最高的分类头会被记为 best classifier 并保存。

一个需要留意的文档差异:README 中“评估官方预训练权重”的蛋白质定位命令写的是python dinov2/run/eval/linear_celldino.py,但该路径在当前仓库中不存在;仓库内实际存在的是dinov2/run/eval/cell_dino/linear.py(README 中训练 checkpoint 评估与细胞系分类命令均用它)。本文使用存在的路径。

结果验证

评估过程与结果落在两处:

  1. 日志:训练中周期性打印running validation !、每个候选头的指标行、best classifier: {'name': ..., 'accuracy': ...};结束前打印Test Results Dict ...,其中 best classifier 对应的数值即最终成绩(代码中该主指标为 F1 × 100)。
  2. 输出文件<PATH/TO/OUTPUT/DIR>/results_eval_linear.json,主进程每次评估都会向其中追加iter: <迭代号>和 best_classifier 的 JSON 记录,可直接查看最后一轮结果。

判断标准参考文档给出的数值:按 README 的训练配方(4 个 A100-80GB 节点、约 2 天)在 HPAone 上训练的模型,线性评估的蛋白质定位 F1 应达到 78.5。不同权重和超参组合下结果会有出入,以你自己输出目录中的results_eval_linear.json为准,文档未承诺其他固定数值。

边界与说明

  • 该评估脚本文档定位为“single node”运行;命令通过 submitit 启动(dinov2/run/eval/cell_dino/linear.py 只是 Evaluator 的 submitit launcher)。
  • 仓库代码与模型权重仅供研究使用,不用于临床诊断等医疗场景(docs/README_CELL_DINO.md 有明确声明)。
  • 细胞系分类(CELL_TYPE)任务与本场景是独立任务:需要mode=CELL_TYPE--val-metric-type mean_per_class_multiclass_f1,且不需要--loss-type binary_cross_entropy,命令见 README 对应小节。

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

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

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

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

立即咨询