【Jetson Nano】SegNetを使ったセマンティックセグメンテーション

はじめに

前回の続きです↓

chigrii.hatenablog.com

うーん、セマンティックセグメンテーションとはなんぞや・・・

セマンティックセグメンテーションとは

こちらのページがわかりやすかったので引用させていただきます。

jp.mathworks.com

セマンティック セグメンテーション (Semantic Segmentation) は、画像内の全画素にラベルやカテゴリを関連付けるディープラーニング (Deep Learning) のアルゴリズムです。特徴的なカテゴリを形成する画素の集まりを認識するために使用されます。

なるほどわからん状態ですが、こちらの画像を見るとなんとなく理解できました。

f:id:chigrii:20210504233152p:plain
画像とラベル付き画素

このように人物の画素をなんらかの方法でぺたぺたアノテーションすることで「背景」と「人物」の2つのクラスに分割することができるとのこと。ちなみにカテゴリは2つに限らないので、この画像で言うと「空」「海」にも分割することができる。

画素レベルで分類できるので、バウンディングボックスに収まる必要がある物体検出よりも不規則な形状のものを検出することができます。

その分、アノテーションが難しそうなのは容易に想像できますね、、、

なんとなく理解できたので、デモに移っていきましょう🏃‍♀️

デモでやること

  • 様々なデータセットを使った画像のセグメント化
    • Cityscapes
    • DeepScene
    • Multi-Human Parsing(MHP)
    • Pascal VOC
    • SUN RGB-D
  • ライブカメラを使ったセグメント化

様々なデータセットを使ったセグメント化

それぞれに対応したシーンの画像を用意しましょう。もちろんあらかじめ用意されている画像を使うのもありです。

データセット 概要 備考
Cityscapes ストリートシーン Cityscapes Dataset – Semantic Understanding of Urban Street Scenes
DeepScene オフロードシーン DeepScene
Multi-Human Parsing(MHP) 四肢や衣服を分類 MHP:Multi-Human Parsing
Pascal VOC 様々な人、動物、車両、および家庭用オブジェクト The PASCAL Visual Object Classes Homepage
SUN RGB-D オフィスや家庭でよく見る屋内のオブジェクトやシーン SUN RGB-D: A RGB-D Scene Understanding Benchmark Suite

スクリプトは例の如く、以下の場所に格納されています(ソースからビルドした場合)

jetson-inference/build/aarch64/bin

Cityscapes

./segnet --network=fcn-resnet18-cityscapes scene.jpg output.jpg

f:id:chigrii:20210505012203j:plain
渋谷駅前

夜だったから空がうまく認識されてない?

DeepScene

./segnet --network=fcn-resnet18-deepscene scene.jpg output.jpg

f:id:chigrii:20210505012310j:plain
近江神宮の参道

もっと茶色っぽい地面だったら上手く分類できたかも

Multi-Human Parsing (MHP)

./segnet --network=fcn-resnet18-mhp scene.jpg output.jpg

f:id:chigrii:20210505012517j:plain
NFLプレー画像(拾い画)

いい感じに分類

Pascal VOC

./segnet --network=fcn-resnet18-voc scene.jpg output.jpg

f:id:chigrii:20210505012624j:plain
ホームステイ先にいた可愛いイッヌ

これもいい感じだが、なぜか前足の先が「horse」になってる

SUN RGB-D

./segnet --network=fcn-resnet18-sun scene.jpg output.jpg

f:id:chigrii:20210505012742j:plain
昔使ってたソファ

これもいい感じ ソファか椅子かの葛藤が見える

ライブカメラを使ったセグメント化

これも引数にカメラのタイプを指定することで起動できます。

# MHP
./segnet --network=fcn-resnet18-mhp /dev/video0
# SUN
./segnet --network=fcn-resnet18-sun /dev/video0
# DeepScene
./segnet --network=fcn-resnet18-deepscene /dev/video0

最後に

このセマンティックセグメンテーションを活用することで、色々なシーンで色々なものを分類・認識させることができます。

今後機会があれば自前のデータを用意して、オリジナルのデータセットを作成していきたいです。

関連ページ

qiita.com