我正在使用语义分割网络(SegNet)。我正在尝试减少课程的数量,从而重新安排网络。
因此,我也在更改预测的颜色编码。我的问题是我没有在输出图像中得到预期的颜色。
例如
pascal_palette = np.array([(0, 0, 0),
(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
(0, 0, 128), (0, 128, 0), (0, 0, 0), (0, 0, 0), (128, 0, 0),
(0, 0, 0), (0, 0, 0)
], dtype=np.uint8)
由于像素仅在 1 个通道中,因此上述行为这三个类别提供了完美的结果。
输出如下:
但是,如果我修改该行并将值添加到不同的通道,它会给出奇怪的输出。输出附在下面:
pascal_palette = np.array([(0, 0, 0),
(0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0),
(0, 0, 128), (124, 252, 0), (0, 0, 0), (0, 0, 0), (128, 0, 0),
(0, 0, 0), (0, 0, 0)
], dtype=np.uint8)
将颜色代码更改为 (124, 252, 0)。代码应该是草坪绿色。我还在RBG代码之类的网站上检查过
我在这里想念什么?任何解释都会有所帮助。
预测代码:
prob = model.predict(net_in)[0]
# Reshape to 2d here since the networks outputs a flat array per channel
prob_edge = np.sqrt(prob.shape[0]).astype(np.int)
prob = prob.reshape((prob_edge, prob_edge, 13))
# Upsample
if args.zoom > 1:
prob = interp_map(prob, args.zoom, image_size[1], image_size[0])
# Recover the most likely prediction (actual segment class)
prediction = np.argmax(prob, axis=2)
# Apply the color palette to the segmented image
color_image = np.array(pascal_palette)[prediction.ravel()].reshape(
prediction.shape + (3,))
print('Saving results to: ', args.output_path)
with open(args.output_path, 'wb') as out_file:
Image.fromarray(np.multiply(color_image,255)).save(out_file)
PS。在这两种情况下,我都使用相同的模型进行预测