-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
cropforeground with margin>0 #6685
Comments
Hi @wyli, It looks like the error comes from line 1001, if MONAI/monai/transforms/utils.py Lines 1001 to 1003 in e7fb74f
I will create a PR to fix it. |
Signed-off-by: KumoLiu <[email protected]>
Fixes #6685 . ### Description When `allow_smaller=True`, it allows the image size to be smaller than the box size and will pad it. But in `generate_spatial_bounding_box`, it generates the wrong bounding box. https://github.com/Project-MONAI/MONAI/blob/e7fb74f32b5371bb54bff7a47447df31d06d8edf/monai/transforms/utils.py#L1001-L1003 Change the default value of `allow_smaller` in `CropForeground` to `False` to be consistent with the previous behavior. ### Types of changes <!--- Put an `x` in all the boxes that apply, and remove the not applicable items --> - [x] 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 --disttests`. - [ ] In-line docstrings updated. - [ ] Documentation updated, tested `make html` command in the `docs/` folder. --------- Signed-off-by: KumoLiu <[email protected]> Signed-off-by: YunLiu <[email protected]> Co-authored-by: Wenqi Li <[email protected]>
I'm a little confused with the change here,.. in my understanding CropForeground(margin=2) with allow_smaller=True (which was the default until this commit) was already doing the right thing. we usually want to crop image around the tumor (or around visible foreground). So If I want to crop around tumor with margin 10, I expect it to find a tight box around it, add 10px (in all directions) , but if anything is outside of the image, i don't need any padding with zeros. I only want the image content around tumor and a margin 10 (but only when possible). So CropForeground(margin=10, allow_smaller=True) was previously doing that (I think). which is to allow the region to be smaller (adjust to image bounds, without any padding) is my understanding correct here? or am I confused why we're changing it? thank you |
Hi @myron, let me clarify the change for you. Let me provide a simple example to illustrate this. In the given scenario, the output will be padded by default. However, if you modify
I'm not sure whether you mean we need to change the default value of the Hope I have explained it clearly, thanks! |
Hi @KumoLiu , so you've changed what "allow_smaller" parameter means now (regardless if it is more intuitive or not, it changes the code that used that parameter before).
The behavior of that transform has now changed after your commit, and a user will not get the same result. If other users used allow_smaller=True in their code, then their code will not work as before too to allow_smaller=False.
The transforms I have are
Both image and label are returned of all zeros, but of correct shape [1, 256,256,256]. It happens randomly, (usually for several images in the dataset, always different images). The all Zero output is after the "RandCropByLabelClassesd" transform, not after "CropForegroundd". And I could not figure it out, so far I only narrow it down to your exact commit. Before it works fine, after I get these random "zeros".. Since you've changed what allow_smaller means, may be it has to with it somehow.. |
So the original bug I'm reporting is for the case of |
I think there is a different way to achieve this, but not as in this PR. It's okay to change the default value of "allow_smaller", but this PR also changed what "allow_smaller" represents, so even when manually setting it to allow_smaller=True, we can't achieve the same result. what previously was CropForeground(margin=64, allow_smaller=True) is not the same any more. Instead of tightly cropping around tumor (with potential margin within image bounds), we can get a large boundary of zeros. so, we'll need to update existing code in monaicontributions that uses it and retest, and monai users will have to do the same if they have it in their code. On a side note - I also didn't think it was a bug in your example, it behaved according to my expectation from the docs. We usually need to crop around an organ or tumor, without extending outside the image content. the only time I need to pad outside the image is when I specify a minimal ROI (but that can't achieved with this transform anyway) perhaps there is a different way to achieve it without breaking the existing logic. and if not, then we will need to solve a new bug, as I'm getting all zero outputs now. |
Hi @myron, I agree that my PR changed the behavior without providing a deprecation warning. As @wyli mentioned, we may need to update the docstring to clarify. However, I did not change the default behavior in this PR; you can simply try @wyli's example above, which produces the same result. You can also only change 'allow_smaller' to get the same result as before. For the third question you mentioned, could you please share the data? Maybe I can help take a look at it. |
My use case was to crop the largest foreground to make the surface distance computation more efficient Lines 178 to 182 in 4afa2ad
if the expected margin doesn't exist in some cases, it'll cause some strange bugs when doing the convolution encoding Lines 191 to 193 in 4afa2ad
|
I understand your example, thank you, It will probably also benefit from a new parameter "minimal_shape", so that the cropped region should never be smaller then some minimal roi (I'd like to have that feature too). but anyway this PR looks small, but introduced a breaking change, suddenly my experiments got lower numbers, and a strange bug appeared, and I spent a good part of the day narrowing it down to this PR :( I think other users might get the same experience, but they won't have the knowledge to debug to what happened. |
may we can have CropForeground(margin=64) behave the new way (with allow_smaller=False new default) but keep the CropForeground(margin=64, allow_smaller=True) - behaving the same as it was prior to his PR? |
thanks, that's a good point. agree with this solution, maybe we can further warn the default value change when |
Fixes #6685. - Revert #6686 without changing the meaning of `allow_smaller` in `generate_spatial_bounding_box`. - Update the docstring of the `allow_smaller` to make it more clear. - Add `deprecated_arg_default`, then after 1.3, `CropForeground` with pad by default even if the image edges are smaller than the final box edges. ### Types of changes <!--- Put an `x` in all the boxes that apply, and remove the not applicable items --> - [x] 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 --disttests`. - [ ] In-line docstrings updated. - [ ] Documentation updated, tested `make html` command in the `docs/` folder. --------- Signed-off-by: KumoLiu <[email protected]>
Old issue, but still, I'm getting so many warnings when using this transforms
I'm not leaving anything to defaults, and always specify the parameter "allow_smaller=True"
|
hi @myron, yes the warning is only displayed if there's code depending on the default value. so it comes from somewhere e.g. MONAI/monai/auto3dseg/utils.py Line 65 in 3b27bb6
|
I see, you're right. There are calls to it in DataAnalyzer() without the parameter allow_smaller... We probably need to update all calls to CropForeground() to CropForeground(allow_smaller=True) in monai codebase, if you're going to change the default value of allow_smaller in the future. Otherwise our previous results, won't be reproducible. |
Signed-off-by: KumoLiu <[email protected]>
Fixes #6685 . ### Description Change the default value of `allow_smaller` to `False` where `CropForeground` is used to avoid FutureWarning. ### Types of changes <!--- Put an `x` in all the boxes that apply, and remove the not applicable items --> - [x] 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 --disttests`. - [ ] In-line docstrings updated. - [ ] Documentation updated, tested `make html` command in the `docs/` folder. --------- Signed-off-by: KumoLiu <[email protected]>
Describe the bug
should crop and add a 2pixel margin to each side of the output because
margin=2
.but the result with the latest dev branch (up to e7fb74f)is:
In my understanding, the expected output would be:
The text was updated successfully, but these errors were encountered: