从用于 PIL 图像的 Caffe 分割整形输出数组
Shaping output array from Caffe segmentation for PIL Image
祝大家白天(或晚上)一切顺利。
我一直在研究遇到的 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]
如有任何想法或答案,我们将不胜感激和乐于助人。提前致谢!
看来我能解决这个问题。这不是数组顺序的问题,而是值和数据类型的问题。这是我放在一起的代码,用于从输出中获取正确的图像。
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
输出:
一切看起来都应该如此!
祝大家白天(或晚上)一切顺利。
我一直在研究遇到的 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]
如有任何想法或答案,我们将不胜感激和乐于助人。提前致谢!
看来我能解决这个问题。这不是数组顺序的问题,而是值和数据类型的问题。这是我放在一起的代码,用于从输出中获取正确的图像。
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
输出:
一切看起来都应该如此!