この記事は eeic Advent Calendar 2018 の 24 日目の記事です。
プロデューサーのみなさん、そうでないみなさん、いかがお過ごしですか。
さて、声に対して色を感じたことはあるだろうか。ないだろうな。ある人もいると思うが、少なくとも僕はない。
アイドルマスターのアイドルたちには、およそみんなパーソナルカラーが決まっている。
たとえば、今日誕生日の雪歩には白色(うすい灰色)が割り当てられている。たぶん雪の色だと思う。
このパーソナルカラーを、声だけから推定することができないか、と思うわけである。
声から色が推定できれば、初登場のアイドルにも、知らないアニメのキャラクターにも、色をつけてあげることができる。
つまり、雪歩の声を聞いて「白い声の子だな」と思えたらいいわけである。
もくじ
問題設定と背景知識
アイドルマスターにはいくつかシリーズがある。
今回は、このうちミリオンライブ!とシンデレラガールズを用いる。
ミリオンライブ!には、すべてのアイドル(52 人)と事務員の青羽美咲さんにそれぞれ RGB の値が割り当てられている(ソース)。
シンデレラガールズは、声付きアイドルたち(の一部)はグッズとしてライブのたびにペンライトが販売されており、そのペンライトの色からおよその色が判断できる。
しかし、パーソナルカラーが RGB などの値として発表されたことは(知る限り)ない。
そこで、ミリオンライブ!のアイドルを学習データとして、シンデレラガールズの(声付き)アイドルたちに対して RGB の値を与えることを今回の目標とする。
やり方
i-vector
発話(1 文を発声した音声)に対してベクトルを与える i-vector というものがある。
これは、話者認識などに用いられる音声の特徴量の一つである。
i-vector は、平均が 0 ベクトルで分散共分散行列が単位行列になるような多次元正規分布に乗るのだが、まあそんなことはどうでもよくて、今回は i-vector を入力の特徴量として使ってみる。
i-vector はなんかメル周波数ケプストラム係数(MFCC)を使ってなんちゃらかんちゃらしてごたごたしてほげほげしていっぱいいろんなことすると出るけど、いちいち説明しているほど雪歩の誕生日は長くないので全部省略する。
細かい説明は小川先生と塩田先生の資料が結構わかりやすい。今でもときどき読む。
i-vector → color
今回は識別ではなく回帰の問題になってしまうので、とりあえず無思考でニューラルネットワーク。
サポートベクター回帰とかな、一生に一度はちゃんと使ってみたいよな。
色の表現方法
ニューラルネットワークなので、推定した色に対して誤差が必要である。
RGB は残念ながら知覚に合ったパラメータではない。
そこで、円錐型の HSV 色空間を用いる。
RGB を推定してから変換すると max とか出てきてクソ微分できん感じになってしまうので、今回ははじめから HSV にしておいたデータを使って推定する。
実験条件
論文に書くときに必要なやつ。読まなくていいよ。
すべて 16 kHz にダウンサンプリング。
MFCC は 5 ms のシフト長で 12 次元+エネルギーの一番無難なやつを使っている。
デルタとデルタデルタも付けた。それはそう。
平均 i-vector と色を対応付けるとデータセット足りなさすぎんごになりかねないので、各発話 i-vector と色のマッピングをとっている。
色の種類が少ないけどそこらへん気にしないでもきっとニューラルネットワークは僕らの気持ちを感じてくれる。
UBM や TV には全データセットではなく適当にサンプルしてきた分を使って作っている。
UBM は 2048 混合の GMM、i-vector の長さは 20 次元とした。
学習データサンプル
雪歩
今日誕生日の雪歩。色は ■ #d3dde9。
星梨花
色は ■ #ed90ba。
琴葉
色は ■ #92cfbb。
普通に無理がある気がするな。
結果
全然ロス下がらなかったんご……。みんな同じような色が推定された。
一応ちょっとだけ紹介。
卯月
本来の色はピンク。推定結果は ■ #cfaca0。ぜんぜん違うじゃん!
智絵里
本来の色はクローバーのきみどり。推定結果は ■ #cfb0b0。
ありす
本来の色はあお。推定結果は ■ #d0ad9e。
ゆっこ
本来の色はオレンジ。推定結果は ■ #d0ad9b。
まとめ
残念。そういう年もあるさ。
i-vector を 100 次元にしたり、色相だけを分類タスクで解いたりもしてみたけど、ちょっとダメそう。
みなさんも、自分で推定した緑色と赤色を使ってクリスマスツリーを作ってみてください。