Loki Annotate - Marker Genes

This notebook demonstrates how to run Loki Annotate on the demo mark genes validation dataset. It takes about 10 seconds to run this notebook on MacBook Pro.

[1]:
import pandas as pd
import os
import torch
from PIL import Image
import matplotlib.pyplot as plt

import loki.annotate
import loki.preprocess
import loki.utils
import loki.plot
%matplotlib inline
/opt/anaconda3/envs/loki/lib/python3.9/site-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)

We provide the embeddings generated from the OmiCLIP model. The sample data and embeddings are stored in the directory data/loki_annotate/marker_gene_data, which can be donwloaded from Google Drive link.

Here is a list of the files that are needed to run the tissue annotation on the demo validation dataset:

.
├── checkpoint_val
│   ├── val_image_embeddings.pt
│   └── val_text_embeddings.pt
└── demo_validation_data
    ├── ADI-TCGA-AAWDNKDK.tif
    ├── ADI-TCGA-CHWDWGEK.tif
    ├── ADI-TCGA-RGCKQTPN.tif
    ├── ADI-TCGA-RRHWRPTE.tif
    ├── ADI-TCGA-YDAHSPAR.tif
    ├── LYM-TCGA-AKGHMWKD.tif
    ├── LYM-TCGA-AMVASFYP.tif
    ├── LYM-TCGA-AYMAHWFQ.tif
    ├── LYM-TCGA-VWAYKKDM.tif
    ├── LYM-TCGA-WSHPCMIR.tif
    ├── MUS-TCGA-AASRLCCT.tif
    ├── MUS-TCGA-CDFYVLPN.tif
    ├── MUS-TCGA-CIFAPIID.tif
    ├── MUS-TCGA-ELFVYKYW.tif
    ├── MUS-TCGA-QSQCNCSP.tif
    ├── NORM-TCGA-ACCEDPAW.tif
    ├── NORM-TCGA-AFFFQQST.tif
    ├── NORM-TCGA-APSNTVTS.tif
    ├── NORM-TCGA-EPIQVVLF.tif
    ├── NORM-TCGA-FTGGIFEL.tif
    ├── TUM-TCGA-CVGTRDRC.tif
    ├── TUM-TCGA-DPRWETWM.tif
    ├── TUM-TCGA-TKLWWMII.tif
    ├── TUM-TCGA-TLSHWGSQ.tif
    ├── TUM-TCGA-YTPCKKYY.tif
    └── image_names.txt
[2]:
data_path = './data/loki_annotate/marker_gene_data/'
[3]:
filenames = pd.read_csv(os.path.join(data_path, 'demo_validation_data', 'image_names.txt'), header=None)[0].tolist()
[4]:
classes = ['Tumor',
           'Adipose',
           'Muscle',
           'Lymphocytes',
           'Normal colon mucosa',]

Loki Annote with marker genes

Use Loki Annotate to annotate tumor, adipose, muscle, lymphocytes, and normal colon mucosa tissue patch images using corresponding marker genes.

[5]:
# text = ['TP53 EPCAM KRAS EGFR DEFA5 DEFA6 CEACAM5 CEA KRT18 KRT8 KRT19 CDH17 CK20 MYO6 TP53BP2 PLA2G2A CLDN7 TJP1 PKP3 DSP',
#         'FABP4 ADIPOQ LEP ACSL1 APOE GPAM FABP1 CEBPA LIPE ADIPOR1 ADIPOR2',
#         'MYL6 MYL9 TPM2 TPM1 DES MYH11 COL3A1 CALD1 MYLK SMTN NPPA TNNT2 LMOD1 ACTA2 CNN1 MYOCD ACTA1 MYLK2',
#         'TRBC2 IL2 IL2RA IL2RB IL4 TNF LAPTM5 TERF2IP ATF6 CD79A CD3D CD24 CD3E CD4 CD8A CD25 CD34 CD45 CD56 CD69',
#         'CDX2 SI LCT VIL1 FABP2 KRT20 SLC5A1 SLC26A3 SLC9A3 GSTA1 TFF3 CDH17 GUCY2C GUCA2A GUCA2B AQP8 GCG']
all_text_embeddings = torch.load(os.path.join(data_path, 'checkpoint_val', 'val_text_embeddings.pt'))
all_image_embeddings = torch.load(os.path.join(data_path, 'checkpoint_val', 'val_image_embeddings.pt'))
[6]:
i=0
for image_name in filenames:
    image_path =os.path.join(data_path, 'demo_validation_data', image_name)
    image = Image.open(image_path)

    image_embeddings = all_image_embeddings[i]
    dot_similarity, pred_class = loki.annotate.annotate_with_marker_genes(classes, image_embeddings, all_text_embeddings)

    plt.figure(figsize=(1.5,1.5), dpi=120)
    plt.imshow(image)
    plt.axis("off")
    plt.title(print("Predicted class:", pred_class))
    plt.title(print("Similarity scores:", [f"{cls}: {score:.3f}" for cls, score in zip(classes, dot_similarity)]))
    plt.show()

    i=i+1
