この記事の読者
深層学習・ディープラーニングの手法の1つである「U-Net」について知りたい.
キーワード・知ってると理解がしやすい
- U-Net
- pix2pix
Index
Task
画像の Instance Segmentation をタスクにします. (#01 では、Semantic Segmentation でした)
Competition
signate のコンペティションを題材に進めてみます.
間取り図を解析して、「建具」や「部屋領域」を検出するのが目的です.
Dataset
権利の都合上表示はできませんが、概要だけでも
Json
{“labels”: {Label Name: Point List }, }
Label Name
は、7 種類で、Point List
はBox か Polygon です.
( GCS へ保存しておくと、やりとり楽そうです. )
Preprocessing
Label データが Json なので画像データを作ります.
Label データの可視化、保存方法としては、2 種類考えました.
- H x W x 7 (Label 数) の npy file
- データの読み込みはスムーズ
- H x W x 1 の jpge file (画像ファイル) x 7 ファイル (ラベル数分)
- 各ラベルの画像が確認できる
結局あるLabelのみでの学習も視野に入れたい or マスク画像が正常かどうかも瞬時にわかるので、Labelの種類ごとに画像を作りました. 間取り画像データに、あるLabelがない場合は、間取り画像の縦横サイズと同様の真っ黒な画像ができます.
Model
#01 と同様のモデルを利用します.
いくつかの変更点があります.
- OUTPUT_CHANNELS : 1 or 7 (Label ひとつ or Label すべてか)
- loss
- tf.keras.losses.CategoricalCrossentropy : 7 Label 全てに対して同時にLoss 計算
- tf.keras.metrics.binary_crossentropy : 1 Label のみに対して Loss 計算
Training
最初は、7 Label 同時に学習しましたが、predict mask が真っ黒だったので、いろいろ試しました.
- アウトプットを 7 Label (Channel) or 1 Label (Channel) への変更
- Down Sampling / Encoder (学習済みモデル使用の部分) の学習是非の変更
どれも、真っ黒な画像が predict mask で生成され、負値で出力されることが見られた. (Loss は下がりきっても、同様の状態)
まとめ
まとめというか、反省点・疑問点
- U-Net x Instance Segmentation はそもそもどうなのか / 有効なのか?
- Instance Segmentation の Loss は何が適切なのか?
参考
- U-Net: Convolutional Networks for Biomedical Image Segmentation
- 発表論文