2016/07/02

[DL]ゴッホ風の絵に変換するところを理解したい (1)

深層学習でやるのは、クラスタリングがメインだと思っていた。
が、よく「○○風の絵をディープラーニングでつくる」みたいな記事もある。
最初に見かけたのは、ゴッホ風の絵にする、だったと思う。

どこら辺が深層学習と結びついているのだろう?
理解できるかどうかわからんが、努力してみよう。


画風を変換するアルゴリズム | Preferred Research

日本語で説明が書いてあるので、これを読むことにする。
が、いきなり詰まった。。。

入力画像は、RGBの256x256なので、3*256*256なのはわかる。
その次が、64*256*256。
3の倍数じゃないやん!

その下にある中間層を画像化したものも、チャネル3つ分がそれぞれあるので、64*256*256が3つ分ある、でよいのかな?
つまり、①以降は、入力画像の1チャネルに対しての結果という考え方だ。

・・・違うな、数が多いから3チャネル分だけ抽出したと書かれている。
ということは、RGBをグレースケール化して計算したのかしら。
カラーからグレースケールするときには一般的な変換式があるけど、そのパターンが64あるから64チャネルになる、という考え方だ。

 

http://arxiv.org/pdf/1409.1556.pdf
おそらく、こちらが「VGG 16-layerのCNNモデル」と書かれている原本だと思う。
3ページ目のDが、16weightで、conv3-64, -128, -256, -512, -512と表になっているから、表の上から4つが、①~④になっていると思われる。
「conv<receptive field size>-<number of channels>」と書いてあるので、たぶんそうだろう。

receptive field sizeが3。
『深層学習』p.80にもある、受容野だ。
3x3のフィルタと考えるとよいのかな?
もしそうだったら、普通に3x3のフィルタを掛けると、上下左右で1ピクセルずつ小さくなる。

3x3のフィルタだと、たとえば画像の左上だとしたら、(0, 0)-(2, 2)になる。
このフィルタで計算できるのは、(1, 1)の画素値だ。

image

今は知らないけど、私が画像処理の勉強をしていた頃はこういうフィルタの書き方をしていて、画素に対してこの掛け算を行い、その総和を中央の値にするのだ。
これだと、画素が9つあって、それぞれ1/9だから、移動平均のフィルタになる。

もし画像が5x5だったら、3x3のフィルタで計算できるのは黄色の範囲だけになる。

image

画像が小さくなるのが嫌だったら、それっぽい画素値を外側に用意してやるしかない。

image

というわけで、フィルタした後も256x256を保っているから、そういう計算をしたのだろう。

じゃあ、64ってのは何だろうか?
PDFを検索したけど、"2.2 CONFIGURATIONS"に「最初のレイヤーは64から始めて~」しか書いてない。
主語は、width of conv. layers。
畳み込み層の大きさか。

 

『深層学習』のp.87に畳み込み層の章がある。
たしかにここにも、多チャネルの画像に対して複数個のフィルタを並行して演算するようなことが書かれている。
書いてあることと、ネットで説明してあることが一致しているのはだいたいわかるのだが、あっさりと「入力では3チャネルだけど中間層では16チャネルとか256チャネルとかになります」と書かれても、納得できないではないか!

もうちょっと調べて理解を進めよう。


こんな感じでやっていきます。
2回目があるのかどうか、我ながら心配です。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。