如何为多个类别训练语义分割模型

时间:2018-09-09 05:25:41

标签: python image-segmentation

我正在使用U-Net架构来训练细分模型。我将灰度图像作为输入,并将对应的标签的二进制蒙版图像存储在numpy数组中。

它们都具有形状(total_imgs, rows, cols, 1)

就像在根据本文https://arxiv.org/abs/1505.04597的体系结构中一样,我希望有两个输出类-一个用于前景,一个用于背景。本文似乎做到这一点的方法是将模型的最后一个conv层更改为具有形状(none,rows,cols,2)。

我试图在我的模型中做到这一点。我的模型架构如下:

input_1 (InputLayer) (None, 256, 256, 1) 0
_______________________________________________________________________________
conv2d_21 (Conv2D) (None, 256, 256, 64) 73792 concatenate_4[0][0]
_______________________________________________________________________________
conv2d_22 (Conv2D) (None, 256, 256, 64) 36928 conv2d_21[0][0]
_______________________________________________________________________________
conv2d_23 (Conv2D) (None, 256, 256, 2) 130 conv2d_22[0][0]
==================================================================
Total params: 31,034,498 
Trainable params: 31,032,578 
Non-trainable params: 1,920

但是,由于我的输入是灰度的,因此出现此错误

Error when checking target expected conv2d_23 to have shape (256, 256, 2) but got array with shape (256, 256, 1)

我如何更改我的输入数据以满足此要求,然后进行两节课训练?

我尝试更改输入,以使掩码具有2个通道,以匹配输出类别的数量。

imgdatas = np.ndarray((len(imgs), 256, 256 ,1), dtype=np.uint8) #grascale
imglabels = np.ndarray((len(imgs), 256, 256, 2), dtype=np.uint8) #if I change channels to 2 the model runs

但是,尽管这允许模型运行,但我仍然面临问题:

  • 结果不是我所期望的-输出精度/损耗与历时曲线非常平滑,在训练多个班级时都不会出现不稳定的振荡行为。
  • 在测试数据上运行模型后,保存结果时出现另一个错误,因为当然2个通道不是图像格式的有效通道数。

0 个答案:

没有答案