2016年09月21日

WAVENETの原理と構造




あれはどうやってるんでしょうか?
しかし、よく読んでもわからなかったことの方が非常に多かったのですが...

WAVENET: A GENERATIVE MODEL FOR RAW AUDIO
Aaron van den Oord , Sander Dieleman , Karen Simonyan , Oriol Vinyals , Alex Graves , Nal Kalchbrenner, Andrew Senior, Koray Kavukcuoglu  Google DeepMind
Heiga Zeny  Google
A single WaveNet can capture the characteristics of many different speakers with equal fidelity, and can switch between them by conditioning on the speaker identity.
When trained to model music, we find that it generates novel and often highly realistic musical fragments. We also show that it can be employed as a discriminative model, returning promising results for phoneme recognition.

これが一番のadvantageで、実際、それを前に出してきています。

分からないのは、
具体的には何をどれぐらい学習データとしたの正確な情報と、
モデルの具体的に詳細な形状の数字です。

それがどこにも全然書かれていません。
the conditional probability distribution is modelled by a stack of convolutional layers. There are no pooling layers in the network, and the output of the model has the same time dimensionality as the input.

条件付確率分布をモデル化する。
ネットワーク内にpooling層はなく、モデルの出力は、入力と同じ時間の次元を持っている。
When generating with the model, the predictions are sequential: after each sample is predicted, it is fed back into the network to predict the next sample.

モデルを用いて生成する時、予測は連続する。
各サンプルが予測されたら、次を予測するためにフィードバックされる.....

WAVENETへ影響を与えたアイデアと言うのがPixelCNNとPixelRNNだそうで
具体的には、こういう事だそうです。

Conditional Image Generation with PixelCNN Decoders
Aaron van den Oord, Nal Kalchbrenner, Oriol Vinyals, Lasse Espeholt, Alex Graves, Koray Kavukcuoglu  Google DeepMind
arXiv preprint arXiv:1606.05328 (2016).
wavenet0

このように、任意の画素値は他の画素に依存している。

このPixelCNNがオートエンコーダとして利用できるというのが、どうやって使うのかが十分に理解できなかったのですが...
このPixelCNN同様に、WAVENETは条件付き確率分布を、畳み込み層のスタックによってモデル化する。

PixelCNNの方にも、入力層には画像と一緒に画像のラベル、キャプチャやタグなども入力すると読めるような事が書いてあるんですが、
具体的なネットワークの形が書いてありません。
それらをどのように与えるのかも明記されてないと思います。
続きを読む

2016年09月20日

facebook messengerでスライドボタン, クイック返信の実装

facebook messenger botでユーザに選択肢を選ばせるならどちらかを採ると思います。

スライドボタンは複数の画像を横スライドでき、なおかつ、各アイテムにそれぞれ別のボタンを付けられます。

 $json = [
  'recipient' => [
   'id' => $from,
  ],
  'message' => [
   'attachment' => [
    'type' => 'template' ,
    'payload' => [
     "template_type" => "generic",
      "elements" => [
      [
       "title"=> "タイトル" ,
"image_url"=> "画像URL" ,
"subtitle"=> "サブタイトル" ,
"buttons"=> [
[
"type"=> "web_url",
"url"=> "URL",
"title"=> "ボタン文字列"
]
        ],
       ], ...


画像URLは何でも良いというかアクセスできるURLならば何でもボタンに入れることが出来ます。

この$jsonをpostします。


クイック返信の方がjsonはずっとシンプルです。
 $json = [
  'recipient' => [
   'id' => $from,
  ],
  'message' => [
   "text" => "メッセージ",
    "quick_replies" => [
    [
     "content_type" => "text",
     "title" => "タイトル" ,
     "payload" => "id" , ] , ...



しかし状態の遷移としてはどちらも挙動が全然違います。

スライドボタンの方は、そもそもユーザからのレスポンスを必要としていません。


クイック返信の方は、
ボタンを押すと、クイック返信の選択肢が消えて、ユーザがクイック返信のタイトルの発言をしたように見える状態に変化します。
どのボタンを押したのかは ['message']['text']の方ではなく、['payload']で返答を受け取ります。


上のjsonの場合は ['messaging']['message']['quick_reply']['payload'] などに、  "id" などが入ります。
続きを読む

2016年09月15日

DCGANで生成画像をコントロールする方法



DCGANで思うような画像を作り出したいと思ってるんですが
上手く出来てる人なんて一人も居ないんじゃないでしょうか?


まず学習データが少ないと思ったので
cifar10_input.py などで学習用画像を増やそうと思ったのですが
特にアフィン変換が無い事、思ったよりも編集バリエーションが少ないと思い、
また、画像サイズを揃えるために mogrify コマンドなどで一括リサイズとかしていたんですが、
画像を実際に見てると、クオリティが十分に維持されてないと感じたので、仕方ないので自分で変換プログラムを実装することにしました。


DCGAN.py中で実際に画像を作っているのは、まず
z[50:,:] = (xp.random.uniform(-1, 1, (50, nz), dtype=np.float32))

z[]の50から100までに-1 から 1の一様乱数の幅nzの配列を代入
z[]の0から49までにはこれをしていないが
学習中画像 vis_00_000000.png を見れば分かる通り、上半分が同じ値として固定されている。
このzが入力値であり
z = Variable(z)
x = gen(z, test=True)

このxが既に画像そのものである。
x = x.data.get()

tmp = ((np.vectorize(clip_img)(x[i_,:,:,:])+1)/2).transpose(1,2,0)

としているが、これは、値を画像ファイル用に正規化しているだけ

だから、z の値で出力画像はコントロール出来る。



しかし、どうも、zとxの関係に誤解があるような気がしてきました。


続きを読む

adsense
Categories
サイト内検索
にほんブログ村 科学ブログへ
にほんブログ村

amazon
Profile
Archives
blogchart
QRコード
QRコード
Recent Comments
o