从PIF图像的Caffe分割中整形输出数组

时间:2018-03-16 08:38:15

标签: python machine-learning caffe coreml

希望每个人每天(或晚上)进展顺利。

我一直在玩我遇到的Caffe模型,而且我在使用输出数组时遇到了一些麻烦。我以前没有使用分段,所以这可能是一个对这个主题更有见识的人的简单修复。

该模型基于本文Deep Joint Task Learning for Generic Object Extraction。我已经以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')

我在numpy reshape上尝试了F和C命令,除了看起来像的噪音之外似乎没有其他任何东西。我正在使用原始仓库中提供的测试图像之一,所以它应该不是问题。另外,数组中的值如下所示:

[[  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]

任何想法或答案都会非常感激和乐于助人。提前谢谢!

1 个答案:

答案 0 :(得分:1)

看起来我能够弄清楚这一点。这不是数组顺序的问题,而是值和数据类型。这是我放在一起从输出中获取正确图像的代码。

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

输出:

And the output

一切看起来都应该如此!