HZCTony / U-net-with-multiple-classification

44 stars 13 forks source link

关于mask数据的reshape #5

Open JCCVW opened 4 years ago

JCCVW commented 4 years ago

前辈您好,我刚接触分割,有个问题请教。 ` if(flag_multi_class): img = img / 255. mask = mask[:,:,:,0] if(len(mask.shape) == 4) else mask[:,:,0] mask[(mask!=0.)&(mask!=255.)&(mask!=128.)] = 0. new_mask = np.zeros(mask.shape + (num_class,)) ########################################################################

You should define the value of your labelled gray imgs

    #For example,the imgs in /data/catndog/train/label/cat is labelled white
    #you got to define new_mask[mask == 255, 0] = 1
    #it equals to the one-hot array [1,0,0].
    ########################################################################
    new_mask[mask == 255.,   0] = 1
    new_mask[mask == 128.,   1] = 1
    new_mask[mask == 0.,   2] = 1
    mask = new_mask`

这里关于mask的reshape,我猜测组装的方式是:您是分了三类(猫狗和背景)。上面的操作是用类别数量设置mask的厚度,每一层代表一类。按您上面的代码设置为:第一层(0层)猫,您的标签应该是把猫标记成255,第二层是狗,您标记为128,第三层为背景您标记为0,让后将这三层对应标签位置的像素都设为1。不知道这样我的理解对不对。

您在训练是图像的读取方式还是gray 也就是说image和mask的初始形状都是(batch,w,h,1),batch假设等于2 然后img没有reshape操作,所以他的形状(2,256,256,1) mask设置reshape,所以他的形状是(2,256,256,3)

我的数据为4类(包括背景) 按照上面的理解我出现了下面的问题 ValueError: Error when checking target: expected conv2d_24 to have shape (256, 256, 3) but got array with shape (256, 256, 4)

百思不得解

期待您的回复,再次感谢

JCCVW commented 4 years ago

另外,github上的代码我实在下不下来,能否发到我邮箱,18818216184@163.com