Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/2231 transforms #2278

Closed
wants to merge 209 commits into from
Closed

Feature/2231 transforms #2278

wants to merge 209 commits into from

Conversation

rijobro
Copy link
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.

rijobro and others added 14 commits May 27, 2021 13:52
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Wenqi Li <wenqil@nvidia.com>
@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 and others added 13 commits June 1, 2021 14:01
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
…atedChannel

Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Wenqi Li <wenqil@nvidia.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
@rijobro
Copy link
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 <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com>
@rijobro
Copy link
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
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