Python
画像処理
FCN
SemanticSegmentation

FCNというSemanticSegmentationで遊んでみた

やりたいこと

最近、FCNというSemantic Segmentationを手軽に試せたので、遊んでみました。
そして、速度評価も行おうと思って、ちょっとしたラッパー(?)を作ってみた。

環境

  1. Ubuntu 16.04.4 LTS
  2. python 3(.7.0)
  3. GPU : GeForce GTX 1070(メモリ: 8G)
  4. カメラ付き PC(外付けでも大丈夫なはず)

FCNの実行

まずは下記のページを見て、インストールおよび実行

https://github.com/wkentaro/fcn

実行するとモデルもダウンロードしてくれた上で、結果を出力してくれる
簡単、簡単!

FCNラッパーの作成

githubのページ見ると、精度についてはまとめられているが、速度についてはなんも書いてない
(論文には書いているかもしれないが...)
あと、カメラからダイレクトに結果出力できたほうが楽しいし、速度も測れるのでやってみよう!

というので作ってみたのが以下

https://github.com/komorin0521/fcn_wrapper

  1. pipで必要モジュールをインストール
  2. configファイルにて、正しいモデルファイルのパスを設定
  3. 01run_fcn_wrapper.sh を実行

で、カメラがついていれば、動作するはず.

上記の環境では約3FPSでした。
また、GPUのメモリは2Gを少し超えるくらい(2061MiB)でした。
画像の出力結果は、イスとか人をちゃんと認識してくれていたので、githubに書いてあるように精度はけっこうよさげ。

FCNの実装の流れとラッパーでの変更点

fcn_infer.pyの流れとどこを変えたのかを少しだけ

fcn_iner.pyの大まかな流れ
1. モデルをロード
2. skimageでファイル読み込み
3. inference
4. 画像保存

変更点は2と4で、2はcv2の機能でキャプチャした画像を3のインプットに変更
4は保存ではなくこれまたcv2の機能で、画面出力というように変更しました。

所感

darknet YOLOとかだと10FPS超えするので、ちょっと速度的には物足りない気をしてしまったが、
こんだけの精度で3FPSなら、けっこうすごいよなあ
中身をもう少し詳しく見てチューニングしたら早くなるかもなんで、時間があって興味が出たらやってみよう