Is this a correct implementation of a meandice function and does higher value imply better segmentation quality?

Viewed 30

HarDNet was trained to perform semantic segmentation of images. Increase of a meandice implies that the model quality improved.

def meandice(pred, mask):
    weit = 1 + 5 * torch.abs(F.avg_pool2d(mask, kernel_size=31, stride=1, padding=15) - mask)
    wbce = F.binary_cross_entropy_with_logits(pred, mask, reduce='none')
    wbce = (weit * wbce).sum(dim=(2, 3)) / weit.sum(dim=(2, 3))

    pred = torch.sigmoid(pred)
    inter = ((pred * mask) * weit).sum(dim=(2, 3))
    union = ((pred + mask) * weit).sum(dim=(2, 3))
    wiou = 1 - (inter + 1) / (union - inter + 1)

    return (wbce + wiou).mean()

This is the code they are using. But the increase in wbce (binary cross entropy) implies that the predictions are getting worse. Same is true for wiou which 1 minus the Intersection over the Union. The weit is a weighting coefficient that increases the loss cost near the boundaries.

Should this function be minimized during the optimization?

0 Answers
Related