はじめに
セマンティックセグメンテーションの学習モデルとして使用されている「PASCAL VOC 2012」では、色とクラスが以下のようにマッピングされています。
これらがどのように決められているのかを書かせていただきます。
インデックス値とクラスの紐付け
現在の「PASCAL VOC 2012」では20のクラスと1つの背景、および、1つの未設定の合計22クラスが設定されています。
これらはカラーマップのインデックス値と紐づいています。
インデックス値 | クラス |
---|---|
0 | 背景 |
1 | 飛行機 |
2 | 自転車 |
3 | 鳥 |
4 | ボート |
5 | ビン |
6 | バス |
7 | 自動車 |
8 | 猫 |
9 | 椅子 |
10 | 牛 |
11 | テーブル |
12 | 犬 |
13 | 馬 |
14 | バイク |
15 | 人 |
16 | 鉢植え |
17 | 羊 |
18 | ソファー |
19 | 電車 |
20 | テレビ |
21 | 未設定 |
これらは固定となっています。
インデックス値と色の紐付け
学習データでは、各ピクセルが上記の値になっているわけではなく、人が見て区別できるような色が設定されています。
これらの色とインデックス値は、以下の法則で決まっています。
- 黒(0,0,0)は0(背景)
- それ以外は、赤・緑・青のそれぞれの上位ビットから順番に、インデックス値の下位ビットに割り当てる
- 上記から、255(未設定)は明るいグレーっぽい色(224,224,192)
具体的には、以下の値が紐づいています。
赤 | 緑 | 青 | インデックス値 |
---|---|---|---|
0x00 | 0x00 | 0x00 | 0(背景) |
0x80 | 0x00 | 0x00 | 1 |
0x00 | 0x80 | 0x00 | 2 |
0x80 | 0x80 | 0x00 | 3 |
0x00 | 0x00 | 0x80 | 4 |
0x80 | 0x00 | 0x80 | 5 |
0x00 | 0x80 | 0x80 | 6 |
0x80 | 0x80 | 0x80 | 7 |
0x40 | 0x00 | 0x00 | 8 |
(以下省略、(224,224,192):255(未設定)まで設定可能) |
※こちらで取得できるデータでは、インデックスカラーで指定されているため、いちいちRGBのビットを見て変換とかしなくても、インデックスの値そのまま使えます
おまけ
PILでインデックスカラーの画像ファイルを読み込むと、そのままインデックス値が取得できる。
OpenCVでインデックスカラーの画像ファイルを読み込むと、RGBに変換されたものしか取得できないので注意。
まとめ
色とインデックス値の紐付けが分かったので、これで独自データを学習させてセグメンテーションできますね。
(学習データを用意するのがめんどくさいのですが...)