KalbeDigitalLab/PathologyNucleiClassification
0
1{2 "imports": [3 "$import glob",4 "$import ignite",5 "$import json",6 "$import pathlib",7 "$import os"8 ],9 "bundle_root": "/workspace/data/pathology_nuclei_classification",10 "ckpt_dir": "$@bundle_root + '/models'",11 "output_dir": "$@bundle_root + '/eval'",12 "dataset_dir": "/workspace/data/CoNSePNuclei",13 "dataset_json": "$@dataset_dir + '/dataset.json'",14 "train_datalist": "$json.loads(pathlib.Path(@dataset_json).read_text())['training']",15 "val_datalist": "$json.loads(pathlib.Path(@dataset_json).read_text())['validation']",16 "val_interval": 1,17 "device": "$torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')",18 "network_def": {19 "_target_": "DenseNet121",20 "spatial_dims": 2,21 "in_channels": 4,22 "out_channels": 423 },24 "network": "$@network_def.to(@device)",25 "loss": {26 "_target_": "torch.nn.CrossEntropyLoss"27 },28 "optimizer": {29 "_target_": "torch.optim.Adam",30 "params": "$@network.parameters()",31 "lr": 0.000132 },33 "max_epochs": 50,34 "train": {35 "preprocessing": {36 "_target_": "Compose",37 "transforms": [38 {39 "_target_": "LoadImaged",40 "keys": [41 "image",42 "label"43 ],44 "dtype": "uint8"45 },46 {47 "_target_": "EnsureChannelFirstd",48 "keys": [49 "image",50 "label"51 ]52 },53 {54 "_target_": "SplitLabeld",55 "keys": "label",56 "mask_value": "",57 "others_value": 255,58 "to_binary_mask": false59 },60 {61 "_target_": "RandTorchVisiond",62 "keys": "image",63 "name": "ColorJitter",64 "brightness": 0.25,65 "contrast": 0.75,66 "saturation": 0.25,67 "hue": 0.0468 },69 {70 "_target_": "RandFlipd",71 "keys": [72 "image",73 "label",74 "others"75 ],76 "prob": 0.577 },78 {79 "_target_": "RandRotate90d",80 "keys": [81 "image",82 "label",83 "others"84 ],85 "prob": 0.586 },87 {88 "_target_": "ScaleIntensityRanged",89 "keys": "image",90 "a_min": 0.0,91 "a_max": 255.0,92 "b_min": -1.0,93 "b_max": 1.094 },95 {96 "_target_": "AddLabelAsGuidanced",97 "keys": "image",98 "source": "label"99 },100 {101 "_target_": "SetLabelClassd",102 "keys": "label",103 "offset": -1104 },105 {106 "_target_": "SelectItemsd",107 "keys": [108 "image",109 "label"110 ]111 }112 ]113 },114 "dataset": {115 "_target_": "CacheDataset",116 "data": "@train_datalist",117 "transform": "@train#preprocessing",118 "cache_rate": 1.0,119 "num_workers": 4120 },121 "dataloader": {122 "_target_": "DataLoader",123 "dataset": "@train#dataset",124 "batch_size": 64,125 "shuffle": true,126 "num_workers": 4127 },128 "inferer": {129 "_target_": "SimpleInferer"130 },131 "postprocessing": {132 "_target_": "Compose",133 "transforms": [134 {135 "_target_": "Activationsd",136 "keys": "pred",137 "softmax": true138 },139 {140 "_target_": "AsDiscreted",141 "keys": [142 "pred",143 "label"144 ],145 "argmax": [146 true,147 false148 ],149 "to_onehot": 4150 },151 {152 "_target_": "ToTensord",153 "keys": [154 "pred",155 "label"156 ],157 "device": "@device"158 }159 ]160 },161 "handlers": [162 {163 "_target_": "ValidationHandler",164 "validator": "@validate#evaluator",165 "epoch_level": true,166 "interval": "@val_interval"167 },168 {169 "_target_": "StatsHandler",170 "tag_name": "train_loss",171 "output_transform": "$monai.handlers.from_engine(['loss'], first=True)"172 },173 {174 "_target_": "TensorBoardStatsHandler",175 "log_dir": "@output_dir",176 "tag_name": "train_loss",177 "output_transform": "$monai.handlers.from_engine(['loss'], first=True)"178 },179 {180 "_target_": "scripts.TensorBoardImageHandler",181 "class_names": {182 "0": "Other",183 "1": "Inflammatory",184 "2": "Epithelial",185 "3": "Spindle-Shaped"186 },187 "log_dir": "@output_dir",188 "batch_limit": 4,189 "tag_name": "train"190 }191 ],192 "key_metric": {193 "train_f1": {194 "_target_": "ConfusionMatrix",195 "metric_name": "f1 score",196 "output_transform": "$monai.handlers.from_engine(['pred', 'label'])"197 }198 },199 "trainer": {200 "_target_": "SupervisedTrainer",201 "max_epochs": "@max_epochs",202 "device": "@device",203 "train_data_loader": "@train#dataloader",204 "network": "@network",205 "loss_function": "@loss",206 "optimizer": "@optimizer",207 "inferer": "@train#inferer",208 "postprocessing": "@train#postprocessing",209 "key_train_metric": "@train#key_metric",210 "train_handlers": "@train#handlers",211 "amp": true212 }213 },214 "validate": {215 "preprocessing": {216 "_target_": "Compose",217 "transforms": [218 {219 "_target_": "LoadImaged",220 "keys": [221 "image",222 "label"223 ],224 "dtype": "uint8"225 },226 {227 "_target_": "EnsureChannelFirstd",228 "keys": [229 "image",230 "label"231 ]232 },233 {234 "_target_": "SplitLabeld",235 "keys": "label",236 "mask_value": "",237 "others_value": 255,238 "to_binary_mask": false239 },240 {241 "_target_": "ScaleIntensityRanged",242 "keys": "image",243 "a_min": 0.0,244 "a_max": 255.0,245 "b_min": -1.0,246 "b_max": 1.0247 },248 {249 "_target_": "AddLabelAsGuidanced",250 "keys": "image",251 "source": "label"252 },253 {254 "_target_": "SetLabelClassd",255 "keys": "label",256 "offset": -1257 },258 {259 "_target_": "SelectItemsd",260 "keys": [261 "image",262 "label",263 "image_meta_dict"264 ]265 }266 ]267 },268 "dataset": {269 "_target_": "CacheDataset",270 "data": "@val_datalist",271 "transform": "@validate#preprocessing",272 "cache_rate": 1.0273 },274 "dataloader": {275 "_target_": "DataLoader",276 "dataset": "@validate#dataset",277 "batch_size": 64,278 "shuffle": false,279 "num_workers": 4280 },281 "inferer": {282 "_target_": "SimpleInferer"283 },284 "postprocessing": "%train#postprocessing",285 "handlers": [286 {287 "_target_": "StatsHandler",288 "iteration_log": false289 },290 {291 "_target_": "TensorBoardStatsHandler",292 "log_dir": "@output_dir",293 "iteration_log": false294 },295 {296 "_target_": "CheckpointSaver",297 "save_dir": "@ckpt_dir",298 "save_dict": {299 "model": "@network"300 },301 "save_key_metric": true,302 "key_metric_filename": "model.pt"303 },304 {305 "_target_": "scripts.TensorBoardImageHandler",306 "class_names": {307 "0": "Other",308 "1": "Inflammatory",309 "2": "Epithelial",310 "3": "Spindle-Shaped"311 },312 "log_dir": "@output_dir",313 "batch_limit": 8,314 "tag_name": "val"315 }316 ],317 "key_metric": {318 "val_f1": {319 "_target_": "ConfusionMatrix",320 "metric_name": "f1 score",321 "output_transform": "$monai.handlers.from_engine(['pred', 'label'])"322 }323 },324 "additional_metrics": {325 "val_accuracy": {326 "_target_": "ignite.metrics.Accuracy",327 "output_transform": "$monai.handlers.from_engine(['pred', 'label'])"328 }329 },330 "evaluator": {331 "_target_": "SupervisedEvaluator",332 "device": "@device",333 "val_data_loader": "@validate#dataloader",334 "network": "@network",335 "inferer": "@validate#inferer",336 "postprocessing": "@validate#postprocessing",337 "key_val_metric": "@validate#key_metric",338 "additional_metrics": "@validate#additional_metrics",339 "val_handlers": "@validate#handlers",340 "amp": true341 }342 },343 "training": [344 "$import sys",345 "$sys.path.append(@bundle_root)",346 "$monai.utils.set_determinism(seed=123)",347 "$setattr(torch.backends.cudnn, 'benchmark', True)",348 "$@train#trainer.run()"349 ]350}351 