From 6e83a20f6b658d7720c0a9c74143f028c5d8a255 Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Fri, 10 Dec 2021 16:36:07 +0800 Subject: [PATCH 1/3] [DLMED] add missing docs Signed-off-by: Nic Ma --- docs/source/apps.rst | 4 ++++ docs/source/data.rst | 1 + docs/source/engines.rst | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/source/apps.rst b/docs/source/apps.rst index 11d60767ec..f4f7aff2d2 100644 --- a/docs/source/apps.rst +++ b/docs/source/apps.rst @@ -114,7 +114,11 @@ Clara MMARs .. automodule:: monai.apps.pathology.transforms.spatial.array .. autoclass:: SplitOnGrid :members: +.. autoclass:: TileOnGrid + :members: .. automodule:: monai.apps.pathology.transforms.spatial.dictionary .. autoclass:: SplitOnGridd :members: +.. autoclass:: TileOnGridd + :members: diff --git a/docs/source/data.rst b/docs/source/data.rst index 0ab64edb7b..cca347bb81 100644 --- a/docs/source/data.rst +++ b/docs/source/data.rst @@ -202,6 +202,7 @@ Decathlon Datalist .. autofunction:: monai.data.load_decathlon_datalist .. autofunction:: monai.data.load_decathlon_properties .. autofunction:: monai.data.check_missing_files +.. autofunction:: monai.data.create_cross_validation_datalist DataLoader diff --git a/docs/source/engines.rst b/docs/source/engines.rst index 90c7be2a1e..cac871278b 100644 --- a/docs/source/engines.rst +++ b/docs/source/engines.rst @@ -10,7 +10,8 @@ Multi-GPU data parallel .. automodule:: monai.engines.multi_gpu_supervised_trainer :members: - +.. automodule:: monai.engines.create_multigpu_supervised_evaluator + :members: Workflows --------- From 2ecafe7e1f227035e094765fca8bf7306bbb7e04 Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Fri, 10 Dec 2021 18:54:23 +0800 Subject: [PATCH 2/3] [DLMED] add missing components Signed-off-by: Nic Ma --- docs/source/engines.rst | 7 +++++-- docs/source/metrics.rst | 9 +++++++++ docs/source/networks.rst | 26 ++++++++++++++++++++++++-- docs/source/optimizers.rst | 20 ++++++++++++++++++++ docs/source/transforms.rst | 34 ++++++++++++++++++++++++++++++++++ docs/source/utils.rst | 25 +++++++++++++++++++++++++ docs/source/visualize.rst | 5 +++++ monai/engines/utils.py | 4 ++-- monai/optimizers/__init__.py | 1 + 9 files changed, 125 insertions(+), 6 deletions(-) diff --git a/docs/source/engines.rst b/docs/source/engines.rst index cac871278b..0cd40afb78 100644 --- a/docs/source/engines.rst +++ b/docs/source/engines.rst @@ -10,8 +10,6 @@ Multi-GPU data parallel .. automodule:: monai.engines.multi_gpu_supervised_trainer :members: -.. automodule:: monai.engines.create_multigpu_supervised_evaluator - :members: Workflows --------- @@ -57,3 +55,8 @@ Workflows ~~~~~~~~~~~~~~~~~~~ .. autoclass:: EnsembleEvaluator :members: + +Utilities +--------- +.. automodule:: monai.engines.utils + :members: diff --git a/docs/source/metrics.rst b/docs/source/metrics.rst index d6e2aff75b..332571d345 100644 --- a/docs/source/metrics.rst +++ b/docs/source/metrics.rst @@ -8,6 +8,8 @@ Metrics `FROC` ------ +.. autofunction:: compute_fp_tp_probs +.. autofunction:: compute_froc_curve_data .. autofunction:: compute_froc_score `Metric` @@ -47,6 +49,7 @@ Metrics `Confusion matrix` ------------------ .. autofunction:: get_confusion_matrix +.. autofunction:: compute_confusion_matrix_metric .. autoclass:: ConfusionMatrixMetric :members: @@ -54,6 +57,7 @@ Metrics `Hausdorff distance` -------------------- .. autofunction:: compute_hausdorff_distance +.. autofunction:: compute_percent_hausdorff_distance .. autoclass:: HausdorffDistanceMetric :members: @@ -89,3 +93,8 @@ Metrics -------------------- .. autoclass:: CumulativeAverage :members: + +Utilities +--------- +.. automodule:: monai.metrics.utils + :members: diff --git a/docs/source/networks.rst b/docs/source/networks.rst index bb9d24e6f7..720a3723dc 100644 --- a/docs/source/networks.rst +++ b/docs/source/networks.rst @@ -21,7 +21,7 @@ Blocks :members: `CRF` -~~~~~~~~~~~~~ +~~~~~ .. autoclass:: CRF :members: @@ -73,6 +73,8 @@ Blocks :members: .. autoclass:: UnetUpBlock :members: +.. autoclass:: UnetOutBlock + :members: `SegResnet Block` ~~~~~~~~~~~~~~~~~ @@ -254,6 +256,11 @@ Layers .. automodule:: monai.networks.layers.Conv :members: +`Pad` +~~~~~ +.. automodule:: monai.networks.layers.Pad + :members: + `Pool` ~~~~~~ .. automodule:: monai.networks.layers.Pool @@ -300,7 +307,7 @@ Layers :members: `PHLFilter` -~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~ .. autoclass:: PHLFilter `GaussianMixtureModel` @@ -386,6 +393,11 @@ Nets .. autoclass:: EfficientNet :members: +`BlockArgs` +~~~~~~~~~~~ +.. autoclass:: BlockArgs + :members: + `EfficientNetBN` ~~~~~~~~~~~~~~~~ .. autoclass:: EfficientNetBN @@ -406,6 +418,11 @@ Nets .. autoclass:: SegResNetVAE :members: +`ResNet` +~~~~~~~~ +.. autoclass:: ResNet + :members: + `SENet` ~~~~~~~ .. autoclass:: SENet @@ -513,6 +530,11 @@ Nets .. autoclass:: FullyConnectedNet :members: +`VarFullyConnectedNet` +~~~~~~~~~~~~~~~~~~~~~~ +.. autoclass:: VarFullyConnectedNet + :members: + `Generator` ~~~~~~~~~~~ .. autoclass:: Generator diff --git a/docs/source/optimizers.rst b/docs/source/optimizers.rst index c766ac3cf9..67cbdc0951 100644 --- a/docs/source/optimizers.rst +++ b/docs/source/optimizers.rst @@ -6,6 +6,11 @@ Optimizers ========== .. currentmodule:: monai.optimizers +`LearningRateFinder` +-------------------- +.. autoclass:: LearningRateFinder + :members: + `Novograd` ---------- .. autoclass:: Novograd @@ -14,3 +19,18 @@ Optimizers `Generate parameter groups` --------------------------- .. autofunction:: generate_param_groups + +`ExponentialLR` +--------------- +.. autoclass:: ExponentialLR + :members: + +`LinearLR` +---------- +.. autoclass:: LinearLR + :members: + +`WarmupCosineSchedule` +---------------------- +.. autoclass:: WarmupCosineSchedule + :members: diff --git a/docs/source/transforms.rst b/docs/source/transforms.rst index 37a4a4cf44..7b0d025402 100644 --- a/docs/source/transforms.rst +++ b/docs/source/transforms.rst @@ -43,6 +43,11 @@ Generic Interfaces .. autoclass:: InvertibleTransform :members: +`TraceableTransform` +^^^^^^^^^^^^^^^^^^^^ +.. autoclass:: TraceableTransform + :members: + `BatchInverseTransform` ^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: BatchInverseTransform @@ -64,6 +69,12 @@ Vanilla Transforms Crop and Pad ^^^^^^^^^^^^ +`PadListDataCollate` +"""""""""""""""""""" +.. autoclass:: PadListDataCollate + :members: + :special-members: __call__ + `Pad` """"" .. autoclass:: Pad @@ -395,6 +406,12 @@ Intensity :members: :special-members: __call__ +`RandRicianNoise` +""""""""""""""""" +.. autoclass:: RandRicianNoise + :members: + :special-members: __call__ + `RandCoarseTransform` """"""""""""""""""""" .. autoclass:: RandCoarseTransform @@ -830,6 +847,12 @@ Utility :members: :special-members: __call__ +`RemoveRepeatedChannel` +""""""""""""""""""""""" +.. autoclass:: RemoveRepeatedChannel + :members: + :special-members: __call__ + `LabelToMask` """"""""""""" .. autoclass:: LabelToMask @@ -1568,6 +1591,12 @@ Utility (Dict) :members: :special-members: __call__ +`ToPIL` +""""""" +.. autoclass:: ToPIL + :members: + :special-members: __call__ + `ToCupyd` """"""""" .. autoclass:: ToCupyd @@ -1710,6 +1739,11 @@ Transform Adaptors ------------------ .. automodule:: monai.transforms.adaptors +`FunctionSignature` +""""""""""""""""""" +.. autoclass:: FunctionSignature + :members: + `adaptor` ^^^^^^^^^ .. autofunction:: monai.transforms.adaptors.adaptor diff --git a/docs/source/utils.rst b/docs/source/utils.rst index c97d16de17..881519936b 100644 --- a/docs/source/utils.rst +++ b/docs/source/utils.rst @@ -51,3 +51,28 @@ Type conversion --------------- .. automodule:: monai.utils.type_conversion :members: + +Decorators +---------- +.. automodule:: monai.utils.decorators + :members: + +Distributed Data Parallel +------------------------- +.. automodule:: monai.utils.dist + :members: + +Enums +----- +.. automodule:: monai.utils.enums + :members: + +Jupyter Utilities +----------------- +.. automodule:: monai.utils.jupyter_utils + :members: + +State Cacher +------------ +.. automodule:: monai.utils.state_cacher + :members: diff --git a/docs/source/visualize.rst b/docs/source/visualize.rst index 850fd51770..3779feec88 100644 --- a/docs/source/visualize.rst +++ b/docs/source/visualize.rst @@ -24,3 +24,8 @@ Occlusion sensitivity .. automodule:: monai.visualize.occlusion_sensitivity :members: + +Utilities +--------- +.. automodule:: monai.visualize.utils + :members: diff --git a/monai/engines/utils.py b/monai/engines/utils.py index 25e09fe2b6..f06a3bf255 100644 --- a/monai/engines/utils.py +++ b/monai/engines/utils.py @@ -166,9 +166,9 @@ class PrepareBatchExtraInput(PrepareBatch): Args: extra_keys: if a string or list provided, every item is the key of extra data in current batch, - and will pass the extra data to the network(*args) in order. + and will pass the extra data to the `network(*args)` in order. If a dictionary is provided, every `{k, v}` pair is the key of extra data in current batch, - `k` the param name in network, `v` is the key of extra data in current batch, + `k` is the param name in network, `v` is the key of extra data in current batch, and will pass the `{k1: batch[v1], k2: batch[v2], ...}` as kwargs to the network. """ diff --git a/monai/optimizers/__init__.py b/monai/optimizers/__init__.py index e53aa8d468..24648728ef 100644 --- a/monai/optimizers/__init__.py +++ b/monai/optimizers/__init__.py @@ -10,5 +10,6 @@ # limitations under the License. from .lr_finder import LearningRateFinder +from .lr_scheduler import ExponentialLR, LinearLR, WarmupCosineSchedule from .novograd import Novograd from .utils import generate_param_groups From e6c398e54fb6ef8be14092c7570dfe6bdb88ee8d Mon Sep 17 00:00:00 2001 From: Nic Ma Date: Fri, 10 Dec 2021 19:29:44 +0800 Subject: [PATCH 3/3] [DLMED] fix test Signed-off-by: Nic Ma --- docs/source/transforms.rst | 2 +- monai/metrics/utils.py | 2 ++ monai/networks/nets/resnet.py | 1 + monai/optimizers/lr_finder.py | 32 ++++++++++++++--------------- monai/transforms/intensity/array.py | 8 ++++---- 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/docs/source/transforms.rst b/docs/source/transforms.rst index 7b0d025402..24167abe75 100644 --- a/docs/source/transforms.rst +++ b/docs/source/transforms.rst @@ -1740,7 +1740,7 @@ Transform Adaptors .. automodule:: monai.transforms.adaptors `FunctionSignature` -""""""""""""""""""" +^^^^^^^^^^^^^^^^^^^ .. autoclass:: FunctionSignature :members: diff --git a/monai/metrics/utils.py b/monai/metrics/utils.py index 1cd42ed302..feae12c048 100644 --- a/monai/metrics/utils.py +++ b/monai/metrics/utils.py @@ -28,6 +28,7 @@ def ignore_background(y_pred: Union[np.ndarray, torch.Tensor], y: Union[np.ndarray, torch.Tensor]): """ This function is used to remove background (the first channel) for `y_pred` and `y`. + Args: y_pred: predictions. As for classification tasks, `y_pred` should has the shape [BN] where N is larger than 1. As for segmentation tasks, @@ -35,6 +36,7 @@ def ignore_background(y_pred: Union[np.ndarray, torch.Tensor], y: Union[np.ndarr y: ground truth, the first dim is batch. """ + y = y[:, 1:] if y.shape[1] > 1 else y y_pred = y_pred[:, 1:] if y_pred.shape[1] > 1 else y_pred return y_pred, y diff --git a/monai/networks/nets/resnet.py b/monai/networks/nets/resnet.py index fc400895df..0911300c3f 100644 --- a/monai/networks/nets/resnet.py +++ b/monai/networks/nets/resnet.py @@ -154,6 +154,7 @@ class ResNet(nn.Module): ResNet based on: `Deep Residual Learning for Image Recognition `_ and `Can Spatiotemporal 3D CNNs Retrace the History of 2D CNNs and ImageNet? `_. Adapted from ``_. + Args: block: which ResNet block to use, either Basic or Bottleneck. layers: how many layers to use. diff --git a/monai/optimizers/lr_finder.py b/monai/optimizers/lr_finder.py index 9cd66c226d..7b3dc3f996 100644 --- a/monai/optimizers/lr_finder.py +++ b/monai/optimizers/lr_finder.py @@ -146,30 +146,30 @@ class LearningRateFinder: and what is the optimal learning rate. Example (fastai approach): - >>> lr_finder = LearningRateFinder(net, optimizer, criterion) - >>> lr_finder.range_test(data_loader, end_lr=100, num_iter=100) - >>> lr_finder.get_steepest_gradient() - >>> lr_finder.plot() # to inspect the loss-learning rate graph + >>> lr_finder = LearningRateFinder(net, optimizer, criterion) + >>> lr_finder.range_test(data_loader, end_lr=100, num_iter=100) + >>> lr_finder.get_steepest_gradient() + >>> lr_finder.plot() # to inspect the loss-learning rate graph Example (Leslie Smith's approach): - >>> lr_finder = LearningRateFinder(net, optimizer, criterion) - >>> lr_finder.range_test(train_loader, val_loader=val_loader, end_lr=1, num_iter=100, step_mode="linear") + >>> lr_finder = LearningRateFinder(net, optimizer, criterion) + >>> lr_finder.range_test(train_loader, val_loader=val_loader, end_lr=1, num_iter=100, step_mode="linear") Gradient accumulation is supported; example: - >>> train_data = ... # prepared dataset - >>> desired_bs, real_bs = 32, 4 # batch size - >>> accumulation_steps = desired_bs // real_bs # required steps for accumulation - >>> data_loader = torch.utils.data.DataLoader(train_data, batch_size=real_bs, shuffle=True) - >>> acc_lr_finder = LearningRateFinder(net, optimizer, criterion) - >>> acc_lr_finder.range_test(data_loader, end_lr=10, num_iter=100, accumulation_steps=accumulation_steps) + >>> train_data = ... # prepared dataset + >>> desired_bs, real_bs = 32, 4 # batch size + >>> accumulation_steps = desired_bs // real_bs # required steps for accumulation + >>> data_loader = torch.utils.data.DataLoader(train_data, batch_size=real_bs, shuffle=True) + >>> acc_lr_finder = LearningRateFinder(net, optimizer, criterion) + >>> acc_lr_finder.range_test(data_loader, end_lr=10, num_iter=100, accumulation_steps=accumulation_steps) By default, image will be extracted from data loader with x["image"] and x[0], depending on whether batch data is a dictionary or not (and similar behaviour for extracting the label). If your data loader returns something other than this, pass a callable function to extract it, e.g.: - >>> image_extractor = lambda x: x["input"] - >>> label_extractor = lambda x: x[100] - >>> lr_finder = LearningRateFinder(net, optimizer, criterion) - >>> lr_finder.range_test(train_loader, val_loader, image_extractor, label_extractor) + >>> image_extractor = lambda x: x["input"] + >>> label_extractor = lambda x: x[100] + >>> lr_finder = LearningRateFinder(net, optimizer, criterion) + >>> lr_finder.range_test(train_loader, val_loader, image_extractor, label_extractor) References: Modified from: https://github.com/davidtvs/pytorch-lr-finder. diff --git a/monai/transforms/intensity/array.py b/monai/transforms/intensity/array.py index 31249d547b..289a1bcbcb 100644 --- a/monai/transforms/intensity/array.py +++ b/monai/transforms/intensity/array.py @@ -129,10 +129,10 @@ class RandRicianNoise(RandomizableTransform): """ Add Rician noise to image. Rician noise in MRI is the result of performing a magnitude operation on complex - data with Gaussian noise of the same variance in both channels, as described in `Noise in Magnitude - Magnetic Resonance Images `_. This transform is adapted from - `DIPY`_. See also: `The rician distribution of noisy mri data - `_. + data with Gaussian noise of the same variance in both channels, as described in + `Noise in Magnitude Magnetic Resonance Images `_. + This transform is adapted from `DIPY `_. + See also: `The rician distribution of noisy mri data `_. Args: prob: Probability to add Rician noise.