Giter VIP home page Giter VIP logo

Comments (1)

HKervadec avatar HKervadec commented on August 16, 2024

Hey there,

The code is a little bit more convoluted that needed, because I used the same codebase for my other works (namely https://github.com/LIVIAETS/SizeLoss_WSS, but you can checkout the other repo in the organization).
Which means I have to handle of following cases:

  • Varying number of losses, with different weights and parameters for each one
  • Losses with and without bounds to enforce

Right now all my losses use either the label or the bounds, but that might change in the future so I kept functions that take the two as an input.

In the boundary loss paper, the distance map are labels transformed in a different way:

    gt_transform = transforms.Compose([
        lambda img: np.array(img)[np.newaxis, ...],
        lambda nd: torch.tensor(nd, dtype=torch.int64),
        partial(class2one_hot, C=n_class),
        itemgetter(0)
    ])
    dist_map_transform = transforms.Compose([
        lambda img: np.array(img)[np.newaxis, ...],
        lambda nd: torch.tensor(nd, dtype=torch.int64),
        partial(class2one_hot, C=n_class),
        itemgetter(0),
        lambda t: t.cpu().numpy(),
        one_hot2dist,
        lambda nd: torch.tensor(nd, dtype=torch.float32)
    ])

(you will notice that the distmap transform is a continuation of the gt_transform)

the data folders are defined like this:

B_DATA = [('in_npy', torch.tensor, False), ('gt_npy', gt_transform, True)]

results/wmh/gdl_surface_steal: DATA = --folders="$(B_DATA)+[('gt_npy', gt_transform, True), \
         ('gt_npy', dist_map_transform, False)]" 

which gives 4 tensors as output of the dataloader:

  • in_npy, the input image, which is simply loaded and fed to the network
  • gt_npy, the labels, used to compute the metrics
  • gt_npy, the labels, used this time for the loss using them (GDL in this case)
  • gt_npy, with the dist_map transform, used for the boundary loss

Then, the losses are defined this way

results/wmh/gdl_surface_steal: OPT = --losses="[('GeneralizedDice', {'idc': [0, 1]}, None, None, None, 1), \
    ('SurfaceLoss', {'idc': [1]}, None, None, None, 0.01)]"

The three consecutive None correspond to the options for the bounds:

  • The method to generate the bounds (constant, dependent on the data, predictive...)
  • The options for the generation
  • What function to constraint (size, centroid, ...)

You can find one working example here https://github.com/LIVIAETS/SizeLoss_WSS/blob/master/acdc.make#L149 if you are interested.

So, to summarize, there is no mistake, as we end up with two losses:

  • GDL, which takes as input the label transformed with gt_transform
  • surface loss, which takes as input the label transformed with dist_map_transform

Both of them ignore the provided bounds.

Let me know if some part was not clear,

Hoel

from boundary-loss.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.