Skip to content

add swin_unetr model#4074

Merged
wyli merged 27 commits intoProject-MONAI:devfrom
ahatamiz:swin_unetr_v1
May 3, 2022
Merged

add swin_unetr model#4074
wyli merged 27 commits intoProject-MONAI:devfrom
ahatamiz:swin_unetr_v1

Conversation

@ahatamiz
Copy link
Copy Markdown
Contributor

@ahatamiz ahatamiz commented Apr 4, 2022

Signed-off-by: ahatamizadeh [email protected]

Fixes #3520 .

Description

This PR adds the Swin UNETR [1] model to MONAI.

[1]: Hatamizadeh, Ali, Vishwesh Nath, Yucheng Tang, Dong Yang, Holger Roth, and Daguang Xu. "Swin UNETR: Swin Transformers for Semantic Segmentation of Brain Tumors in MRI Images." arXiv preprint arXiv:2201.01266 (2022).

Swin UNETR is also used in self-supervised learning for 3D medical image segmentation [2].

[2]: Tang, Yucheng, Dong Yang, Wenqi Li, Holger Roth, Bennett Landman, Daguang Xu, Vishwesh Nath, and Ali Hatamizadeh. "Self-supervised pre-training of swin transformers for 3d medical image analysis." arXiv preprint arXiv:2111.14791 (2021).
 

Status

Ready

Types of changes

  • Non-breaking change (fix or new feature that would not break existing functionality).
  • 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 --disttests.
  • In-line docstrings updated.
  • Documentation updated, tested make html command in the docs/ folder.

ahatamiz added 2 commits April 4, 2022 15:33
Signed-off-by: ahatamizadeh <[email protected]>
Signed-off-by: ahatamizadeh <[email protected]>
@ahatamiz ahatamiz requested review from Nic-Ma and wyli April 4, 2022 23:03
@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented Apr 4, 2022

/build

@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented Apr 4, 2022

/black

Signed-off-by: ahatamizadeh <[email protected]>
Signed-off-by: ahatamizadeh <[email protected]>
@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented Apr 4, 2022

/build

@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented Apr 4, 2022

/black

Signed-off-by: ahatamizadeh <[email protected]>
@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented Apr 5, 2022

/build

@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented Apr 5, 2022

/black

Signed-off-by: ahatamizadeh <[email protected]>
@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented Apr 5, 2022

/build

@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented Apr 5, 2022

/black

Signed-off-by: ahatamizadeh <[email protected]>
@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented Apr 5, 2022

/build

@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented Apr 5, 2022

/black

@ahatamiz ahatamiz added this to the Swin UNETR [P1] milestone Apr 5, 2022
@ahatamiz ahatamiz self-assigned this Apr 5, 2022
Signed-off-by: ahatamizadeh <[email protected]>
Signed-off-by: ahatamizadeh <[email protected]>
@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented May 2, 2022

/black

@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented May 2, 2022

/build

Signed-off-by: ahatamizadeh <[email protected]>
@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented May 2, 2022

/black

@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented May 2, 2022

/build

Signed-off-by: ahatamizadeh <[email protected]>
@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented May 3, 2022

/black

@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented May 3, 2022

All checks are passed (blossom needs to be triggered) . It would be great if this PR can be reviewed.

Thanks

@Nic-Ma
Copy link
Copy Markdown
Contributor

Nic-Ma commented May 3, 2022

/build

@Nic-Ma
Copy link
Copy Markdown
Contributor

Nic-Ma commented May 3, 2022

@wyli , please see the changes as listed below:

  • 2D support added. window_reverse, WindowAttention, SwinTransformerBlock and others support both 2D and 3D. Furthermore, additional 2D test cases were added.
  • DropPath moved to layers. Test cases are added.
  • Weigh_init moved to layers. Test cases are added.
  • PatchEmbed moved under patchembedding.py. Descriptions added for the new embedding (differences etc.)
  • torch meshgrid index added.

I investigated the possibility of using torch.jit.script. But window operations as well as gradient checkpointing are not supported. Since the input shape needs to be fixed for this model, we can still support Torch Script by using torch.jit.trace ( similar to the approach used in the latest Clara Train  release).

Thanks

Hi @wyli ,

Seems @ahatamiz addressed several of your previous comments, could you please help review and confirm them?

Thanks in advance.

Copy link
Copy Markdown
Contributor Author

@ahatamiz ahatamiz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All concerns addressed.

@wyli
Copy link
Copy Markdown
Contributor

wyli commented May 3, 2022

/build

Copy link
Copy Markdown
Contributor

@wyli wyli left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, it looks good to me apart from the typos (commented inline).

optionally the norm_layer could be replaced using get_norm_layer, it supports keyword arguments:

>>> from monai.networks.layers import get_norm_layer
# layernorm with additional params.
>>> norm_name = ("layer", {"normalized_shape": 10})
>>> get_norm_layer(norm_name)
LayerNorm((10,), eps=1e-05, elementwise_affine=True)
# group norm with additional params.
>>> norm_name = ("group", {"num_groups": 1, "num_channels": 10})
>>> get_norm_layer(norm_name)
GroupNorm(1, 10, eps=1e-05, affine=True)
>>> 

