How to implement multi-class semantic segmentation?

后端 未结 2 1661
误落风尘
误落风尘 2020-12-28 20:15

I\'m able to train a U-net with labeled images that have a binary classification.

But I\'m having a hard time figuring out how to configure the final layers in Kera

相关标签:
2条回答
  • 2020-12-28 21:03

    You should have your target as (634,4,64,64) if you're using channels_first.
    Or (634,64,64,4) if channels_last.

    Each channel of your target should be one class. Each channel is an image of 0's and 1's, where 1 means that pixel is that class and 0 means that pixel is not that class.

    Then, your target is 634 groups, each group containing four images, each image having 64x64 pixels, where pixels 1 indicate the presence of the desired feature.

    I'm not sure the result will be ordered correctly, but you can try:

    mask_train = to_categorical(mask_train, 4)
    mask_train = mask_train.reshape((634,64,64,4)) 
    #I chose channels last here because to_categorical is outputing your classes last: (2596864,4)
    
    #moving the channel:
    mask_train = np.moveaxis(mask_train,-1,1)
    

    If the ordering doesn't work properly, you can do it manually:

    newMask = np.zeros((634,4,64,64))
    
    for samp in range(len(mask_train)):
        im = mask_train[samp,0]
        for x in range(len(im)):
            row = im[x]
            for y in range(len(row)):
                y_val = row[y]
                newMask[samp,y_val,x,y] = 1
    
    0 讨论(0)
  • 2020-12-28 21:03

    Bit late but you should try

    mask_train = to_categorical(mask_train, num_classes=None)
    

    That will result in (634, 4, 64, 64) for mask_train.shape and a binary mask for each individual class (one-hot encoded).

    Last conv layer, activation and loss looks good for multiclass segmentation.

    0 讨论(0)
提交回复
热议问题