|
--- |
|
imports: |
|
- "$import glob" |
|
- "$import json" |
|
- "$import os" |
|
- "$import ignite" |
|
- "$from scipy import ndimage" |
|
input_channels: 1 |
|
output_classes: 3 |
|
arch_ckpt_path: "$@bundle_root + '/models/search_code_18590.pt'" |
|
arch_ckpt: "$torch.load(@arch_ckpt_path, map_location=torch.device('cuda'))" |
|
bundle_root: "." |
|
ckpt_dir: "$@bundle_root + '/models'" |
|
output_dir: "$@bundle_root + '/eval'" |
|
dataset_dir: "/workspace/data/msd/Task07_Pancreas" |
|
data_list_file_path: "$@bundle_root + '/configs/dataset_0.json'" |
|
train_datalist: "$monai.data.load_decathlon_datalist(@data_list_file_path, data_list_key='training', |
|
base_dir=@dataset_dir)" |
|
val_datalist: "$monai.data.load_decathlon_datalist(@data_list_file_path, data_list_key='validation', |
|
base_dir=@dataset_dir)" |
|
device: "$torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')" |
|
dints_space: |
|
_target_: monai.networks.nets.TopologyInstance |
|
channel_mul: 1 |
|
num_blocks: 12 |
|
num_depths: 4 |
|
use_downsample: true |
|
arch_code: |
|
- "$@arch_ckpt['arch_code_a']" |
|
- "$@arch_ckpt['arch_code_c']" |
|
device: "$torch.device('cuda')" |
|
network_def: |
|
_target_: monai.networks.nets.DiNTS |
|
dints_space: "@dints_space" |
|
in_channels: "@input_channels" |
|
num_classes: "@output_classes" |
|
use_downsample: true |
|
node_a: "$@arch_ckpt['node_a']" |
|
network: "$@network_def.to(@device)" |
|
loss: |
|
_target_: DiceCELoss |
|
include_background: false |
|
to_onehot_y: true |
|
softmax: true |
|
squared_pred: true |
|
batch: true |
|
smooth_nr: 1.0e-05 |
|
smooth_dr: 1.0e-05 |
|
optimizer: |
|
_target_: torch.optim.SGD |
|
params: "$@network.parameters()" |
|
momentum: 0.9 |
|
weight_decay: 4.0e-05 |
|
lr: 0.025 |
|
lr_scheduler: |
|
_target_: torch.optim.lr_scheduler.StepLR |
|
optimizer: "@optimizer" |
|
step_size: 80 |
|
gamma: 0.5 |
|
image_key: image |
|
label_key: label |
|
val_interval: 10 |
|
train: |
|
deterministic_transforms: |
|
- _target_: LoadImaged |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
- _target_: EnsureChannelFirstd |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
- _target_: Orientationd |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
axcodes: RAS |
|
- _target_: Spacingd |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
pixdim: |
|
- 1 |
|
- 1 |
|
- 1 |
|
mode: |
|
- bilinear |
|
- nearest |
|
align_corners: |
|
- true |
|
- true |
|
- _target_: CastToTyped |
|
keys: "@image_key" |
|
dtype: "$torch.float32" |
|
- _target_: ScaleIntensityRanged |
|
keys: "@image_key" |
|
a_min: -87 |
|
a_max: 199 |
|
b_min: 0 |
|
b_max: 1 |
|
clip: true |
|
- _target_: CastToTyped |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
dtype: |
|
- "$np.float16" |
|
- "$np.uint8" |
|
- _target_: CopyItemsd |
|
keys: "@label_key" |
|
times: 1 |
|
names: |
|
- label4crop |
|
- _target_: Lambdad |
|
keys: label4crop |
|
func: "$lambda x, s=@output_classes: np.concatenate(tuple([ndimage.binary_dilation((x==_k).astype(x.dtype), |
|
iterations=48).astype(float) for _k in range(s)]), axis=0)" |
|
overwrite: true |
|
- _target_: EnsureTyped |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
- _target_: CastToTyped |
|
keys: "@image_key" |
|
dtype: "$torch.float32" |
|
- _target_: SpatialPadd |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
- label4crop |
|
spatial_size: |
|
- 96 |
|
- 96 |
|
- 96 |
|
mode: |
|
- reflect |
|
- constant |
|
- constant |
|
random_transforms: |
|
- _target_: RandCropByLabelClassesd |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
label_key: label4crop |
|
num_classes: "@output_classes" |
|
ratios: "$[1,] * @output_classes" |
|
spatial_size: |
|
- 96 |
|
- 96 |
|
- 96 |
|
num_samples: 1 |
|
- _target_: Lambdad |
|
keys: label4crop |
|
func: "$lambda x: 0" |
|
- _target_: RandRotated |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
range_x: 0.3 |
|
range_y: 0.3 |
|
range_z: 0.3 |
|
mode: |
|
- bilinear |
|
- nearest |
|
prob: 0.2 |
|
- _target_: RandZoomd |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
min_zoom: 0.8 |
|
max_zoom: 1.2 |
|
mode: |
|
- trilinear |
|
- nearest |
|
align_corners: |
|
- true |
|
- |
|
prob: 0.16 |
|
- _target_: RandGaussianSmoothd |
|
keys: "@image_key" |
|
sigma_x: |
|
- 0.5 |
|
- 1.15 |
|
sigma_y: |
|
- 0.5 |
|
- 1.15 |
|
sigma_z: |
|
- 0.5 |
|
- 1.15 |
|
prob: 0.15 |
|
- _target_: RandScaleIntensityd |
|
keys: "@image_key" |
|
factors: 0.3 |
|
prob: 0.5 |
|
- _target_: RandShiftIntensityd |
|
keys: "@image_key" |
|
offsets: 0.1 |
|
prob: 0.5 |
|
- _target_: RandGaussianNoised |
|
keys: "@image_key" |
|
std: 0.01 |
|
prob: 0.15 |
|
- _target_: RandFlipd |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
spatial_axis: 0 |
|
prob: 0.5 |
|
- _target_: RandFlipd |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
spatial_axis: 1 |
|
prob: 0.5 |
|
- _target_: RandFlipd |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
spatial_axis: 2 |
|
prob: 0.5 |
|
- _target_: CastToTyped |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
dtype: |
|
- "$torch.float32" |
|
- "$torch.uint8" |
|
- _target_: ToTensord |
|
keys: |
|
- "@image_key" |
|
- "@label_key" |
|
preprocessing: |
|
_target_: Compose |
|
transforms: "$@train#deterministic_transforms + @train#random_transforms" |
|
dataset: |
|
_target_: CacheDataset |
|
data: "@train_datalist" |
|
transform: "@train#preprocessing" |
|
cache_rate: 0.125 |
|
num_workers: 4 |
|
dataloader: |
|
_target_: DataLoader |
|
dataset: "@train#dataset" |
|
batch_size: 2 |
|
shuffle: true |
|
num_workers: 4 |
|
inferer: |
|
_target_: SimpleInferer |
|
postprocessing: |
|
_target_: Compose |
|
transforms: |
|
- _target_: Activationsd |
|
keys: pred |
|
softmax: true |
|
- _target_: AsDiscreted |
|
keys: |
|
- pred |
|
- label |
|
argmax: |
|
- true |
|
- false |
|
to_onehot: "@output_classes" |
|
handlers: |
|
- _target_: LrScheduleHandler |
|
lr_scheduler: "@lr_scheduler" |
|
print_lr: true |
|
- _target_: ValidationHandler |
|
validator: "@validate#evaluator" |
|
epoch_level: true |
|
interval: "@val_interval" |
|
- _target_: StatsHandler |
|
tag_name: train_loss |
|
output_transform: "$monai.handlers.from_engine(['loss'], first=True)" |
|
- _target_: TensorBoardStatsHandler |
|
log_dir: "@output_dir" |
|
tag_name: train_loss |
|
output_transform: "$monai.handlers.from_engine(['loss'], first=True)" |
|
key_metric: |
|
train_accuracy: |
|
_target_: ignite.metrics.Accuracy |
|
output_transform: "$monai.handlers.from_engine(['pred', 'label'])" |
|
trainer: |
|
_target_: SupervisedTrainer |
|
max_epochs: 400 |
|
device: "@device" |
|
train_data_loader: "@train#dataloader" |
|
network: "@network" |
|
loss_function: "@loss" |
|
optimizer: "@optimizer" |
|
inferer: "@train#inferer" |
|
postprocessing: "@train#postprocessing" |
|
key_train_metric: "@train#key_metric" |
|
train_handlers: "@train#handlers" |
|
amp: true |
|
validate: |
|
preprocessing: |
|
_target_: Compose |
|
transforms: "%train#deterministic_transforms" |
|
dataset: |
|
_target_: CacheDataset |
|
data: "@val_datalist" |
|
transform: "@validate#preprocessing" |
|
cache_rate: 0.125 |
|
dataloader: |
|
_target_: DataLoader |
|
dataset: "@validate#dataset" |
|
batch_size: 1 |
|
shuffle: false |
|
num_workers: 4 |
|
inferer: |
|
_target_: SlidingWindowInferer |
|
roi_size: |
|
- 96 |
|
- 96 |
|
- 96 |
|
sw_batch_size: 6 |
|
overlap: 0.625 |
|
postprocessing: "%train#postprocessing" |
|
handlers: |
|
- _target_: StatsHandler |
|
iteration_log: false |
|
- _target_: TensorBoardStatsHandler |
|
log_dir: "@output_dir" |
|
iteration_log: false |
|
- _target_: CheckpointSaver |
|
save_dir: "@ckpt_dir" |
|
save_dict: |
|
model: "@network" |
|
save_key_metric: true |
|
key_metric_filename: model.pt |
|
key_metric: |
|
val_mean_dice: |
|
_target_: MeanDice |
|
include_background: false |
|
output_transform: "$monai.handlers.from_engine(['pred', 'label'])" |
|
additional_metrics: |
|
val_accuracy: |
|
_target_: ignite.metrics.Accuracy |
|
output_transform: "$monai.handlers.from_engine(['pred', 'label'])" |
|
evaluator: |
|
_target_: SupervisedEvaluator |
|
device: "@device" |
|
val_data_loader: "@validate#dataloader" |
|
network: "@network" |
|
inferer: "@validate#inferer" |
|
postprocessing: "@validate#postprocessing" |
|
key_val_metric: "@validate#key_metric" |
|
additional_metrics: "@validate#additional_metrics" |
|
val_handlers: "@validate#handlers" |
|
amp: true |
|
initialize: |
|
- "$monai.utils.set_determinism(seed=123)" |
|
run: |
|
- "$@train#trainer.run()" |
|
|