AbudoriLab.です。TAO Toolkit編第2弾はセマンティックセグメンテーションのデータセット作成方法の解説です。”PixelAnnotationTool”というツールを使って色付きのラベル画像を作ります。ツールがあるおかげでかなり楽になりましたが、やはり人海戦術なので、Windowsツールで周囲の人に協力を仰ぎやすい方法となっていますので、ぜひご参考ください。
本シリーズにおける今回記事の位置づけ
本シリーズは三部構成になります。
準備編:最強の深層学習ツールになるか?まずは環境設定から
教示データ作成編:学習データセットを作ってみよう
モデルカスタマイズ編:自作したデータセットから学習してみよう
教示データ作成編の本稿では、TAO ToolkitでU-Netをトレーニングするためのセマンティックセグメンテーションのデータセット作成方法を紹介いたします。
docs.nvidia.com
セマンティックセグメンテーションとは
まず今回作成するセマンティックセグメンテーションの手法について解説します。画像処理のタスクとして有名なものとして、クラス分類(classification)、物体検出(object detection)、意味論的領域分割(semantic segmentation)があります。
クラス分類では、画像に写っている物体が犬や猫、人といったクラスに分類するタスクです。物体検出では、クラス分類したものが画像のどの領域で描かれているか四角で囲う、位置特定も追加で行います。意味論的領域分割(以後、セグメンテーションと表記)ではさらに難しく、すべての画像のピクセルひとつひとつが背景なのか、人なのか、交通標識なのかを分類して色で塗りつぶすタスクとなっています。近年驚くほどに、画像処理分野が発展したため、単に写っているものの判定だけをしているクラス分類から位置特定までする物体検出に発展し、さらに、すべての画像ピクセルにに対して分類作業を行うまで実施するセグメンテーションで精度争いが行われています。
クラス分類
物体検出
PixelAnnotationTool
セグメンテーションのデータセットを作成するツールを紹介いたします。
データセット作成は膨大な作業量が必要になるため、数人のお手伝いしてもらえる方が必須です。ペンタブなどあると1人でも気合いでなんとかなりますが、協力してもらいデータセットを作成しましょう。そのため、誰もが簡単に扱えるということが条件となります。この条件にあう素晴らしいツールがPixelAnnotationToolです。Windowsで動作し、ZipでDLし解凍したのち、実行ファイルをダブルクリックするだけで作業できるようになります。
PixelAnnotationToolは、画像内の輪郭や近傍の似たピクセルを分析して同じ領域である部分の色塗りを支援してくれます。図のように、人間は大まかな領域を指定してあげるだけで、道路や木々などの似た領域を自動で塗ってくれます。もし、間違った塗り方をされたときは、再度人間が色を塗って指示してあげると修正してくれます。色塗りで一番時間のかかる、葉っぱ一枚一枚などの細部を自動的に塗ってくれるため、非常に短い時間でデータセットを作り上げることができます。
インストール方法
Windowsの方
github.com
こちらからexeファイルをDLできます。PixelAnnotationTool_x64_vX.X.X.zip(Xはバージョンの数字)をクリックしてDL、zipを解凍し展開されたexeファイルを実行してください。
github.com
こちらを参考に要求環境(OpenCVやQt)を入れてください。後にmakefileを実行しビルドを行い、できた実行ファイルを実行します。
PixelAnnotationTool簡単操作方法とコツ
実際に編集画面をみながらラベリングする作業を解説します。
起動したら、File→Open directoryから画像が入っているフォルダを選択します。フォルダ内にどんなファイルがあるのか表示はされませんが、選択できていれば問題ありません。
画像を開いたらすぐに編集できます。左側に色見本がありますが、デフォルトでCityScapesデータセットで使われているラベルと色になっています。
sidewalk(歩道)を選んで、歩道の内側をざっくりなぞります。
同様にsky(空)、vagetation(木)、building(建物)などのラベルの内側を塗っていきます。
左下の"Watershed"ボタンを押すと塗ってきた色から判断され画像全体に色を塗ってくれます。
コツとしては、境界部分をツールが理解しやすいように塗ることです。塗ったラベルから膨らませて塗っていきます。反対側からも同様にして収束した部分が境界と判断するように見えます。ですので、空や木などの内側をざっくり塗っていき、葉っぱのような細かいところはぎりぎりをかすめていくように塗ると成功率が高いです。
デフォルトでは拡大されていて見切れていました。左上の"Resize factor"の数字を変えて全体が見えるように調整しましょう。間違っているラベルを修正していきましょう。
特に境界線周りで飛び出てしまった領域を直していきます。拡大して二つラベルを分けたい境界あたりに細かく描き加えることで飛び出した領域を直すことができます。
修正を繰り返して満足したら次の画像へ、と繰り返し作っていきます。
完成した画像は次のとおりです。葉っぱの先端やポールの間の芝など綺麗に塗れています。
一枚分の作業は通しでこのような感じになります。
youtu.be
慣れてくると、このくらいの速度でデータをつくるができるようになります。学習させるためには600枚程度はほしいので、うまく手分けして作るようにしましょう。
同じフォルダに元の画像、アノテーションした画像が保存されるので、必要な画像ファイルをまとめれば、データセットの完成です。初期設定でアノテーション作業をするとそのままCityScapesのデータセットができます。