
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)