Deeplab Semantic Segmentationの学習データの作り方

AI

はじめに

Semantic Segmentationを用いてライオンとネコをピクセル単位で検出する!と意気込んでみたものの、学習データの作成方法を解説しているページがなかったので、ここで説明しておこうかと思います。

なお、私が調べた範囲では、次のサイトが一番詳しかったです。これを参考に私がどのようにデータを作成したかを説明します。

DeepLab学習用画像の要件

 

前提

OS: Windows

また、検出したいオブジェクトが写っている画像の収集はしておいてください。

 

環境構築

まずは、ドローソフトInkscapeをインストールします。オープンソースソフトウェアなので一応無料で使えます。

INKSCAPE

 

作業開始

INKSCAPEに画像を読み込ませて、認識させたい物体にパスでマスクをかぶせます。

パスの作成

まずは、メニューのファイル→新規を選択して新しいドキュメントを作成してください。そしてそのウィンドウに使用したい画像をドラッグアンドドロップします。するとインポートの仕方についてダイアログが出ますが、デフォルトのままでOKを押してください。

すると、ドキュメント上に画像が表示されます。ドキュメントのページサイズと画像のサイズが一致していないと思いますので、ページのサイズを画像に合わせます。ファイル→ドキュメントのプロパティを選択し、ページタグのなかの「ページサイズを描画全体または選択オブジェクトに合わせる」を選んでください。またアンチエイリアスも解除してください。

 

 

次に、検出したい物体にパスを描いていきます。

下図の①の部分をクリックするとパスを作成することができます。物体の全体を囲むと塗りつぶしをしてくれます(INKSCAPE内でオブジェクト化される)。その後、このオブジェクトを選択して、②をクリックすると塗りつぶしの色を変えてくれます。また、Shiftを押しながら②をクリックすると周囲の線もその色に変えてくれます。

この時、選択した色を覚えておきましょう。RGBで赤、緑、青、とかわかりやすいものにしておくのがよいです。

 

これができたら、SVG形式で保存しておいてください。ファイル名は拡張子以外はもとの画像と同じものにしておきます。

ラベルデータの作成

SVGからJPGの情報を削除し、パス情報だけで画像を作成します。この時、各オブジェクトについて、パスのRGB値を同じものに変更します。例えば、#010101のように変更します。そののち、SVGを読み込んでPNGに変換します。

SVGの編集はノートパッドで手作業でもいいですが、上記方法で作成したSVGに限っては、2019年3月時点のINKSCAPEのSVG出力であれば、下記のスクリプトで処理できます。(他の方法の場合は適用できるかわかりません。)

 

SVGが置いてあるディレクトリ内で下記のコマンドラインで実行できます。

このスクリプトを使うと、outputフォルダに編集後のSVGファイルが作成されます。表示するとこんな感じ。背景色は黒の透明です。

最後に出力されたファイルをPNGに変換します。

 

以上で、ラベルデータの作成が完了です。

後は、もとのJPG画像とラベルデータ画像を合わせてdeeplabのトレーニングに食べさせればよいです。

 

まとめ

今回は、Semantic Segmentationでよく用いられるdeeplabの学習データの作成方法を紹介しました。やってみると手間はかかりますが、簡単にできますので試しにやってみるといいと思います。

 

 

コメント