无法将大小为6的数组重整为形状(1,32,128,6)语义分段

问题描述 投票:0回答:1

我正在尝试使用tf_unet网络构建U-net,但是在加载数据时遇到问题:我的训练集的形状为:

trainX.shape
(80, 32, 128, 2)

和我的标签,是使用MultiLabelBinarizer()热编码的,其形状为

trainY.shape
(80, 6)

代码期望数据的形状为数据的[图像数量,nx,ny,通道数]和[一帧编码的图像形状[nx,ny,类数]]。我不确定如何重塑标签以使其适合所需的输入。我的标签如下:

trainY
array([[1, 1, 1, 0, 1, 0],
       [0, 1, 1, 0, 0, 1],
       [0, 1, 0, 0, 1, 0],
       [0, 1, 1, 1, 1, 0],
       [1, 1, 1, 0, 0, 0],

数据看起来像这样:

trainX
array([[[[ 5.22126081e-01, -5.55787108e-01],
         [ 5.23363288e-01, -5.55895832e-01],
         [ 5.22337312e-01, -5.56328280e-01],
         ...,
         [ 5.22050769e-01, -5.56036279e-01],
         [ 5.22345243e-01, -5.56362269e-01],
         [ 5.22309731e-01, -5.56512230e-01]],

        [[ 1.10787671e+01, -1.06332381e+00],
         [ 1.10703070e+01, -1.06241261e+00],
         [ 1.10776785e+01, -1.06328681e+00],
...

总共有6个标签,有些样本可以包含更多标签,因此它们看起来像这样。

现在拥有U-net:

from tf_unet.image_util import SimpleDataProvider

data_provider = SimpleDataProvider(trainX, trainY)
net = unet.Unet(channels=2, 
                n_class=6, 
                layers=3, 
                features_root=64,
                cost_kwargs=dict(regularizer=0.001),
                )
path="prediction1"
trainer = unet.Trainer(net, optimizer="momentum", opt_kwargs=dict(momentum=0.2))
path = trainer.train(data_provider, path, 
                    training_iters=20, 
                    epochs=1, 
                    dropout=0.5, 
                    display_step=2)

当我运行它时,出现以下错误:

cannot reshape array of size 6 into shape (1,32,128,6)

我知道我应该重塑标签,但我不确定如何做到这一点。任何帮助,将不胜感激!预先谢谢!

python tensorflow reshape image-segmentation semantic-segmentation
1个回答
0
投票

[如果您实际上正在进行语义分割,则您的trainY不应具有(80, 6)的形状,而应具有与trainX (80, 32, 128, 1)稀疏和(80, 32, 128, 6)相同的高度和宽度)编码。

编辑

换句话说,模型期望输入的每个像素为label,但是您正在为输入的所有像素传递one标签。

© www.soinside.com 2019 - 2024. All rights reserved.