Présentation
MONAI est le framework standard basé sur PyTorch pour le deep learning en imagerie médicale. Utilisez-le pour la segmentation, la classification, l'enregistrement, le prétraitement et les pipelines d'entraînement sur les formats d'images médicales DICOM, NIfTI et autres.
Installation
uv pip install monai
# extras optionnels selon les besoins
uv pip install monai[all]
Points forts
MONAI vous propose :
- des transformations conscientes des images médicales
- des architectures spécialisées comme UNet, UNETR, SwinUNETR
- des fonctions de perte comme DiceLoss et DiceCELoss
- des métriques comme Dice et la distance de Hausdorff
- des utilitaires de dataset et engine pour les boucles d'entraînement
Modèle de segmentation 3D basique
import torch
from monai.networks.nets import UNet
from monai.networks.layers import Norm
model = UNet(
spatial_dims=3,
in_channels=1,
out_channels=3,
channels=(16, 32, 64, 128, 256),
strides=(2, 2, 2, 2),
num_res_units=2,
norm=Norm.BATCH,
).cuda()
Transformations de prétraitement
from monai.transforms import (
Compose, LoadImaged, EnsureChannelFirstd, Spacingd,
Orientationd, ScaleIntensityRanged, CropForegroundd,
RandCropByPosNegLabeld, RandFlipd, EnsureTyped,
)
train_transforms = Compose([
LoadImaged(keys=['image', 'label']),
EnsureChannelFirstd(keys=['image', 'label']),
Orientationd(keys=['image', 'label'], axcodes='RAS'),
Spacingd(keys=['image', 'label'], pixdim=(1.5, 1.5, 2.0), mode=('bilinear', 'nearest')),
ScaleIntensityRanged(keys=['image'], a_min=-200, a_max=300, b_min=0.0, b_max=1.0, clip=True),
CropForegroundd(keys=['image', 'label'], source_key='image'),
RandCropByPosNegLabeld(keys=['image', 'label'], label_key='label', spatial_size=(96, 96, 96), num_samples=4),
RandFlipd(keys=['image', 'label'], prob=0.5, spatial_axis=0),
EnsureTyped(keys=['image', 'label']),
])
Perte + métrique
from monai.losses import DiceCELoss
from monai.metrics import DiceMetric
loss_fn = DiceCELoss(to_onehot_y=True, softmax=True)
dice_metric = DiceMetric(include_background=False, reduction='mean')
Flux de travail
- Normalisez d'abord l'orientation et l'espacement de l'image.
- Utilisez les modes de transformation sûrs pour les labels : bilinéaire pour les images, nearest pour les labels.
- Commencez par les architectures de référence MONAI avant d'en inventer de personnalisées.
- Vérifiez les hypothèses d'espacement voxel avant l'entraînement.
- Suivez le Dice par classe, pas seulement la perte agrégée.
- Enregistrez la configuration de prétraitement avec le modèle pour que l'inférence corresponde à l'entraînement.