質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Q&A

解決済

1回答

2061閲覧

kerasでSegNetのラベルの色について

hss_

総合スコア39

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

0グッド

0クリップ

投稿2018/12/20 05:39

編集2018/12/20 05:41

「keras(tensorflow)でSegNet」
(https://qiita.com/uni-3/items/a62daa5a03a02f5fa46d)
に記載されているコードを参考に自分でも実装しようとして
おりますが、下記コード

Python

1import numpy as np 2import keras 3from PIL import Image 4 5from model import SegNet 6 7import dataset 8 9height = 176 10width = 240 11classes = 12 12epochs = 10 13batch_size = 1 14log_filepath='./logs_10/' 15 16data_shape = 176*480 17 18def writeImage(image, filename): 19 """ label data to colored image """ 20 Sky = [128,128,128] 21 Building = [128,0,0] 22 Pole = [192,192,128] 23 Road_marking = [255,69,0] 24 Road = [128,64,128] 25 Pavement = [60,40,222] 26 Tree = [128,128,0] 27 SignSymbol = [192,128,128] 28 Fence = [64,64,128] 29 Car = [64,0,128] 30 Pedestrian = [64,64,0] 31 Bicyclist = [0,128,192] 32 Unlabelled = [0,0,0] 33 r = image.copy() 34 g = image.copy() 35 b = image.copy() 36 label_colours = np.array([Sky, Building, Pole, Road_marking, Road, Pavement, Tree, SignSymbol, Fence, Car, Pedestrian, Bicyclist, Unlabelled]) 37 for l in range(0,12): 38 r[image==l] = label_colours[l,0] 39 g[image==l] = label_colours[l,1] 40 b[image==l] = label_colours[l,2] 41 rgb = np.zeros((image.shape[0], image.shape[1], 3)) 42 rgb[:,:,0] = r/1.0 43 rgb[:,:,1] = g/1.0 44 rgb[:,:,2] = b/1.0 45 im = Image.fromarray(np.uint8(rgb)) 46 im.save(filename) 47 48def predict(test): 49 model = keras.models.load_model('seg.h5') 50 probs = model.predict(test, batch_size=1) 51 52 prob = probs[0].reshape((height, width, classes)).argmax(axis=2) 53 return prob 54 55def main(): 56 print("loading data...") 57 ds = dataset.Dataset(test_file='val.txt', classes=classes) 58 test_X, test_y = ds.load_data('test') # need to implement, y shape is (None, 176, 240, classes) 59 test_X = ds.preprocess_inputs(test_X) 60 test_Y = ds.reshape_labels(test_y) 61 62 prob = predict(test_X) 63 writeImage(prob, 'val.png') 64 65if __name__ == '__main__': 66 main()

でセグメンテーションされた色が Pavement = [60,40,222](青) の色が木の部分に
割り当てられているように思います。

下記参照

Road = [128,64,128]なども色が違う(紫がオレンジになっている)ように思うのですが、
これは[R,G,B]の順という意味ではないのでしょうか?
参考にしたサイトでは「おおむねセグメントされている」となっておりますが、この色の
違いについてご教示いただけませんでしょうか。

お手数をお掛けいたしますが、よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

セグメンテーションとは各ピクセルが予め定義されたどのクラスかを判定するタスクですので、可視化する際にクラス1のピクセルは赤色、クラス2のピクセルは青色などと適当な色を割り当てて、セグメンテーション結果をわかりやすくしています。
色の指定順序は RGB です。

python

1Sky = [128, 128, 128] 2Building = [128, 0, 0] 3Pole = [192, 192, 128] 4Road_marking = [255, 69, 0] 5Road = [128, 64, 128] 6Pavement = [60, 40, 222] 7Tree = [128, 128, 0] 8SignSymbol = [192, 128, 128] 9Fence = [64, 64, 128] 10Car = [64, 0, 128] 11Pedestrian = [64, 64, 0] 12Bicyclist = [0, 128, 192] 13Unlabelled = [0, 0, 0] 14 15colors = np.array([Sky, Building, Pole, Road_marking, Road, Pavement, Tree, 16 SignSymbol, Fence, Car, Pedestrian, Bicyclist, Unlabelled]) 17labels = np.array(['Sky', 'Building', 'Pole', 'Road_marking', 'Road', 18 'Pavement', 'Tree', 'SignSymbol', 'Fence', 'Car', 19 'Pedestrian', 'Bicyclist', 'Unlabelled']) 20 21fig, ax_list = plt.subplots(len(colors), 1, figsize=(5, 10)) 22for ax, color, label in zip(ax_list, colors, labels): 23 color_img = np.full((1, 10, 3), color, dtype=np.uint8) 24 25 ax.imshow(color_img, aspect='auto') 26 ax.set_axis_off() 27 ax.text(-1, 0, label, va='center', ha='right', fontsize=10) 28 29plt.show()

イメージ説明

Road = [128,64,128]なども色が違う(紫がオレンジになっている)ように思うのですが、

オレンジ色は Road_marking というクラスのようです。

投稿2018/12/20 06:01

編集2018/12/20 06:07
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hss_

2018/12/20 06:16

大変分かり易い回答ありがとうございます。RBGの順であること、道路はRoad_markingに分類 されているということがよく理解できました。本当にありがとうございます。 追加で申し訳ありませんが、ということは学習ラベルの方に問題があるということでしょうか。 写真ではRoadと思われる部分がセグメンテーションではRoad_markingになっていたり、Treeと 思われる部分がPavemenntに分類されていたりするのが気になっております。 お忙しいところ恐縮ですが、ご教示いただけると助かりますよろしくお願い申し上げます。
tiitoi

2018/12/20 06:23 編集

学習がうまくいっていないか、出力されたクラス番号とラベル名の対応付けが間違っているかのどちらかと思われます。
hss_

2018/12/20 06:27

親切なご回答ありがとうございました。状況が整理できてとても助かりました。 重ねてお礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問