From cbc69212cc0acb3d0b0cab460bcca544cbdf6a75 Mon Sep 17 00:00:00 2001 From: kate-sann5100 Date: Thu, 1 Apr 2021 13:22:47 +0100 Subject: [PATCH 1/2] clip variance to be >= 0 Signed-off-by: kate-sann5100 --- monai/losses/image_dissimilarity.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/monai/losses/image_dissimilarity.py b/monai/losses/image_dissimilarity.py index 67b2d177f6..85c325acef 100644 --- a/monai/losses/image_dissimilarity.py +++ b/monai/losses/image_dissimilarity.py @@ -65,8 +65,8 @@ def __init__( kernel_size: int = 3, kernel_type: str = "rectangular", reduction: Union[LossReduction, str] = LossReduction.MEAN, - smooth_nr: float = 1e-7, - smooth_dr: float = 1e-7, + smooth_nr: float = 1e-5, + smooth_dr: float = 1e-5, ) -> None: """ Args: @@ -146,6 +146,8 @@ def forward(self, pred: torch.Tensor, target: torch.Tensor) -> torch.Tensor: cross = tp_sum - p_avg * t_sum t_var = t2_sum - t_avg * t_sum # std[t] ** 2 p_var = p2_sum - p_avg * p_sum # std[p] ** 2 + t_var = torch.maximum(t_var, torch.zeros_like(t_var)) + p_var = torch.maximum(p_var, torch.zeros_like(p_var)) ncc: torch.Tensor = (cross * cross + self.smooth_nr) / (t_var * p_var + self.smooth_dr) # shape = (batch, 1, D, H, W) From e44480e61ec315d5a821f6107b7d250962c8e640 Mon Sep 17 00:00:00 2001 From: Wenqi Li Date: Thu, 1 Apr 2021 17:53:11 +0100 Subject: [PATCH 2/2] max for torch1.6 Signed-off-by: Wenqi Li --- monai/losses/image_dissimilarity.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/monai/losses/image_dissimilarity.py b/monai/losses/image_dissimilarity.py index 85c325acef..eed5808aa3 100644 --- a/monai/losses/image_dissimilarity.py +++ b/monai/losses/image_dissimilarity.py @@ -146,8 +146,8 @@ def forward(self, pred: torch.Tensor, target: torch.Tensor) -> torch.Tensor: cross = tp_sum - p_avg * t_sum t_var = t2_sum - t_avg * t_sum # std[t] ** 2 p_var = p2_sum - p_avg * p_sum # std[p] ** 2 - t_var = torch.maximum(t_var, torch.zeros_like(t_var)) - p_var = torch.maximum(p_var, torch.zeros_like(p_var)) + t_var = torch.max(t_var, torch.zeros_like(t_var)) + p_var = torch.max(p_var, torch.zeros_like(p_var)) ncc: torch.Tensor = (cross * cross + self.smooth_nr) / (t_var * p_var + self.smooth_dr) # shape = (batch, 1, D, H, W)