はじめに
VGG16による画像識別で対象物を分離することが重要であることが分かった。そこでJetson Nano上でセマンティックセグメンテーションを実験してみる。
FCNとは
Fully Convolutional Networksの略でセマンティックセグメンテーションと呼ばれる画像内の意味のある物体を画素単位で分割する技術の一つ。論文は下記。
VGG16等の画像識別では(畳み込み層 + プーリング層) x N個 + 全結合層という形を取っているが、最後の全結合の部分まで畳み込み層になっている。なるほど、Fullyとは全結合を表すFullyではなく、下まで全部畳み込みということか。これを行うことで効率的にヒートマップが作れるとのこと。
方針
きっと誰かがソースコードを書いているに違いないということで、chainer + FCNのキーワードで見つけたgithubのソースコードを用いる。今回用いるのは下記のソースコード。論文を読むだけでは詳細実装が良く分からないことがあるが、ソースコードがあると理解の進みが早くなる。本当にありがたい。
準備
基本的なセットアップは「Jetson Nanoの実験環境のまとめ」に従っている。
~/Documents/FCNというディレクトリ以下で作業を行う。
yamamo-to@jetson-nano:~$ mkdir ~/Documents/FCN
yamamo-to@jetson-nano:~$ cd ~/Documents/FCN
yamamo-to@jetson-nano:~/Documents/FCN$ pipenv --three
demoを動かすためにscikit-image
が必要になるため必要なパッケージをインストールする。
yamamo-to@jetson-nano:~/Documents/FCN$ sudo apt install libfreetype6-dev libblas-dev liblapack-dev libatlas-base-dev gfortran
下記のPipfileを~/Documents/FCN以下に置く。
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
cupy = "*"
chainer = "*"
chainercv = "*"
matplotlib = "*"
numpy = "*"
scipy = "*"
scikit-learn = "*"
scikit-image = "*"
gdown = "*"
tqdm = "*"
pandas = "*"
PyYAML = "*"
cython = "*"
[requires]
python_version = "3.6"
必要なパッケージをインストールする。以下のコマンドは時間が掛かるので寝る前に実施するのが吉。
yamamo-to@jetson-nano:~/Documents/FCN$ pipenv install
githubからソースコードをダウンロードしインストールする1。
yamamo-to@jetson-nano:~/Documents/FCN$ git clone https://github.com/wkentaro/fcn
yamamo-to@jetson-nano:~/Documents/FCN$ cd fcn
yamamo-to@jetson-nano:~/Documents/FCN$ pipenv install fcn
結果用のディレクトリを作成する。
yamamo-to@jetson-nano:~/Documents/FCN$ mkdir result
FCNの実行
いつものboss.jpg
を入力に使う。実行すると重みをダウンロードし始める。それを除けば30秒ほどで終了する。
yamamo-to@jetson-nano:~/Documents/FCN/fcn$ pipenv run python3 ./scripts/fcn_infer.py --img-files boss.jpg --gpu 0 -o result
先ほど作成したresultディレクトリの中にboss.jpg
というファイルができている。結果は下記の通り。
おぉ、確かに分離されている。これが4年前の技術か・・・。先は長い。
参考文献
- https://arxiv.org/abs/1411.4038
- https://github.com/wkentaro/fcn
- https://www.mathgram.xyz/entry/chainer/fcn
- http://seiya-kumada.blogspot.com/2016/03/fully-convolutional-networks-chainer.html
-
pipenv install -r requirements.txtでインストールすると途中で失敗する。 ↩