Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ci/bundle_custom_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
# This list is used for our CI tests to determine whether a bundle needs to be tested with
# the `verify_data_shape` function in `verify_bundle.py`.
# If a bundle does not need to be tested, please add the bundle name into the list.
exclude_verify_shape_list = []
exclude_verify_shape_list = ["mednist_gan"]

# This list is used for our CI tests to determine whether a bundle needs to be tested with
# the `verify_export_torchscript` function in `verify_bundle.py`.
Expand Down
88 changes: 88 additions & 0 deletions models/mednist_gan/configs/inference.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
{
"imports": [
"$import glob"
],
"device": "$torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')",
"ckpt_path": "$@bundle_root + '/models/model.pt'",
"output_dir": "./outputs",
"latent_size": 64,
"num_samples": 10,
"network_def": {
"_target_": "Generator",
"latent_shape": "@latent_size",
"start_shape": [
64,
8,
8
],
"channels": [
32,
16,
8,
1
],
"strides": [
2,
2,
2,
1
]
},
"network": "$@network_def.to(@device)",
"dataset": {
"_target_": "Dataset",
"data": "$[torch.rand(@latent_size) for i in range(@num_samples)]"
},
"dataloader": {
"_target_": "DataLoader",
"dataset": "@dataset",
"batch_size": 1,
"shuffle": false,
"num_workers": 0
},
"inferer": {
"_target_": "SimpleInferer"
},
"postprocessing": {
"_target_": "Compose",
"transforms": [
{
"_target_": "Activationsd",
"keys": "pred",
"sigmoid": true
},
{
"_target_": "SaveImaged",
"keys": "pred",
"output_dir": "@output_dir",
"output_ext": "png",
"separate_folder": false,
"scale": 255,
"output_dtype": "$np.uint8",
"meta_key_postfix": null
}
]
},
"handlers": [
{
"_target_": "CheckpointLoader",
"load_path": "@ckpt_path",
"load_dict": {
"model": "@network"
}
}
],
"evaluator": {
"_target_": "SupervisedEvaluator",
"device": "@device",
"val_data_loader": "@dataloader",
"network": "@network",
"inferer": "@inferer",
"postprocessing": "@postprocessing",
"prepare_batch": "$lambda batchdata, *_,**__: (batchdata.to(@device),None,(),{})",
Comment thread
Nic-Ma marked this conversation as resolved.
"val_handlers": "@handlers"
},
"inferring": [
Comment thread
Nic-Ma marked this conversation as resolved.
"$@evaluator.run()"
]
}
21 changes: 21 additions & 0 deletions models/mednist_gan/configs/logging.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[loggers]
keys=root

[handlers]
keys=consoleHandler

[formatters]
keys=fullFormatter

[logger_root]
level=INFO
handlers=consoleHandler

