71 lines (70 with data), 9.8 kB
o
A®eÃ. ã @ sø d dl Z d dlm mZ d dl mZ d dlmZ d dlmZm Z m
Z
dddZG dd d ejZ
G d
d dejZG dd
d
ejZG dd deZG dd deZG dd dejZG dd dejZG dd dej Zdd Zdd Zdd ZdS )é N)Únn)ÚVariable)ÚMSELossÚSmoothL1LossÚL1Lossçíµ ÷ư>c C s~ | ¡ | ¡ ksJ dt| } t|}| ¡ }| | d¡}|dur'|| }| | d¡|| d¡ }d||j|d S )aÓ
Computes DiceCoefficient as defined in https://arxiv.org/abs/1606.04797 given a multi channel input and target.
Assumes the input is a normalized probability, e.g. a result of Sigmoid or Softmax function.
Args:
input (torch.Tensor): NxCxSpatial input tensor
target (torch.Tensor): NxCxSpatial target tensor
epsilon (float): prevents division by zero
weight (torch.Tensor): Cx1 tensor of weight per channel/class
ú-'input' and 'target' must have the same shapeéÿÿÿÿNé ©Úmin)ÚsizeÚflattenÚfloatÚsumÚclamp)ÚinputÚtargetÚepsilonÚweightÚ intersectÚdenominator© r úDc:\Users\zafry\Downloads\bone_paper_codes\bone_paper_codes\losses.pyÚcompute_per_channel_dice s
r c ó( e Zd ZdZ fddZdd Z ZS )Ú_MaskingLossWrapperzv
Loss wrapper which prevents the gradient of the loss to be computed where target is equal to `ignore_index`.
c s. t t| ¡ |d usJ d|| _|| _d S )Nzignore_index cannot be None)Úsuperr Ú__init__ÚlossÚignore_index)Úselfr r ©Ú __class__r r r ) s
z_MaskingLossWrapper.__init__c C s2 | ¡ | j¡}d|_|| }|| }| ||¡S )NF)ÚcloneÚne_r Ú
requires_gradr )r! r r Úmaskr r r Úforward/ s
z_MaskingLossWrapper.forward©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r r( Ú
__classcell__r r r"