Signed-off-by: ahatamizadeh <[email protected]>
@ahatamiz
Copy link
Copy Markdown
Contributor Author

ahatamiz commented May 3, 2022

/black

@wyli
Copy link
Copy Markdown
Contributor

wyli commented May 3, 2022

/build

@wyli wyli enabled auto-merge (squash) May 3, 2022 22:33
@wyli wyli merged commit e093d0b into Project-MONAI:dev May 3, 2022
@ahatamiz ahatamiz deleted the swin_unetr_v1 branch May 3, 2022 23:27
wyli added a commit that referenced this pull request May 5, 2022
* add swin_unetr model (#4074)

* add swin_unetr model

* 4217 Update PyTorch docker to 22.04 (#4218)

* [DLMED] update to 22.04

Signed-off-by: Nic Ma <[email protected]>

* fixes unit test tests.test_lr_finder

Signed-off-by: Wenqi Li <[email protected]>

* test new_empty

Signed-off-by: Wenqi Li <[email protected]>

Co-authored-by: Wenqi Li <[email protected]>
Co-authored-by: Wenqi Li <[email protected]>

* Add InstanceNorm3dNVFuser support (#4194)

* implement the base class

Signed-off-by: Yiheng Wang <[email protected]>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* add unittest

Signed-off-by: Yiheng Wang <[email protected]>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* autofix

Signed-off-by: Yiheng Wang <[email protected]>

* switch to call apex directly

Signed-off-by: Yiheng Wang <[email protected]>

* uncomment unittest

Signed-off-by: Yiheng Wang <[email protected]>

* add apex install link in docstring

Signed-off-by: Yiheng Wang <[email protected]>

* add channels_last_3d test case

Signed-off-by: Yiheng Wang <[email protected]>

* rewrite types

Signed-off-by: Yiheng Wang <[email protected]>

* change types

Signed-off-by: Yiheng Wang <[email protected]>

* add docstrings

Signed-off-by: Yiheng Wang <[email protected]>

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Wenqi Li <[email protected]>

Co-authored-by: Ali Hatamizadeh <[email protected]>
Co-authored-by: Nic Ma <[email protected]>
Co-authored-by: Yiheng Wang <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Can-Zhao pushed a commit to Can-Zhao/MONAI that referenced this pull request May 10, 2022
wyli pushed a commit that referenced this pull request May 13, 2022
* add swin_unetr model (#4074)

* add swin_unetr model

Signed-off-by: kbressem <[email protected]>

* 4217 Update PyTorch docker to 22.04 (#4218)

* [DLMED] update to 22.04

Signed-off-by: Nic Ma <[email protected]>

* fixes unit test tests.test_lr_finder

Signed-off-by: Wenqi Li <[email protected]>

* test new_empty

Signed-off-by: Wenqi Li <[email protected]>

Co-authored-by: Wenqi Li <[email protected]>
Co-authored-by: Wenqi Li <[email protected]>
Signed-off-by: kbressem <[email protected]>

* Add InstanceNorm3dNVFuser support (#4194)

* implement the base class

Signed-off-by: Yiheng Wang <[email protected]>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* add unittest

Signed-off-by: Yiheng Wang <[email protected]>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* autofix

Signed-off-by: Yiheng Wang <[email protected]>

* switch to call apex directly

Signed-off-by: Yiheng Wang <[email protected]>

* uncomment unittest

Signed-off-by: Yiheng Wang <[email protected]>

* add apex install link in docstring

Signed-off-by: Yiheng Wang <[email protected]>

* add channels_last_3d test case

Signed-off-by: Yiheng Wang <[email protected]>

* rewrite types

Signed-off-by: Yiheng Wang <[email protected]>

* change types

Signed-off-by: Yiheng Wang <[email protected]>

* add docstrings

Signed-off-by: Yiheng Wang <[email protected]>

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Wenqi Li <[email protected]>
Signed-off-by: kbressem <[email protected]>

* Update dice.py (#4234)

* Update dice.py

reduce redundant operations in DiceFocalLoss, initially caused oom

Signed-off-by: Ryan Clanton <[email protected]>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

Signed-off-by: Ryan Clanton <[email protected]>

* [MONAI] python code formatting

Signed-off-by: monai-bot <[email protected]>

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: monai-bot <[email protected]>
Signed-off-by: kbressem <[email protected]>

* Bug fix and improvement in WSI (#4216)

* Make all transforms optional

Signed-off-by: Behrooz <[email protected]>

* Update wsireader tests

Signed-off-by: Behrooz <[email protected]>

* Remove optional from PersistentDataset and its derivatives

Signed-off-by: Behrooz <[email protected]>

* Add unittests for cache without transform

Signed-off-by: Behrooz <[email protected]>

* Add default replace_rate

Signed-off-by: Behrooz <[email protected]>

* Add default value

Signed-off-by: Behrooz <[email protected]>

* Set default replace_rate to 0.1

Signed-off-by: Behrooz <[email protected]>

* Update metadata to include path

Signed-off-by: Behrooz <[email protected]>

* Adds SmartCachePatchWSIDataset

Signed-off-by: Behrooz <[email protected]>

* Add unittests for SmartCachePatchWSIDataset

Signed-off-by: Behrooz <[email protected]>

* Update references

Signed-off-by: Behrooz <[email protected]>

* Update docs

Signed-off-by: Behrooz <[email protected]>

* Remove smart cache

Signed-off-by: Behrooz <[email protected]>

* Remove unused imports

Signed-off-by: Behrooz <[email protected]>

* Add path metadata for OpenSlide

Signed-off-by: Behrooz <[email protected]>

* Update metadata to be unified across different backends

Signed-off-by: Behrooz <[email protected]>

* Update wsi metadata for multi wsi objects

Signed-off-by: Behrooz <[email protected]>

* Add unittests for wsi metadata

Signed-off-by: Behrooz <[email protected]>
Signed-off-by: kbressem <[email protected]>

* Replace module (#4245)

* replace modules

Signed-off-by: Richard Brown <[email protected]>

* fix

Signed-off-by: Richard Brown <[email protected]>

* replace_module -> replace_modules

Signed-off-by: Richard Brown <[email protected]>

* fix

Signed-off-by: Richard Brown <[email protected]>
Signed-off-by: kbressem <[email protected]>

* Add GaussianSmooth as antialiasing filter in Resize (#4249)

Signed-off-by: Can Zhao <[email protected]>
Signed-off-by: kbressem <[email protected]>

* 4235 fix 2204 nvfuser issue (#4241)

* reproduce issue

Signed-off-by: Yiheng Wang <[email protected]>

* remove 22.01 02

Signed-off-by: Yiheng Wang <[email protected]>

* remove other workflows

Signed-off-by: Yiheng Wang <[email protected]>

* run on pull request

Signed-off-by: Yiheng Wang <[email protected]>

* remove sleep

Signed-off-by: Yiheng Wang <[email protected]>

* test single layer forward

Signed-off-by: Yiheng Wang <[email protected]>

* add has_nvfuser

Signed-off-by: Yiheng Wang <[email protected]>

* add check within factory

Signed-off-by: Yiheng Wang <[email protected]>

* revert to original cron.yml

Signed-off-by: Yiheng Wang <[email protected]>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fix old pt issue

Signed-off-by: Yiheng Wang <[email protected]>

* change to return directly if no cuda

Signed-off-by: Yiheng Wang <[email protected]>

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Signed-off-by: kbressem <[email protected]>

* Update to Bundle Specifiation (#4250)

* Update to bundle specifiation

Signed-off-by: Eric Kerfoot <[email protected]>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Adding description in spec discussing the saved Torchscript object's file storage behaviour, and tweaking ckpt_export to add .json extension

Signed-off-by: Eric Kerfoot <[email protected]>

* Annotating optional bundle files

Signed-off-by: Eric Kerfoot <[email protected]>

* Adjusted ckpt_export test

Signed-off-by: Eric Kerfoot <[email protected]>

* Fix

Signed-off-by: Eric Kerfoot <[email protected]>

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Signed-off-by: kbressem <[email protected]>

* Implement NrrdReader and NrrdImage classes

Signed-off-by: kbressem <[email protected]>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

Signed-off-by: kbressem <[email protected]>

* run auto style fixes on image_reader.py

Signed-off-by: kbressem <[email protected]>

* add NrrdReader to monai/data/__init__.py

Signed-off-by: kbressem <[email protected]>

* Change the way spatial information is handled in NrrdReader

Signed-off-by: kbressem <[email protected]>

* add tests for NrrdReader

Signed-off-by: kbressem <[email protected]>

* Add NrrdReader to list of possible readers for LoadImage

Signed-off-by: kbressem <[email protected]>

* autofix formating

Signed-off-by: kbressem <[email protected]>

* autofix formating

Signed-off-by: kbressem <[email protected]>

* change NrrdImage class to namedtuple and make flake8 happy

Signed-off-by: kbressem <[email protected]>

* Add pynrrd to requirements

Signed-off-by: kbressem <[email protected]>

* correct typing for namedtumple
make flake8 happy

Signed-off-by: kbressem <[email protected]>

* Add pynrrd info to `get_optional_config_values`
Changed NrrdImage to dataclass

Signed-off-by: kbressem <[email protected]>

* exclude test_nrrd_reader.py from min tests

Signed-off-by: kbressem <[email protected]>

* add pynrrd to config files

Signed-off-by: kbressem <[email protected]>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Change the way space is handled in the header. Now, if space is not in header, it is assumed to be LPS and converted to RAS. If space is defined and not LPS, nothing is done to prevent wrong conversions.

Signed-off-by: kbressem <[email protected]>

* add `TestLoadSaveNrrd` where it is tested if a nrrd file, created by ITKWriter can be loaded again. 2D and 3D files with no channels are tested

Signed-off-by: kbressem <[email protected]>

* autofix format


Co-authored-by: kbressem <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Swin UNETR model

5 participants