LoginSignup
2
1

More than 3 years have passed since last update.

Jetson NanoでFCNを使ったセマンティックセグメンテーション

Posted at

はじめに

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以下に置く。

Pipfile
[[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というファイルができている。結果は下記の通り。

boss_fcn.jpg

おぉ、確かに分離されている。これが4年前の技術か・・・。先は長い。

参考文献


  1. pipenv install -r requirements.txtでインストールすると途中で失敗する。 

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1