1

セマンティック セグメンテーション ネットワーク (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 つのチャネルにのみあるため、3 つのクラスで完璧な結果をもたらします。

出力は次のとおりです。

期待どおりの結果が得られます

ただし、行を変更して別のチャネルに値を追加すると、奇妙な出力が得られます。出力を以下に添付します。

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。どちらの場合も、予測に同じモデルを使用しました

4

1 に答える 1