[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=fullFormatter
args=(sys.stdout,)

[formatter_fullFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
60 changes: 60 additions & 0 deletions models/mednist_gan/configs/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_generator_20220718.json",
"version": "0.1.0",
Comment thread
yiheng-wang-nv marked this conversation as resolved.
"changelog": {
"0.1.0": "Initial version"
},
"monai_version": "0.9.0",
"pytorch_version": "1.10.0",
"numpy_version": "1.21.0",
"optional_packages_version": {
"pytorch-ignite": "0.4.8",
"pillow": "8.4.0"
},
"task": "Generate random hand images from the MedNIST dataset",
"description": "This example of a GAN generator produces hand xray images like those in the MedNIST dataset",
"authors": "MONAI Team",
"copyright": "Copyright (c) MONAI Consortium",
"intended_use": "This is an example of a GAN with generator discriminator networks using MONAI, suitable for demonstration purposes only.",
"data_source": "MedNIST dataset kindly made available by Dr. Bradley J. Erickson M.D., Ph.D. (Department of Radiology, Mayo Clinic)",
"data_type": "jpeg",
"network_data_format": {
"inputs": {
"latent": {
Comment thread
yiheng-wang-nv marked this conversation as resolved.
"type": "tuples",
"format": "latent",
"num_channels": 0,
"spatial_shape": [
64
Comment thread
Nic-Ma marked this conversation as resolved.
],
"dtype": "float32",
"value_range": [
0,
1
],
"is_patch_data": false,
"channel_def": {}
}
},
"outputs": {
"pred": {
"type": "image",
"format": "magnitude",
"num_channels": 1,
"spatial_shape": [
64,
64
],
"dtype": "float32",
"value_range": [
0,
1
],
"is_patch_data": false,
"channel_def": {
"0": "image"
}
}
}
}
}
164 changes: 164 additions & 0 deletions models/mednist_gan/configs/train.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
{
"imports": [
"$from functools import partial",
"$import glob",
"$from losses import discriminator_loss",
"$from losses import generator_loss"
],
"device": "$torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')",
"ckpt_path": "$@bundle_root + '/models/model.pt'",
"dataset_dir": "./MedNIST/Hand",
"datalist": "$list(sorted(glob.glob(@dataset_dir + '/*.jpeg')))",
"latent_size": 64,
"discriminator": {
"_target_": "Discriminator",
"in_shape": [
1,
64,
64
],
"channels": [
8,
16,
32,
64,
1
],
"strides": [
2,
2,
2,
2,
1
],
"num_res_units": 1,
"kernel_size": 5
},
"generator": {
"_target_": "Generator",
"latent_shape": "@latent_size",
"start_shape": [
64,
8,
8
],
"channels": [
32,
16,
8,
1
],
"strides": [
2,
2,
2,
1
]
},
"dnetwork": "$@discriminator.apply(monai.networks.normal_init).to(@device)",
"gnetwork": "$@generator.apply(monai.networks.normal_init).to(@device)",
"preprocessing": {
"_target_": "Compose",
"transforms": [
{
"_target_": "LoadImaged",
"keys": "reals"
},
{
"_target_": "AddChanneld",
"keys": "reals"
},
{
"_target_": "ScaleIntensityd",
"keys": "reals"
},
{
"_target_": "RandRotated",
"keys": "reals",
"range_x": "$np.pi/12",
"prob": 0.5,
"keep_size": true
},
{
"_target_": "RandFlipd",
"keys": "reals",
"spatial_axis": 0,
"prob": 0.5
},
{
"_target_": "RandZoomd",
"keys": "reals",
"min_zoom": 0.9,
"max_zoom": 1.1,
"prob": 0.5
},
{
"_target_": "EnsureTyped",
"keys": "reals"
}
]
},
"real_dataset": {
"_target_": "CacheDataset",
"data": "$[{'reals': i} for i in @datalist]",
"transform": "@preprocessing"
},
"real_dataloader": {
"_target_": "DataLoader",
"dataset": "@real_dataset",
"batch_size": 600,
"shuffle": true,
"num_workers": 12
},
"doptimizer": {
"_target_": "torch.optim.Adam",
"params": "$@dnetwork.parameters()",
"lr": 0.0002,
"betas": [
0.5,
0.999
]
},
"goptimizer": {
"_target_": "torch.optim.Adam",
"params": "$@gnetwork.parameters()",
"lr": 0.0002,
"betas": [
0.5,
0.999
]
},
"handlers": [
{
"_target_": "CheckpointSaver",
"save_dir": "$@bundle_root + '/models'",
"save_dict": {
"model": "@gnetwork"
},
"save_interval": 0,
"save_final": true,
"epoch_level": true
}
],
"trainer": {
"_target_": "GanTrainer",
"device": "@device",
"max_epochs": 50,
"train_data_loader": "@real_dataloader",
"g_network": "@gnetwork",
"g_optimizer": "@goptimizer",
"g_loss_function": "$partial(generator_loss, disc_net=@dnetwork)",
"d_network": "@dnetwork",
"d_optimizer": "@doptimizer",
"d_loss_function": "$partial(discriminator_loss, disc_net=@dnetwork)",
"d_train_steps": 5,
"g_update_latents": true,
"latent_shape": "@latent_size",
"key_train_metric": "$None",
"train_handlers": "@handlers"
},
"training": [
"$@gnetwork.conv.add_module('activation', torch.nn.Sigmoid())",
Comment thread
Nic-Ma marked this conversation as resolved.
"$@trainer.run()"
]
}
Loading