需要のないページ

プログラミングや趣味や。

SSD-TensorFlowをWindows10で試してみる

前書き

そろそろ物体検出のアルゴリズムを試してみないと、と思い立った。*1

使ってみるのはSSDと呼ばれるもの。ぶっちゃけ内容は理解していない。

 

SlideShareにも参考になりそうなスライドがある。

 

環境

  • Windows10 Home x64
  • Miniconda 4.3.21
  • CUDA 8.0
  • PyCharm 171.4424.42

Pythonのパッケージは下記のとおり。

 

実験用のPython仮想環境を用意

今までと同様、Minicondaを用いてpython3.5環境を用意した。

とりあえず導入したパッケージとバージョンなどは次のとおり。

numpy 1.13.0 py35_0
scipy 0.19.0 np113py35_0
scikit-learn 0.18.1 np113py35_1
matplotlib 2.0.2 np113py35_0
pandas 0.20.2 np113py35_0

ここらへんはすべて、conda install で叩き込める。

 

後になって必要になったパッケージとバージョンは次のとおり。

opencv-python 3.2.0.7 <pip>
pillow 4.1.1 py35_0
jupyter 1.0.0 py35_3

OpenCVはpip*2、それ以外はcondaでインストールできる。

 

これに加えて、TensorFlowも当然導入する。

公式サイトに従うと、導入コマンドは次のとおり(GPU版)*3


pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.1.0-cp35-cp35m-win_amd64.whl

 

とりあえず動かそうとしてドツボにはまる

見出しから落ちは見えているが、とりあえず失敗談 (=大事な経験) をば。

 

今回動かしてみる実装は以下のとおり。

READMEによると、ダウンロード後にssd_300_vgg.ckpt.zipを解凍すれば、

notebookディレクトリのssd_notebook.ipynbで動作確認できるらしい。

 

PythonもDNNもろくにいじったことがなく、これらが何か調べる必要があった。

ssd_300_vgg.ckpt
TensorFlowで学習済みのパラメータのことらしい。
解凍すると .index と .data-00000-of-00001 が出てきた。

ssd_notebook.ipynb
Jupyter notebookで用いるファイル形式らしい。
Pythonのコードの中でMarkDownコメントを使えて便利。
...結果的にはこいつにはめられた。

READMEに従って.ckptを解凍し、PyCharmでプロジェクトファイルを開く。

[TerminalIPythonApp] WARNING | Subcommand `ipython notebook` is deprecated and will be removed in future versions.
[TerminalIPythonApp] WARNING | You likely want to use `jupyter notebook` in the future

いきなり怒られた。

ipythonから改名したんだよ!と主張しているだけなので、これは無視する。

 

In[6]で怒涛のワーニング & Tracebackが発生した。以下抜粋。

2017-06-09 19:05:48.187022: W c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:1152] Invalid argument: Unsuccessful Tenso[IPKernelApp] ERROR | Exception in message handler:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Unsuccessful TensorSliceReader constructor: Failed to get matching files on ../checkpoints/ssd_300_vgg.ckpt: Not found: FindFirstFile failed for: ../checkpoints : \udc8ew\udc92\u80b3\udc82\ua0bd\udc83p\udc83X\udc82\udcaa\udc8c\udca9\udc82\x82\udca9\udc82\udce8\udc82\u0702\udcb9\udc82\udcf1\udc81B
tensorflow.python.framework.errors_impl.InvalidArgumentError: Unsuccessful TensorSliceReader constructor: Failed to get matching files on ../checkpoints/ssd_300_vgg.ckpt: Not found: FindFirstFile failed for: ../checkpoints : \udc8ew\udc92\u80b3\udc82\ua0bd\udc83p\udc83X\udc82\udcaa\udc8c\udca9\udc82\x82\udca9\udc82\udce8\udc82\u0702\udcb9\udc82\udcf1\udc81B
InvalidArgumentError (see above for traceback): Unsuccessful TensorSliceReader constructor: Failed to get matching files on ../checkpoints/ssd_300_vgg.ckpt: Not found: FindFirstFile failed for: ../checkpoints : \udc8ew\udc92\u80b3\udc82\ua0bd\udc83p\udc83X\udc82\udcaa\udc8c\udca9\udc82\x82\udca9\udc82\udce8\udc82\u0702\udcb9\udc82\udcf1\udc81B
UnicodeEncodeError: 'utf-8' codec can't encode character '\udc8e' in position 174: surrogates not allowed
UnicodeEncodeError: 'utf-8' codec can't encode character '\udc8e' in position 3281: surrogates not allowed

どうやら、一番最初のWarningに全てのエラーが引きずられているようだ。

Jupyter Notebookをブラウザで開いてみると...

さっき解凍した.index と .data-00000-of-00001がアップロードされていない!

f:id:LouiS:20170610114559p:plain

 

ここでの解決篇: .ipynbを.pyに変換する

もっとスマートな方法がある気もするが、ここでは.ipynbに別れを告げる。

.ipynbのmd形式*4で書かれている部分を消してやれば.pyと同じだ。

ただ、%matplotlib inline を消してやる必要がある。

 

実は相対パスをすべて絶対パスに置き換えればなんとでもなるっちゃなる。

しかし、新たな非常に厄介な問題に遭遇したのでここでは避ける。

 

実行結果(の代わり)

実行結果を撮って置くのを忘れ、しかしまたリポジトリを落とす気にもなれず。

ネットから持ってきた画像を貼る。(当たり前だが)同じ結果だった。

f:id:LouiS:20170625004743p:plain

 

もしかして

上記のサイトによると、もっとスマートに.ipynb.pyに変換できるようだ。


    > jupyter nbconvert --to python ssd_notebook.ipynb
    

ももうjupyterなんてシラネ。

*1:この記事は二週間前から下書きに埋もれていたので、時系列的に内容は古い

*2:野良ビルドを用いることは可能

*3:必要に応じて、CUDAなどの環境を整える必要がある。

*4:Mark Down形式