WaveRNNベースのボコーダーとやら

arxiv.org

あのさあ・・・あのさあ!!

できない

まず聞きたいんだけど、
これさ、できたやつホントにいるのか?

この論文書いてる人は少なくともできていること前提で書いているんだろう
ただ、未だにこれのコードがGitに上がってないのは、
ほぼほぼできないって言ってるようなもんだと思うんだが


で、
仕方ないから実際に一ヶ月くらい前からネットワーク組んでやってみたけど、
まったくできないな
俺のやり方がおかしいんか?

とかそんなこと思って今日ネットワークの可視化してみた

画像用意するのも面倒だから(そのうち追記)文章にするが、
アップサンプルレイヤー(FC4層)において母音と子音で数値の分布が同じになっている

数値の最大値ははだいぶ異なるがその分布は同じだ
これっておかしいんじゃないか?
いや、実際はおかしいってほどおかしくはない
FCレイヤーだけで構成されているのだからこの結果は見えていた


次、
WaveRNNベースとかいってるのだから、
Split後のGRU含めた工程は実際はGRUのあとにSplitが入って、
u1024のFCレイヤは整数値と少数値の2枚構成でu512*2FCレイヤになるものだと思ってつくってみた

そうなると気になるのがPreviousSampleとやらなんだけど、
これは実値なのか?それとも整数値なのか?
WaveRNNでは前サンプルは整数値を参照するよな

こっちの実験では両方試してみたが、どちらもうまくいかなかった
また、最終FCレイヤに関しても2枚構成と1枚構成(実値をターゲット)でやってみたが、
2枚構成のほうがどうもうまくいかないよう

ってことで、今は実値から実値参照で学習している
つまり論文通りの構成
でもこれってWaveRNNベースじゃなくね?どのへんがベースなんだ?

端折ってるな

まあ薄々気づいていたけど、
これだいぶ端折ってるか、適当に書いてるな

予想だとアップサンプルは論文の文章の通りの可能性がある
つまり、1024の全結合じゃなくて128ユニット*8レイヤのFC4層
ただこれもうまくいく可能性はないんだろうな

だから、もうこれ全結合じゃなくて畳み込み層だと思われ
ほかの可能性としては、アップサンプルプロセスが不要かもしれない

この手のエンコーダープロセスで全結合をアップサンプルにつかうのなんて、まず見ない
結果、出力の模様が同じものが出来上がってしまう関係で後のGRUがこれを判別できなくなっている
そりゃそうだ、毎回同じ分布で数値だけ違うなんて、そんなの1つの整数値つかっているのと大差ないんだから

このモデルに関して言えば、Seq-2-Seqの仕組みをしているのだから
なおのことこれで成功するわけがなかった

特殊も特殊で、これに限ってはできるんじゃないか、なんて、
淡い期待をしていたのだが、どうやら馬鹿をみたらしい

おわり

試すだけ無駄だったみたいだから、
そろそろ切り上げてGithubに上がっている既存のWaveRNNつかうか、
それともせっかくここまでつくったのだから
とりあえず経験として完成形目指してみるのも面白いかもしれない

機械学習に関してはGitに上がっているものをつかうばっかりで自分でモデルをつくったこともなかったからな
これを期に汎化モデルの作り方を学んでみるのもいいかもしれない

Scyclone Voice Changer

arxiv.org

読んだんだけど、わからない点が数点あった

わからない点

mel2melのモデル構造はともかく、
WaveRNN-based vocoderの方で数点

Split

fig中の前サンプルを連結したあとのスプリットの意味がわからない

GRU手前までの構造はこの論文でのオリジナル構造だとして、
実際のWaveRNNはGRU以降、SplitはGRUのあとにくるはず

これはWaveRNNをみてもそんな感じがして、
リカレントユニットの前にスプリットは行っていない

Fig中の表記

書き方の問題なんだけど、
"u1024"ってなんのこと言ってんのかわかんねえ
この書き方やめてほしいんだけど?

