DINOv2 细胞图像分析指南:从 0 标注荧光图到蛋白质定位,三步跑通
【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2
DINOv2 是 Meta 在 1.42 亿张无标注图片上预训练的视觉 Transformer 自监督学习框架。本指南带你用它的 Cell-DINO 与 XRay-DINO 扩展,把细胞图像分析、蛋白质亚细胞定位、药物扰动筛选、医学影像变成"加载权重就能推理"的事。适合有 Python 基础、刚接触无标签预训练的生物医学新手和普通开发者。
先看用途:三个能直接上手的应用场景
🔬 蛋白质亚细胞定位(Human Protein Atlas)痛点:亚细胞定位标签要靠生物学家一张张看,标几万张视野成本高。 做法:加载cell_dino_hpa_vitl16(4 通道输入)提特征,上面只训练一个线性探针。 收益:多标签 F1 78.5,骨干网络完全不用重训。
药物扰动筛选(Cell Painting)痛点:5 通道、128×128 的单细胞图动辄数万张,肉眼分群不现实。 做法:用cell_dino_cp_vits8提特征,直接接 kNN 或聚类。 收益:CHAMMI 基准 CP Task1 上,线性探针做到 89.9。
X 光医学影像痛点:灰度 X 光图尺寸大、偏灰,通用自然图像模型适配差。 做法:xray_dino_vitl16按 512×512 输入加载,零样本提特征。 收益:面向 X 光场景专门自监督预训练,省去迁移成本。
安装到第一次推理
三步装环境:先克隆仓库git clone https://gitcode.com/GitHub_Trending/di/dinov2,然后执行conda env create -f conda.yaml,再conda activate dinov2。只想跑推理的话,装好 PyTorch 也能直接走torch.hub。
最短可跑示例(标准 DINOv2 骨干):
import torch model = torch.hub.load('facebookresearch/dinov2', 'dinov2_vitb14') img = torch.randn(1, 3, 224, 224) # 换成你的真实图片张量 with torch.no_grad(): out = model(img) # 输出 patch 级特征 print(out.shape)细胞权重(Cell-DINO / XRay-DINO)需要先申请下载链接,再用pretrained_url参数加载,流程见 docs/README_CELL_DINO.md。
自蒸馏原理 30 秒版
一句话:学生模型做题,老师模型给参考答案,答案不需要人工标。
打个比方:老师像一位"慢慢更新均分的班主任"——他的参数就是学生模型的指数滑动平均,更新得很慢、因此稳定。同一张细胞图被裁剪增广成大小两个视图(全局视图和局部视图),学生要让自己的输出对得上老师在局部区域的输出。没有标签参与,监督信号全部来自"两张图其实是同一张图"这件事。ViT 把图切成 patch 做全局注意力,顺带捕捉了细胞器之间的长距离关系。
三个实测任务:数据规模 → 做法 → 关键指标
任务一:HPA 蛋白质定位
- 数据规模:HPA 单细胞与 HPA-FoV 两套 4 通道荧光数据,数据加载入口在 dinov2/data/datasets/cell_dino/。
- 做法:ViT-L/16 自监督预训练(官方参考配置:4 节点 32 张 A100,约 2 天),评估用线性探针 +
mean_per_class_multilabel_f1指标。 - 关键指标:蛋白质定位多标签 F178.5;仓库共放出 4 套权重——单细胞、FoV、高分辨率 FoV、Cell Painting 合并版。
任务二:Cell Painting 药物扰动(CHAMMI 基准)
- 数据规模:CHAMMI 合并了 WTC / HPA / CP 共 5 个显微数据集,CP 子集元数据为
morphem70k_v2.csv,属 7 万+ 样本量级。 - 做法:
cell_dino_cp_vits8(ViT-S/8,5 通道,128×128)提特征,再跑 kNN 或线性分类。 - 关键指标:CP Task1 线性89.9、kNN89.8;WTC Task1 线性89.9。
任务三:XRay 医学影像
- 数据规模:灰度 X 光图,模型按 512×512 输入、16 像素 patch 设计。
- 做法:申请权重 URL 后
torch.hub.load(REPO_DIR, 'xray_dino_vitl16', source='local', weights=<URL>),零样本提特征。 - 关键指标:仓库未附统一指标表(以原论文为准);注意权重为非商用研究许可,见
LICENSE_XRAY_DINO_MODEL。
效果对比一张表
| 对比维度 | 从零监督训练 | ImageNet 监督迁移 | DINOv2 系自监督特征 |
|---|---|---|---|
| 标注投入 | 数千张起,人工逐张 | 0(但依赖 ImageNet 标签) | 0,完全无标签预训练 |
| 见效周期 | 天~周 | 小时~天 | 线性探针数小时;ViT-B/14 ImageNet 线性 84.5% |
| 域适配成本 | 细胞图上需全量重训 | 域差距大,需重训头部与骨干 | 直接迁移;HPA 定位 F1 78.5,零重训 |
| 硬件参考 | 单卡~多卡 | 单卡 | 预训练参考:32 张 A100 约 2 天(细胞任务) |
按场景选变体
- 通用自然图 / 跨域基线:
dinov2_vits14(21M 参数)到dinov2_vitg14(1100M),ImageNet 线性 81.1%~87.0%,另有一批带 registers 的版本。 - HPA 4 通道荧光:
cell_dino_hpa_vitl16(224 输入)。 - Cell Painting 5 通道、128px:
cell_dino_cp_vits8,小模型小输入,批量推理最省资源。 - 通道数不定 / 多数据集混训:
channel_adaptive_dino_vitl16,bag-of-channels 结构,通道数可变。 - X 光影像:
xray_dino_vitl16(512 输入,非商用许可)。 - 算力紧张:优先 ViT-S 系,21M 参数,单卡轻松跑。
⚡ 提速与部署清单
- 批处理:评估脚本支持
--batch-size(kNN 示例用 256),按显存调大即可线性提速。 - FP16 混合精度:推理 notebook 在取中间层特征时已开
autocast,显存占用近乎减半:
model = model.half().cuda() with torch.cuda.amp.autocast(), torch.no_grad(): feat = model(img) # FP16 前向 torch.save(feat.cpu().float(), "feat.pt") # 缓存特征- 多卡:官方参考训练为 4 节点 × 8 张 A100(32 卡)约 2 天;ViT-L/14 在 ImageNet-22k 上用 96 卡约 3.3 天。
- 特征缓存:先一次性提取特征存盘,kNN / 线性 / 逻辑回归探针全部复用这份缓存,避免重复前向。
FAQ
Q:我需要自己标数据吗?A:不需要。预训练是纯无标签的,增广即"伪监督";下游只需要少量标签训一个线性探针。完全没有标签也可以走 kNN 检索,入口在 dinov2/run/eval/cell_dino/knn.py。
Q:几个细胞权重怎么区分?A:前三套是固定通道(HPA 4 通道 / Cell Painting 5 通道,另有 ViT-L/14 高配版);channel_adaptive_dino_vitl16用 bag-of-channels 结构,通道数任意。
Q:权重能商用吗?A:DINOv2 主体是 Apache 2.0;Cell-DINO 代码为 CC BY-NC、XRay-DINO 权重限非商用研究,三个许可文件在仓库根目录。
Q:没有大数据集,怎么先验证流程?A:HPA 数据目录附了 3 张 sample_images,notebooks/cell_dino/inference.ipynb 给出完整链路:自归一化 → 加载模型 → 出特征,十几行代码跑通。
这套框架的能力边界要清楚:生物学代码与权重仅限研究用途,不能替代临床判断;灰度医学影像、时序活细胞成像等任务在落地前仍需你自己在小样本上验证。好消息是扩展成本很低——仓库已内置 dino.txt 视觉-语言对齐推理代码(notebooks/dinotxt.ipynb),把文本指令接进细胞图像管线,是目前最值得先试的方向。
【免费下载链接】dinov2PyTorch code and models for the DINOv2 self-supervised learning method.项目地址: https://gitcode.com/GitHub_Trending/di/dinov2
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考