Views
No views yet
1from transformers import AutoImageProcessor, AutoModel
2from PIL import Image
3import requests
4from torchvision.transforms import v2
5
6url = 'https://upload.wikimedia.org/wikipedia/commons/8/80/Breast_DCIS_histopathology_%281%29.jpg'
7image = Image.open(requests.get(url, stream=True).raw)
8
9transform = v2.Compose(
10 [
11 v2.Resize(224),
12 v2.CenterCrop(224),
13 v2.ToTensor(),
14 v2.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)),
15 ]
16)
17model = AutoModel.from_pretrained('kaiko-ai/midnight')1import torch
2
3def extract_classification_embedding(tensor):
4 cls_embedding, patch_embeddings = tensor[:, 0, :], tensor[:, 1:, :]
5 return torch.cat([cls_embedding, patch_embeddings.mean(1)], dim=-1)
6
7batch = transform(image).unsqueeze(dim=0)
8embedding = extract_classification_embedding(model(batch).last_hidden_state)
9print(f"Embedding shape: {embedding[0].shape}")1import math
2import torch
3
4def extract_segmentation_embedding(tensor):
5 features = tensor[:, 1:, :].permute(0, 2, 1)
6 batch_size, hidden_size, patch_grid = features.shape
7 height = width = int(math.sqrt(patch_grid))
8 return features.view(batch_size, hidden_size, height, width)
9
10batch = transform(image).unsqueeze(dim=0)
11embedding = extract_segmentation_embedding(model(batch).last_hidden_state)
12print(f"Embedding shape: {embedding[0].shape}")| Dataset | WSIs | Source | Comment |
|---|---|---|---|
| TCGA | 12k | Public | FFPE only |
| NKI-80k | 80k | Proprietary | 10,141 patients, 31 organs |
| Model | AVG. | PCam 10 shots | BACH | BRACS | BreaKHis | CRC | Gleason | MHIST | PCam | Cam16 (small) | Panda (small) | 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 |
1@article{KDK2025,
2 title={Training state-of-the-art pathology foundation models with orders of magnitude less data},
3 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},
4 year={2025},
5 journal={arXiv preprint arXiv:2504.05186},
6 url={https://arxiv.org/abs/2504.05186},
7}