FCのu1024はc1024だとして、
shape(128,64)ってのもなかなか紛らわしい

で、Concatでshape(128,65)になってるこれがマジでよくわからん
WaveRNNを参考にしてこの論文の通りにするなら、
前サンプル64点をそのままshape(128,64)に連結するわけだけど、

これって64Vecの概念はどこへいった?
次元表現の中にサンプルの値をそのまま組み込んでいいのか?
サンプルの値じゃなくて、FC通して得られたt-1のshape(128,64)を組み込んで
shape(256,64)にするならなんとなく理解できるんだけど

サンプルの値をそのまま組み込むにしても、
WaveRNNを参考にするならそのあとに一度全結合を行う

問題はさらにあと、
shape128*(65,)の表記も意味がわからないが、
そのあとのGRU u1024ってどういうことだ?
まず数字が合わないんだけど

shape128*8づつに区切ってGRUに投入するってことか?
いや、65Vecは切り崩しちゃいけないからやるなら128のほうか
それでも計算がおかしい

追記:
隠れ層がってことか
なるほど

おわり

まだちょっとわかっていないとこもあるけど、
とりあえずこんなところで

正直WaveRNNのとこの説明が不足しすぎていると思う
もうちょっと掘り下げて書いてほしかった
GitHubにコードがでてこないのはそういうことなんじゃないのか?
理解できないものを書いているからコードにしようがないっていう

追記

1日で学習プログラムまで実装できた

これバッチ160ってマジか
1660でいけるのか?って思ってやってみたら意外といけた
WaveRNNの学習って比較的軽いんだな

あとは合成できるかだ

餃子問題

lite-ra.com

話題になりすぎているので書いてみる

問題

まあ、とりあえず、
外野が、堀江氏が狙ってやったとか、
見えてる情報と結果から適当な推測している人が多いこと多いこと

まず、この件に関わらず、
事を大きくしたくないなら、ニュースとかの取材には応えないほうがいいし、
有名人に対して反論するとかもしないほうがいい
相手が堀江氏ならなおのこと


いろいろ書きたいことがあるが羅列してみる

腑に落ちない点

・ゴネ?
発端がそこだから一応触れておく
記事ではミエミエなんて言葉で煽っているが、推測以上のなんでもない

「食べてる時以外ずっと着けてないとダメなんですか」って、
展開としてはワンチャンあれば儲けもんではある
そこは悪意というより悪知恵がきいているが、
悪い言葉を使えばゴネ、良く言えば交渉とも言える

結果から、お帰りいただけてるので、
説明さえすれば最初から簡単に折れていた可能性も大いにある

というか、この程度の質問をしてくる客なら、
数日の営業の中で何件かあったんじゃないか?
穏便なお断り方法知っていたのでは?


・特定が必要な情報から、特定をし、いたずら電話をした人の責任が、
特定が必要な情報を開示した人にあること

この論理が成り立つのなら、なんでもかんでも人のせいにできそうだ
実際にした人に責任がないんだったら俺もいたずら電話してみたいんだが?
したことないからどういうふうになるのか気になるんだよね


・中傷批判

二者の論争内に中傷批判(中傷の判定が人によって違うので不明)が含まれていたとして、
両者が言っているのなら相殺では?
内容はそれとなく見ているけど、どっちもバチバチに言い合っているぞ

で、そこから、
外野が両者に対してあれやこれや言うわけだけど、
この批判、中傷の責任がこの二者にある、みたいな感じで展開しているようにみえる

また、
中傷批判に耐えれる人よりも、耐えれない人が擁護される展開が、
どうにも納得できない
同じような言葉、情報が与えられたときに、どうして被害影響が大きいほうが、
より共感できそうなほうが持ち上げられるんだ?

お前は耐えれるからいいじゃんってそういうことか?
なんで等価値の情報が与えられたときの対応が同等じゃないんだ?


