Skip to content

Feature/2231 transforms#2278

Closed
rijobro wants to merge 209 commits intodevfrom
feature/2231-transforms
Closed

Feature/2231 transforms#2278
rijobro wants to merge 209 commits intodevfrom
feature/2231-transforms

Conversation

@rijobro
Copy link
Copy Markdown
Contributor

@rijobro rijobro commented May 28, 2021

Fixes #2231.

Description

I've sorted transforms into TorchTransforms and/or NumpyTransforms.

  • TorchTransform: convert input to torch, do transform, convert back to original
  • NumpyTransform: convert input to numpy, do transform, convert back to original
  • Both TorchTransform and NumpyTransform: no need for conversion (e.g., img[None])

I've also added some enums to try and unify the input types:

class DataObjects:
    """Common classes used for arrays/tensors and then their usage in dict/mappings."""

    Images = Union[torch.Tensor, np.ndarray]
    Dict = Dict[Hashable, Any]
    Mapping = Mapping[Hashable, Any]

We can keep a track of progress with:

from monai import transforms
from inspect import getmembers, isclass
for n,obj in getmembers(transforms):
    if isclass(obj) and issubclass(obj,transforms.Transform) and not issubclass(obj,transforms.MapTransform):
        print(n)

And we can add in is not TorchTransform and is not NumpyTransform, etc. to see which are yet to be considered.

Status

Ready/Work in progress/Hold

Types of changes

  • Non-breaking change (fix or new feature that would not break existing functionality).
  • Breaking change (fix or new feature that would cause existing functionality to change).
  • New tests added to cover the changes.
  • Integration tests passed locally by running ./runtests.sh -f -u --net --coverage.
  • Quick tests passed locally by running ./runtests.sh --quick --unittests.
  • In-line docstrings updated.
  • Documentation updated, tested make html command in the docs/ folder.

@wyli wyli force-pushed the feature/2231-transforms branch from 1c35763 to 59a7ce7 Compare May 30, 2021 15:13
@wyli wyli added the Module: transform data transforms for preprocessing and postprocessing. label May 30, 2021
@rijobro
Copy link
Copy Markdown
Contributor Author

rijobro commented Jun 2, 2021

@wyli @Nic-Ma @ericspod I think this commit might be interesting.

I made RandRicianNoise available for both numpy and torch inputs. I realised we couldn't fix the seed for the torch random generators, so I followed this StackOverflow post.

Now we can use self.R and self.R_torch for random generation with numpy and torch, respectively.

rijobro added 22 commits July 28, 2021 14:48
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: Richard Brown <[email protected]>
@rijobro
Copy link
Copy Markdown
Contributor Author

rijobro commented Aug 23, 2021

Current state of proposed transforms as I start merging them into MONAI:

TorchOrNumpy:  Activations
TorchOrNumpy:  AddChannel
TorchOrNumpy:  AddCoordinateChannels
Torch:         AddExtremePointsChannel
TorchOrNumpy:  AdjustContrast
Torch:         Affine
Torch:         AffineGrid
TorchOrNumpy:  AsChannelFirst
TorchOrNumpy:  AsChannelLast
TorchOrNumpy:  AsDiscrete
Uncategorised: BatchInverseTransform
TorchOrNumpy:  BorderPad
TorchOrNumpy:  BoundingRect
TorchOrNumpy:  CastToType
TorchOrNumpy:  CenterScaleCrop
TorchOrNumpy:  CenterSpatialCrop
TorchOrNumpy:  ClassesToIndices
TorchOrNumpy:  ConvertToMultiChannelBasedOnBratsClasses
TorchOrNumpy:  CropForeground
TorchOrNumpy:  DataStats
Torch:         DetectEnvelope
TorchOrNumpy:  DivisiblePad
Torch:         EnsureChannelFirst
Uncategorised: EnsureType
TorchOrNumpy:  FgBgToIndices
Torch:         Flip
Torch:         GaussianSharpen
Torch:         GaussianSmooth
TorchOrNumpy:  GibbsNoise
TorchOrNumpy:  Identity
TorchOrNumpy:  KSpaceSpikeNoise
Torch:         KeepLargestConnectedComponent
Torch:         LabelToContour
TorchOrNumpy:  LabelToMask
TorchOrNumpy:  MaskIntensity
TorchOrNumpy:  MeanEnsemble
TorchOrNumpy:  NormalizeIntensity
Numpy:         Orientation
TorchOrNumpy:  Pad
TorchOrNumpy:  PadListDataCollate
Torch:         ProbNMS
Torch:         Rand2DElastic
Torch:         Rand3DElastic
TorchOrNumpy:  RandAdjustContrast
Torch:         RandAffine
Torch:         RandAffineGrid
Torch:         RandAxisFlip
TorchOrNumpy:  RandBiasField
TorchOrNumpy:  RandCoarseDropout
TorchOrNumpy:  RandCropByLabelClasses
TorchOrNumpy:  RandCropByPosNegLabel
TorchOrNumpy:  RandDeformGrid
Torch:         RandFlip
TorchOrNumpy:  RandGaussianNoise
Torch:         RandGaussianSharpen
Torch:         RandGaussianSmooth
TorchOrNumpy:  RandGibbsNoise
Numpy:         RandHistogramShift
TorchOrNumpy:  RandKSpaceSpikeNoise
Uncategorised: RandLambda
TorchOrNumpy:  RandRicianNoise
Torch:         RandRotate
TorchOrNumpy:  RandRotate90
TorchOrNumpy:  RandScaleCrop
TorchOrNumpy:  RandScaleIntensity
TorchOrNumpy:  RandShiftIntensity
TorchOrNumpy:  RandSpatialCrop
TorchOrNumpy:  RandSpatialCropSamples
TorchOrNumpy:  RandStdShiftIntensity
TorchOrNumpy:  RandWeightedCrop
Torch:         RandZoom
TorchOrNumpy:  RemoveRepeatedChannel
TorchOrNumpy:  RepeatChannel
Torch:         Resample
Torch:         Resize
TorchOrNumpy:  ResizeWithPadOrCrop
Torch:         Rotate
TorchOrNumpy:  Rotate90
TorchOrNumpy:  SaveImage
Torch:         SavitzkyGolaySmooth
TorchOrNumpy:  ScaleIntensity
TorchOrNumpy:  ScaleIntensityRange
TorchOrNumpy:  ScaleIntensityRangePercentiles
TorchOrNumpy:  ShiftIntensity
TorchOrNumpy:  SimulateDelay
Torch:         Spacing
TorchOrNumpy:  SpatialCrop
TorchOrNumpy:  SpatialPad
TorchOrNumpy:  SplitChannel
TorchOrNumpy:  SqueezeDim
TorchOrNumpy:  StdShiftIntensity
TorchOrNumpy:  ThresholdIntensity
TorchOrNumpy:  ToNumpy
Torch:         ToTensor
TorchOrNumpy:  Transpose
TorchOrNumpy:  VoteEnsemble
Torch:         Zoom

@wyli
Copy link
Copy Markdown
Contributor

wyli commented Nov 5, 2021

feature merged into dev

@wyli wyli closed this Nov 5, 2021
@wyli wyli deleted the feature/2231-transforms branch December 2, 2021 12:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Module: transform data transforms for preprocessing and postprocessing.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Default to using Pytorch APIs for monai.transforms (ETA TBD)

3 participants