Jetson nanoでPerson Part Segmentation検証

Jetson NanoでPerson Part Segmentation検証

1. Jetson nanoに関して

 Jetson nanoでは、Rasberry Piなどと同様にmicroSDにLinux系OSをインストールすることで、パソコンのようにOS上でアプリケーションを動かすことができます。Jetson nanoはCPUだけでなくGPUを搭載しているため、高速にディープラーニングの推論を行うことができます。また、Hacarusでは、以前にもJetson nanoを用いてLasso回帰を行うブログを書いておりますので、興味のある方はぜひそちらもご確認ください。

 

2.Person part segmentationに関して

Person part segmentationは、画像から人の頭や腕・脚などをピクセルレベルで分類する技術です。下の左の画像に、推論させた結果は以下の右のようなイメージになります。

推論結果である右の画像では、体のパーツごとに異なる色で塗り分けられています。

 

3.全体の流れ

このPerson part segmentationをJetson nanoでなるべく早く推論させることを目標に、軽量・高速なモデルの調査から、モデルの学習、そして推論までを行いました。

 

 

4.軽量・高速なモデルを調査・選択

軽量・高速なPerson part segmentationに関する論文は少なく、Paper with codeのHuman part segmentationに関するLeaderboardsを見ても、掲載されている論文数は7件しかありません。

一方で、タスクを若干拡げ、Semantic Segmentationにおける軽量・高速なモデルは比較的見つかり易いです。実際、軽量・高速なSemantic Segmentationモデルに関する論文をPaper with codeで探すと40件近く出てきます。これは、おそらく自動運転などで高速なSegmentation技術の需要が高いため、研究も活発に行われているためだと思われます([1])。そこで、Paper with codeのリアルタイムSemantic Segmentatioの中でも、最も精度が高く、速度も早いHarDNet([2])と言われるものを今回使用することにしました。

HarDNetはDenseNetをベースにしており、DRAMへのアクセスがなるべく少なく、かつ精度を保つように設計されたネットワークです。

 

GPU(ms) Mobile GPU(ms) Top1

Acc

HarDNet 39DS 17.8

32.5

72.1
MobileNetV2 23.7 37.9 72.0
HarDNet 68DS 31.7 52.6 74.3
MNetV2 1.4x 33.0 57.8 74.7

出典:HarDNet: A Low Memory Traffic Network

上の表は、HarDNetやMobileNetなどのImageNetにおける分類精度と推論速度をまとめた表です。Mobile GPU(ms)の列はJetson nanoにおける推論速度を表してます。HarDNetは精度を保ちながら、さらに高速化されていることが分かります。

HarDNetを使うにあたり、Pytorch実装であるhttps://github.com/PingoLH/FCHarDNetを参考にさせて頂きました。

 

 

5.Person part Segmentationデータセットを元にHarDNetを学習

前記したGitHubのリポジトリには学習済みモデルも掲載されています。しかし、学習に使用されたデータセットは、Person part Segmentation用のものではありませんでした。そこで、Multi Human Parsing v2.0と言われるデータセットで学習し直す事にしました。

Multi Human Parsin v2.0には、人が映った画像と、その画像に対して体の部位ごとにマスクされた画像が入っており、教師データをこのマスク画像とする事でセグメンテーションの学習をすることができます。

6.学習されたHarDNetを用いてPerson part Segmentation

Multi Human Parsing v2.0に含まれるテストデータセットに対して、学習されたHarDNetによる推論を行いました。その結果が以下になります。(下の画像は色合い的に分かりにくいか。。)

手・脚・顔・首などが概ねセグメンテーションされていることが分かります。HarDNetによる学習が上手く行っていることが分かりました。

また、推論速度ですが、Jetson nanoによる推論を行うと、141*282の画像サイズに対して、概ね20fps程度を出すことができました。

 

7.まとめ

HarDNetと言われるニューラルネットを用いて、Person part SegmentationをJetson nanoで推論させました。セグメンテーションという、画像分類などに比べると重い処理でも、Jetson nanoを用いてほぼリアルタイムに推論することが確認できました。

 

8.参考

[1] Speeding up semantic segmentation for autonomous driving.(2016)

[2] HarDNet: A Low Memory Traffic Network(2019)

ニュースレター購読Newsletter

登録はこちら