・反論をして事を大きくする道を選んだ店側が、
いたずら電話が原因で営業妨害を訴えること

これ結構面白いことで、当たり屋みたいなアクションしてるんだよな
堀江氏が当たり屋みたいなこと言うのはいつものことで、
中傷を受けることを受け入れているからそれをするのに対して、
店側が同じ土俵に立ったのに関わらず、中傷は受け入れない姿勢で、
それを盾にニュースで展開している

おわり

調べればわかるだろうが、
この件に関して堀江氏のほうが中傷的な言葉を受け取っていると思う

情報量で言えばより批判を受けていない店側が、
中傷辛いですって被害者面しているところがどうにも納得できなかった
と、ここに着地する


現時点で、
ニュースやら何やらのおかげで堀江氏とほぼ同等の知名度になっていることから、
もし知名度を上げる戦略として今回の行動をとったのだとしたら、かなり上手
そうでなければ、裁判で勝ったとしても得られるものが少ないことから愚かとしか言えない

まあ顔出して取材対応しているところをみると、
可能な限り好印象、共感を得られる形で知名度を上げたいって感じなのかな

声質変換

www.youtube.com

狩野英孝ってYouTubeチャンネル持ってたのか
しかも意外と面白いぞ
DbDが好きなのか

本題

qiita.com
結構頻繁に更新している声質変換のqiita記事
って思ってみてみると、やっぱりbecome-yukarinか

うーん

リンクをつらつら聴いてみても、
うーん、以外の感想がでない
これだったらvoice-cloningのほうがいいな

github.com

いいこといいんだけど、
こっちはこっちで文字入力が必要な関係で、
精度の良いASRが必要になってくるのと、

もっとも俺が問題視していることが、
おそらく、朗読以上のクオリティがだせない
読み上げに特化した音声合成は、もはや俺の求めるところではない
生きた声がつくりたいんだ


と、まあ、

もうそんなこんなで、
調べては手を付けてみてるが、どうにもそれっぽい文献が見当たらない

ノンパラレルは文献が多く、
StarGANの応用でこんなのがあった
github.com

これはなかなかの精度だが、
サンプルがやっぱり朗読なのでまだ半信半疑
命が芽生えるかどうかはコードを見る限りでは想像もできない
正直、こんな単純な構造でこのクオリティは信じきれない
かなり限定された手法じゃないのか?

どうなんだろう
命を吹き込めるアーキテクチャが、そろそろでてきてもいいんじゃないか

清掃員?

ホロライブまた炎上してね?
ってことに今さっき気づいた

職業

経緯としては清掃員という職業を嘲笑ったらしい
ひろゆき氏とか、他YouTuberも物議しているほど話は広がっている

ひろゆき、清掃員嘲笑系Vtuberにバトルを仕掛け始めるwww | ウキウキ大陸

うーん?
清掃員が底辺の職業だから笑っているのか?
なりたい職業が別にあって、でも清掃員ですって別のなりたくない職業を提示されたから笑ったんじゃないか?
まあ、解釈の違いか

清掃員として働いた経験がある俺から言えば、
それを何十年と続けたい職業だとは思わなかったな

もし進んでなりたい職業が清掃員なら笑わなかったのか、と言えば、
そうなんじゃないか?
清掃員!いいじゃん!やりたい!って言って終わってたと思う


つまり、底辺と考えていたのはまわりだけで、
その底辺の職業という認識を知らなかったのが、軽率な発言と捉えられたんかな
もし、それを知っていて嘲笑っていたのなら擁護できないけど


それにしても大物が物議するほどの内容とは思えなかったんだけど、
そんな話題にしたいものだったのか?
それとも最近炎上しがちなVTuver関連の話題にのっかっておきたかったとかそういうことなのかな

numpyの関数列同時実行

あのさあ、

セブンのたらこパスタ、なんでバターじゃなくなったん?

久々に買ってみたら、あれ、
たらこパスタにバターがのってなくて、
商品名もたらこマヨパスタになっていた