Predicted class: Adipose
Similarity scores: ['Tumor: 0.341', 'Adipose: 0.391', 'Muscle: 0.328', 'Lymphocytes: 0.303', 'Normal colon mucosa: 0.349']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_1.png
Predicted class: Adipose
Similarity scores: ['Tumor: 0.315', 'Adipose: 0.390', 'Muscle: 0.358', 'Lymphocytes: 0.309', 'Normal colon mucosa: 0.342']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_3.png
Predicted class: Adipose
Similarity scores: ['Tumor: 0.341', 'Adipose: 0.372', 'Muscle: 0.336', 'Lymphocytes: 0.313', 'Normal colon mucosa: 0.321']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_5.png
Predicted class: Adipose
Similarity scores: ['Tumor: 0.326', 'Adipose: 0.393', 'Muscle: 0.352', 'Lymphocytes: 0.310', 'Normal colon mucosa: 0.355']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_7.png
Predicted class: Adipose
Similarity scores: ['Tumor: 0.319', 'Adipose: 0.420', 'Muscle: 0.327', 'Lymphocytes: 0.322', 'Normal colon mucosa: 0.319']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_9.png
Predicted class: Muscle
Similarity scores: ['Tumor: 0.342', 'Adipose: 0.320', 'Muscle: 0.365', 'Lymphocytes: 0.319', 'Normal colon mucosa: 0.312']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_11.png
Predicted class: Muscle
Similarity scores: ['Tumor: 0.356', 'Adipose: 0.322', 'Muscle: 0.363', 'Lymphocytes: 0.316', 'Normal colon mucosa: 0.320']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_13.png
Predicted class: Muscle
Similarity scores: ['Tumor: 0.352', 'Adipose: 0.323', 'Muscle: 0.361', 'Lymphocytes: 0.314', 'Normal colon mucosa: 0.308']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_15.png
Predicted class: Muscle
Similarity scores: ['Tumor: 0.353', 'Adipose: 0.333', 'Muscle: 0.368', 'Lymphocytes: 0.332', 'Normal colon mucosa: 0.291']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_17.png
Predicted class: Muscle
Similarity scores: ['Tumor: 0.353', 'Adipose: 0.334', 'Muscle: 0.371', 'Lymphocytes: 0.302', 'Normal colon mucosa: 0.338']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_19.png
Predicted class: Normal colon mucosa
Similarity scores: ['Tumor: 0.378', 'Adipose: 0.372', 'Muscle: 0.351', 'Lymphocytes: 0.314', 'Normal colon mucosa: 0.386']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_21.png
Predicted class: Normal colon mucosa
Similarity scores: ['Tumor: 0.346', 'Adipose: 0.354', 'Muscle: 0.336', 'Lymphocytes: 0.333', 'Normal colon mucosa: 0.360']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_23.png
Predicted class: Normal colon mucosa
Similarity scores: ['Tumor: 0.351', 'Adipose: 0.333', 'Muscle: 0.297', 'Lymphocytes: 0.323', 'Normal colon mucosa: 0.355']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_25.png
Predicted class: Normal colon mucosa
Similarity scores: ['Tumor: 0.343', 'Adipose: 0.339', 'Muscle: 0.320', 'Lymphocytes: 0.328', 'Normal colon mucosa: 0.360']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_27.png
Predicted class: Normal colon mucosa
Similarity scores: ['Tumor: 0.350', 'Adipose: 0.329', 'Muscle: 0.301', 'Lymphocytes: 0.340', 'Normal colon mucosa: 0.359']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_29.png
Predicted class: Tumor
Similarity scores: ['Tumor: 0.403', 'Adipose: 0.345', 'Muscle: 0.326', 'Lymphocytes: 0.318', 'Normal colon mucosa: 0.382']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_31.png
Predicted class: Tumor
Similarity scores: ['Tumor: 0.393', 'Adipose: 0.343', 'Muscle: 0.336', 'Lymphocytes: 0.323', 'Normal colon mucosa: 0.372']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_33.png
Predicted class: Tumor
Similarity scores: ['Tumor: 0.399', 'Adipose: 0.343', 'Muscle: 0.326', 'Lymphocytes: 0.319', 'Normal colon mucosa: 0.380']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_35.png
Predicted class: Tumor
Similarity scores: ['Tumor: 0.391', 'Adipose: 0.321', 'Muscle: 0.310', 'Lymphocytes: 0.312', 'Normal colon mucosa: 0.369']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_37.png
Predicted class: Tumor
Similarity scores: ['Tumor: 0.398', 'Adipose: 0.333', 'Muscle: 0.311', 'Lymphocytes: 0.311', 'Normal colon mucosa: 0.374']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_39.png
Predicted class: Lymphocytes
Similarity scores: ['Tumor: 0.342', 'Adipose: 0.325', 'Muscle: 0.297', 'Lymphocytes: 0.355', 'Normal colon mucosa: 0.348']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_41.png
Predicted class: Lymphocytes
Similarity scores: ['Tumor: 0.341', 'Adipose: 0.313', 'Muscle: 0.301', 'Lymphocytes: 0.345', 'Normal colon mucosa: 0.345']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_43.png
Predicted class: Lymphocytes
Similarity scores: ['Tumor: 0.344', 'Adipose: 0.313', 'Muscle: 0.301', 'Lymphocytes: 0.346', 'Normal colon mucosa: 0.343']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_45.png
Predicted class: Lymphocytes
Similarity scores: ['Tumor: 0.356', 'Adipose: 0.328', 'Muscle: 0.303', 'Lymphocytes: 0.357', 'Normal colon mucosa: 0.355']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_47.png
Predicted class: Lymphocytes
Similarity scores: ['Tumor: 0.337', 'Adipose: 0.318', 'Muscle: 0.298', 'Lymphocytes: 0.346', 'Normal colon mucosa: 0.343']
../_images/notebooks_Loki_Annotate_case_study_marker_genes_8_49.png
[ ]: