Source code for tiatoolbox.models.architecture.idars

"""Defines CNNs as used in IDaRS for prediction of molecular pathways and mutations."""

import numpy as np
from torchvision import transforms

from tiatoolbox.models.architecture.vanilla import CNNModel

TRANSFORM = transforms.Compose(
    [
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.1, 0.1, 0.1]),
    ]
)


[docs]class IDaRS(CNNModel): """Initialise IDaRS and add custom preprocessing as used in the original paper [1]. The tiatoolbox model should produce the following results: .. list-table:: IDaRS performance measured by AUROC. :widths: 15 15 15 15 15 15 15 :header-rows: 1 * - - MSI - TP53 - BRAF - CIMP - CIN - HM * - Bilal et al. - 0.828 - 0.755 - 0.813 - 0.853 - 0.860 - 0.846 * - TIAToolbox - 0.870 - 0.747 - 0.750 - 0.748 - 0.810 - 0.790 Args: backbone (str): Model name. num_classes (int): Number of classes output by model. References: [1] Bilal, Mohsin, et al. "Development and validation of a weakly supervised deep learning framework to predict the status of molecular pathways and key mutations in colorectal cancer from routine histology images: a retrospective study." The Lancet Digital Health 3.12 (2021): e763-e772. """ def __init__(self, backbone, num_classes=1): super().__init__(backbone, num_classes=num_classes)
[docs] @staticmethod # noqa: E800 def preproc(image: np.ndarray): """Define preprocessing steps. Args: img (:class:`numpy.ndarray`): An image of shape HWC. Return: img (:class:`torch.Tensor`): An image of shape HWC. """ image = image.copy() image = TRANSFORM(image) # toTensor will turn image to CHW so we transpose again return image.permute(1, 2, 0)