マヨはマヨでうまいけど、
たらこといえばバターだろうがっ!

本題

numpyをよくつかっている

numpyといえば、行列演算なんだが、
それを利用した小ワザを思いついた

a = numpy.array([1,2])
b = numpy.array([3,4])
c = a +  b
# c: [ 4, 6 ]

通常足し算をするときはこんな感じで同じ位置同士を演算する

d = numpy.sin(a)
# d: [0.84147098, 0.90929743]

関数に投げれば、要素に対して関数を実行する

じゃあ、異なる関数を集めた行列で同じ位置の要素に関数を実行するには?
そういう関数があるのかもしれないけど、
わからないし、調べてもでなかったので、別の方法で解決する

class func():
    def __init__(self, a=None):
        self.f = a
    def __add__(self, a):
        return self.f(a)
    def setfunc(self, a):
        self.f = a

a = numpy.array([func(f1), func(f2)], dtype='object')
b = numpy.array([1,2])
c = a + b

無理矢理になるけど、こうするしかないよなあ
クラスの演算命令に設定をするだけ

これ、関数オブジェクトに登録できないのか?って思ってやってみたが、
どうもうまくいかなかった

大量の関数を用意して、順列処理する必要のない演算はこれで同時実行すれば早いはず

フブキング登録者一位奪還か

なんか、あれだな

ブログ書くことが完全に習慣化していたせいか、
どうもブログ記事作成ページを開くことが癖になっていたみたいだ

スマホ触れば、とりあえず、ページを開くが、
「あ、そうだった。。。」となってぼーっとする

ってか、あとになって気づいたんだんだけど、
やっぱりバックアップくらいは残しておくべきだったな
あとから見返すために書いたのに見返せなくしたら本末転倒じゃん
まあ、まとめはバックアップとってあったからいいか


それにしても新鮮な感覚だ
新鮮?いや、
懐かしい感覚、かな
0から始めるのってやっぱり気楽でいい

本題

久々に、というか、
1ヶ月ぶりくらいにholostatsを覗いてみてびっくり

holo.poi.cat

ぶっきー、90万人突破でホロライブ内では一位に舞い戻っていた
これってもう結構知れ渡っているのかな?俺は今知ったんだけど


ホロライブの顔と言ったらときのそらちゃん、
その次で、ぶっきーのイメージ
その座をぺこーらとかに長いこと渡していたが、
やっとこさ取り戻した感じか

ぺこらが人気なのはその独特なキャラと声なんだろう
まあ、それはぶっきーもそうなんだけど、
特徴的な声っていうのはそれだけで魅力的らしい
いや、
聞いてるだけで癒やされるなんて魅力的以外の何物でもない

holostatsサーバ

github.com

このholostatsサーバ、Rustで書かれているらしい

Rustか…
とか思ってコードを見ていたが、
以外にも簡潔(?)に書かれていた
読みやすい

俺の思っていたRustコードと違うな
これまで見てきたRustコードって、静的言語らしく密度が濃く、
Python使ってる人からすると読むのがやたら疲れる感覚だった

それこそRustを勉強していたときは、、
ゲームのrepoを読んでいた気がする
それはゴリゴリに描画系のライブラリを引用してとんでもないコード量になっていた

このコードはどちらかといえばPython的な感覚を覚える
短い行数で多くの処理するてこ揚げのような書き方
Rustって確かasync処理が得意なんだっけ?そんでGoが並列処理が得意?
ってことはRustらしいRustの書き方がこれなのか

まだまだ読んだRustコードが少ないからなんともだけど、
これが一般的な書き方で、楽に実装できて高速アプリケーションを立ち上げれるなら、
Rustはなかなか魅力的


それとAngular、Typescriptも使われているよう
モダンプログラミングだ

あれだな、ゲームコードを読むよりも
こういった小さいアプリケーションから読むべきだったか
小さいハードルを飛べないようでは大きいハードルを超えれるわけがない