Python PIL图像Caffe分割输出阵列的整形

Python PIL图像Caffe分割输出阵列的整形,python,machine-learning,caffe,coreml,Python,Machine Learning,Caffe,Coreml,希望每个人白天(或晚上)都过得很好 我一直在玩我遇到的Caffe模型,我在使用输出阵列时遇到了一些问题。我以前没有做过分割,所以这可能是一个简单的修复方法,适合对这个主题更了解的人 该模型以本文为基础。我已将模型转换为CoreML格式 我的问题是: 当试图从输出创建一个PIL图像时,我得到了看起来像随机噪声的东西,我认为这只是一个简单的问题,即numpy数组的形状不正确或者像素的顺序错误。 输出阵列的形状为(2500,1),应该是一个50x50黑白图像 代码如下所示: image = Image

希望每个人白天(或晚上)都过得很好

我一直在玩我遇到的Caffe模型,我在使用输出阵列时遇到了一些问题。我以前没有做过分割,所以这可能是一个简单的修复方法,适合对这个主题更了解的人

该模型以本文为基础。我已将模型转换为CoreML格式

我的问题是:

当试图从输出创建一个PIL图像时,我得到了看起来像随机噪声的东西,我认为这只是一个简单的问题,即numpy数组的形状不正确或者像素的顺序错误。 输出阵列的形状为(2500,1),应该是一个50x50黑白图像

代码如下所示:

image = Image.open('./1.jpg')
image = image.resize((55, 55), Image.ANTIALIAS)

predictions = model.predict({'data_55': image} , useCPUOnly = False)
predictions = predictions['fc8_seg']

reshape_array = numpy.reshape(predictions, (50,50))
output_image = Image.fromarray(reshape_array, '1')
[[  4.55798066e-08   5.40980977e-07   2.13476710e-06 ...,   6.66990445e-08
6.81615759e-08   3.21255470e-07]
[  2.69358861e-05   1.94866928e-07   4.71876803e-07 ...,   1.25911642e-10
3.14572794e-08   1.61371077e-08]
我在numpy整形上尝试了F和C顺序,除了噪音之外,似乎没有其他效果。我正在使用原始回购协议中提供的一个测试图像,所以这应该不会是一个问题。作为旁注,数组中的值如下所示:

image = Image.open('./1.jpg')
image = image.resize((55, 55), Image.ANTIALIAS)

predictions = model.predict({'data_55': image} , useCPUOnly = False)
predictions = predictions['fc8_seg']

reshape_array = numpy.reshape(predictions, (50,50))
output_image = Image.fromarray(reshape_array, '1')
[[  4.55798066e-08   5.40980977e-07   2.13476710e-06 ...,   6.66990445e-08
6.81615759e-08   3.21255470e-07]
[  2.69358861e-05   1.94866928e-07   4.71876803e-07 ...,   1.25911642e-10
3.14572794e-08   1.61371077e-08]

如果您有任何想法或答案,我们将不胜感激并给予帮助。提前谢谢

看来我能解决这个问题。这不是数组顺序的问题,而是值和数据类型的问题。下面是我为从输出中获得正确图像而编写的代码

predictions = model.predict({'data_55': image} , useCPUOnly = True) # Run the prediction

map_final = predictions['fc8_seg'][0,0,:,:] # fc8_seg is the output of the neural network
map_final = map_final.reshape((50,50)) # Reshape the output from shape (2500) to (50, 50)
map_final = numpy.flip(map_final, 1) # Flip axis 1 to unmirror the image

# Scale the values in the array to a range between 0 and 255
map_final -= map_final.min() 
map_final /= map_final.max()
map_final = numpy.ceil(map_final*255)

map_final_unint8 = map_final.astype(numpy.uint8) # Convert the data type to an uint8
pil_image = Image.fromarray(map_final_unint8, mode = 'L') # Create the PIL image
以及输出:


一切看起来都正常

可能是输入错误,但是
重塑\u数组
在您发布的代码中的任何地方实际上都没有给出值。另外,您是否验证了该图像的原始模型的输出是什么?如果是这样的话,你是否也必须在那里重塑预测,或者在那里发生了其他类型的后处理?我问这个问题的原因是,输出看起来根本不是随机的,而是以错误的顺序排列的。是的,复制粘贴时遗漏了
重塑数组。抢手货噪音对我来说绝对是个糟糕的选择。我同意它确实看起来像数据在那里,它只是一个将输出数据格式化到图像中的问题。我无法运行原始项目中的代码,因为我没有安装用于caffe的python包装器。我试图对后处理代码进行反向工程,但这是一种非常奇怪的方法,老实说,没有多大意义。如果您好奇,他们会将caffe模型的结果保存到文本文件中,然后将文本文件加载到后期处理中。我的C++语法知识缺乏,所以我很难理解它。我相信后处理发生在Caffe_Segmentation/examples/seg/dumpRes.cppI建议您构建并安装他们的Caffe分支,并使用它来了解网络的实际功能。比猜测快得多不幸的是,我花了大量时间试图在没有运气的情况下构建它:谢谢你的帮助,非常感谢。我将深入研究他们正在使用的脚本,看看我是否能理解他们使用的方法来把数据写入TXT文件,然后再把它转换成图像。也许这会迫使我了解更多关于C++的内容。