🚀 Kaiko midnight
Midnightは、病理学の最先端の基礎モデルを桁違いに少ないデータで訓練する手法です。この手法は、大量の全スライド画像(WSI)を使わずに、高い性能を達成することができます。
🚀 クイックスタート
このリポジトリには、論文「Training state-of-the-art pathology foundation models with orders of magnitude less data」で提示されたMidnight-12kモデルのチェックポイントが含まれています。私たちのアプローチは、他の主要な病理学の基礎モデル(FM)と比較して、大幅に少ない全スライド画像(WSI)で訓練されながらも、競争力のある性能を達成しています。
✨ 主な機能
私たちは、DINOv2に基づいた改良された自己教師付き学習フレームワークを提案しています。このフレームワークは、コンピューター病理学に特化したモデル性能を最適化するための修正を含んでいます。主な貢献は以下の通りです。
- 大幅に削減されたデータ(最大100倍少ないWSI)で訓練された3つの新しい病理学FM。
- 埋め込み品質を向上させるための高解像度事後訓練の導入。
📦 インストール
本READMEにはインストール手順に関する記載がありません。
💻 使用例
基本的な使用法
from transformers import AutoImageProcessor, AutoModel
from PIL import Image
import requests
from torchvision.transforms import v2
url = 'https://upload.wikimedia.org/wikipedia/commons/8/80/Breast_DCIS_histopathology_%281%29.jpg'
image = Image.open(requests.get(url, stream=True).raw)
transform = v2.Compose(
[
v2.Resize(224),
v2.CenterCrop(224),
v2.ToTensor(),
v2.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)),
]
)
model = AutoModel.from_pretrained('kaiko-ai/midnight')
高度な使用法
分類用の埋め込みを抽出する
import torch
def extract_classification_embedding(tensor):
cls_embedding, patch_embeddings = tensor[:, 0, :], tensor[:, 1:, :]
return torch.cat([cls_embedding, patch_embeddings.mean(1)], dim=-1)
batch = transform(image).unsqueeze(dim=0)
embedding = extract_classification_embedding(model(batch).last_hidden_state)
print(f"Embedding shape: {embedding[0].shape}")
セグメンテーション用の埋め込みを抽出する
import math
import torch
def extract_segmentation_embedding(tensor):
features = tensor[:, 1:, :].permute(0, 2, 1)
batch_size, hidden_size, patch_grid = features.shape
height = width = int(math.sqrt(patch_grid))
return features.view(batch_size, hidden_size, height, width)
batch = transform(image).unsqueeze(dim=0)
embedding = extract_segmentation_embedding(model(batch).last_hidden_state)
print(f"Embedding shape: {embedding[0].shape}")
📚 ドキュメント
モデルの特徴
- Midnight-12k:公開されているTCGAデータセット(12kのWSI)のみで訓練されました。
- Midnight-92k:TCGAとオランダがん研究所(NKI-80k)からの追加の独自データセットで訓練されました。
- Midnight-92k/392:高解像度事後訓練で微調整された、最も性能の高いモデルです。
モデルの重み
- Midnight-12k:許容的なMITライセンスの下で公開されています。
- Midnight-92kとMidnight-92k/392:独自データセットで訓練されており、アクセスが制限されています。
訓練データセット
データセット |
WSI数 |
データソース |
コメント |
TCGA |
12k |
公開データ |
FFPEのみ |
NKI-80k |
80k |
独自データ |
10,141人の患者、31の臓器 |
訓練コンポーネント
- DINOv2:DINOv2を使用した自己教師付き学習。
- KDE正則化器:DINOv2のKoLeoを置き換えて、埋め込みの多様性と訓練の安定性を確保します。
- オンラインパッチング:有益なタイルを効率的にリアルタイムで抽出します。
- 色の増強(HED):染色の変動に対するロバスト性を高めます。
- タイルフィルタリング:情報量の少ない組織領域を削除します。
評価
私たちは、2つのオープンソースのベンチマークを使用して、モデルを包括的に評価しました。
- eva:タイル(分類、セグメンテーション)およびスライドレベルのタスクに使用。
- HEST:遺伝子発現予測タスク(回帰)に使用。
私たちの最良のモデルであるMidnight-92k/392は、Virchow2やUNI-2などの主要なモデルを常に上回るか、同等の性能を発揮しています。
結果の要約
モデル |
平均 |
PCam 10ショット |
BACH |
BRACS |
BreaKHis |
CRC |
Gleason |
MHIST |
PCam |
Cam16(小) |
Panda(小) |
CoNSeP |
MoNuSAC |
HEST |
Midnight-92k/392 |
0.778 |
0.900 |
0.904 |
0.646 |
0.802 |
0.966 |
0.807 |
0.828 |
0.951 |
0.868 |
0.651 |
0.662 |
0.708 |
0.415 |
UNI-2 |
0.776 |
0.885 |
0.924 |
0.651 |
0.863 |
0.970 |
0.777 |
0.829 |
0.951 |
0.873 |
0.666 |
0.626 |
0.644 |
0.431 |
Midnight-92k |
0.767 |
0.882 |
0.889 |
0.615 |
0.793 |
0.967 |
0.823 |
0.831 |
0.948 |
0.872 |
0.643 |
0.629 |
0.656 |
0.425 |
Virchow2 |
0.766 |
0.835 |
0.890 |
0.633 |
0.818 |
0.966 |
0.791 |
0.865 |
0.938 |
0.860 |
0.646 |
0.640 |
0.674 |
0.403 |
Midnight-12k |
0.763 |
0.803 |
0.907 |
0.639 |
0.840 |
0.967 |
0.790 |
0.815 |
0.931 |
0.869 |
0.656 |
0.625 |
0.664 |
0.412 |
Kaiko-B8 |
0.757 |
0.799 |
0.876 |
0.641 |
0.842 |
0.960 |
0.761 |
0.830 |
0.920 |
0.836 |
0.650 |
0.644 |
0.686 |
0.391 |
H-Optimus-0 |
0.755 |
0.831 |
0.752 |
0.620 |
0.813 |
0.962 |
0.769 |
0.850 |
0.943 |
0.847 |
0.672 |
0.644 |
0.687 |
0.425 |
Prov_GigaPath |
0.752 |
0.853 |
0.794 |
0.626 |
0.846 |
0.959 |
0.727 |
0.831 |
0.944 |
0.812 |
0.657 |
0.628 |
0.688 |
0.405 |
Hibou-L |
0.751 |
0.825 |
0.792 |
0.643 |
0.767 |
0.954 |
0.766 |
0.850 |
0.949 |
0.852 |
0.654 |
0.646 |
0.668 |
0.397 |
UNI |
0.749 |
0.833 |
0.797 |
0.613 |
0.808 |
0.954 |
0.759 |
0.841 |
0.937 |
0.854 |
0.662 |
0.627 |
0.662 |
0.391 |
Phikon |
0.724 |
0.826 |
0.744 |
0.579 |
0.715 |
0.946 |
0.743 |
0.824 |
0.919 |
0.822 |
0.648 |
0.624 |
0.644 |
0.377 |
Phikon-v2 |
0.718 |
0.756 |
0.737 |
0.607 |
0.725 |
0.953 |
0.753 |
0.796 |
0.900 |
0.807 |
0.634 |
0.626 |
0.645 |
0.391 |
Lunit |
0.714 |
0.763 |
0.785 |
0.627 |
0.759 |
0.943 |
0.758 |
0.785 |
0.905 |
0.759 |
0.604 |
0.600 |
0.630 |
0.362 |
vitg14 (nat. img.) |
0.674 |
0.721 |
0.724 |
0.578 |
0.783 |
0.943 |
0.740 |
0.855 |
0.881 |
0.500 |
0.509 |
0.565 |
0.614 |
0.351 |
vitg14 (initial) |
0.493 |
0.652 |
0.474 |
0.413 |
0.425 |
0.754 |
0.459 |
0.578 |
0.763 |
0.526 |
0.304 |
0.462 |
0.432 |
0.166 |
🔧 技術詳細
本READMEには技術詳細に関する記載がありません。
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。
📚 引用
@article{KDK2025,
title={Training state-of-the-art pathology foundation models with orders of magnitude less data},
author={Mikhail Karasikov and Joost van Doorn and Nicolas Känzig and Melis Erdal Cesur and Hugo Mark Horlings and Robert Berke and Fei Tang and Sebastian Otálora},
year={2025},
journal={arXiv preprint arXiv:2504.05186},
url={https://arxiv.org/abs/2504.05186},
}
