FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

TensorFlowで画像を処理するための調査(マンデルブロー集合の表示)

TensorFlowでは、いくつかの画像を処理するための機能が備わっている。これをチェックしてみよう。 やりたいこととしては、TensorFlowを使って、画像の認識をしたり、実際の画像から様々なパラメータを抽出できるようになりたい。

まずは、TensorFlowのチュートリアルの中で最も画像処理っぽい、マンデルブロの表示のチュートリアルについてやってみよう。

http://www.tensorflow.org/tutorials/mandelbrot/index.html

ただ、このチュートリアルでは、ソースコードは断片的にしか公開されておらず、結局どのようなコードを作ればいいのかについてはしっかりと書いていない。 いろいろ試行したがうまくいかないので、先人の作成したソースコードを参照した。

github.com

結局やっていることとしては、マンデルブロ曲線を書くためのアルゴリズムを、そのまま実装してrun()を200回繰り返しているだけだ。

マンデルブロ集合 - Wikipedia

以下の式をTensorFlow上で実装しているに過ぎない。

[tex:{ \displaystyle \begin{cases} z_{n+1} &= z_n2 + c \ z_0 &= 0\ \end{cases} }]

zs_ = zs*zs + xs

# Have we diverged with this new value?
not_diverged = tf.complex_abs(zs_) < 4

step = tf.group(zs.assign(zs_),
                ns.assign_add(tf.cast(not_diverged, "float32")))

zsはループで繰り返される座標の値、nsはマンデルブローの計算が発散しているかどうかを示している。

iPythonでマンデルブローを表示する

いろいろ調査したのだが、iPythonを使えば、PythonGUIを使用することができるということが分かった。 さらに、Ubuntuで使用するためには様々なライブラリをインストールしておく必要がある。

$ sudo aptitude install python2.7-scipy python-scipy-dbg python-scipy-doc
$ sudo aptitude install ipython-qtconsole
$ sudo aptitude install pytho-matplotlib python-matplotlib-data python-matplotlib-dbg

まずは、マンデルブロー集合を、iPythonのインタプリタ上で表示させてみよう。

$ ipython qtconsole
$ (出てきたGUIウィンドウ上で) import mandelbrot.py

f:id:msyksphinz:20151130003855p:plain

おー、表示できた。

jpegで保存する

TensorFlowの機能ではないが、jpegで保存する方法もある。

ソースコードのDisplayFractalに、以下を追加しておく。

    PIL.Image.fromarray(a).save('mandelbrot.jpg')

これで、画像としてマンデルブロの表示結果が格納されることになる。

$ display mandelbrot.jpg

f:id:msyksphinz:20151130004152p:plain

お、うまくいった。今度は、これを使って、TensorFlowに画像処理をさせる方法を考えていこう。