Python 语义分割的model.predict()函数结果的含义是什么?

Python 语义分割的model.predict()函数结果的含义是什么?,python,keras,predict,semantic-segmentation,Python,Keras,Predict,Semantic Segmentation,我使用库进行多类(在我的例子中是4类)语义分割。该模型(带有“resnet34”主干的UNet)使用3000个RGB(224x224x3)图像进行训练。准确率约为92.80% 1) 为什么model.predict()函数需要(1224224,3)形数组作为输入?我甚至在报纸上也找不到答案。实际上,下面的代码正在工作,我没有问题,但我想了解原因 predicts=model.predict(测试图像重塑(-1224224,3)); 2) 预测是一个(1224224,3)形状的numpy阵列。其

我使用库进行多类(在我的例子中是4类)语义分割。该模型(带有“resnet34”主干的UNet)使用3000个RGB(224x224x3)图像进行训练。准确率约为92.80%

1) 为什么model.predict()函数需要(1224224,3)形数组作为输入?我甚至在报纸上也找不到答案。实际上,下面的代码正在工作,我没有问题,但我想了解原因

predicts=model.predict(测试图像重塑(-1224224,3));
2)
预测
是一个(1224224,3)形状的numpy阵列。其数据类型为
float32
,包含一些浮点数。这个数组中的数字是什么意思?我如何想象它们?我的意思是,我假设结果数组将为每个像素包含4个类别标签(从0到3)中的一个,然后我将为每个类别应用颜色贴图。换句话说,结果应该是一张预测图,但我没有得到。为了更好地理解我关于预测图的意思,请访问

result=预测[0]
plt.imshow(结果)#将matplotlib.pyplot作为plt导入
3) 我最后想做的是像在
视觉检查结果
函数中所做的那样。

1)深度神经网络架构中的图像输入形状是(224224,3),因此宽度=高度=224和3个颜色通道。如果您希望一次为模型提供多个图像,则需要一个附加维度。所以(1224224,3)或(某物,224224,3)

2)根据的文档,您可以指定要作为输出的类的数量
model=Unet('resnet34',classes=4,activation='softmax')
。因此,如果您将标签图像重塑为一个形状(1224224,4)。最后一个维度是一个掩码通道,如果像素i,j属于k类,则用0或1表示。然后您可以预测并访问每个输出掩码

masked = model.predict(np.array([im])[0]
mask_class0 = masked[:,:,0]
mask_class1 = masked[:,:,1]

3)然后使用matplotlib,您将能够绘制语义分段或使用:
color.label2rgb
function

感谢您的第一个答案。但是我不明白第二个。我上传了
model.predict()
的结果图像(224x224x3)。如您所见,图像中有两个类,圆形类和道路类。但就浮点数而言,这些类之间没有明确的区别。我想了解哪个像素属于哪个类别。我相应地编辑了我的答案。如果您仍然遇到困难,请向上投票并接受答案,然后发布新问题。很抱歉,我不能向上投票,这里是stackoverflow的警告:“记录声誉低于15的人所投的票,但不要更改公开显示的帖子分数。”。我仍然很困惑,还没有解决这个问题。你是什么意思“因此,如果你重塑你的标签图像有一个形状(1224224,4)。”?如果您的意思是,在我的代码中,带标签的图像是
result
,这是
model.predict()
函数的输出,它不能转换为(1224224,4),因为它的形状是(224x224x3)。正如我所说的,如果您有4个类,那么您应该有一个输出为(1224224,4)的模型。输出为0-1掩码。Mask0对应于类0,所以如果像素i,j等于1,它就属于类0。等等,因为乌普托普的每个面具都与所问问题不匹配。请修改一下。