我一直在玩我遇到的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]
任何想法或答案都会非常感激和乐于助人。提前谢谢!
答案 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
输出:
一切看起来都应该如此!