Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

女の子になれなかった人のために

3,844 views

Published on

音声の分析合成と機械学習を使ってボイスチェンジャーを作るスライドです

Published in: Technology
  • Be the first to comment

女の子になれなかった人のために

  1. 1. 女の子になれなかった人のために ID:spi8823
  2. 2. 自己紹介 ID: • spi8823 所属: • 工学研究科 原子核工学専攻 核材料工学研究室 M1 研究内容: • 加速器を使ってなんやかんや KMCでの活動: • ゲーム制作・DTM 趣味: • スピッツ・カラオケ・神社 内定これくしょんしてます
  3. 3. 余談/研究室での活動 水素原子の金属表面での挙動に関する研究 • 表面挙動なので表面水素密度が必要 • 加速器を使ったNRA法で表面水素密度を測定 実験は宇治キャンパスで • 泊まり込みなのでめっちゃ自炊する
  4. 4. 女の子 「早く 女の子になりたい!」
  5. 5. 女の子になるには 醜い体…… • 女装? • 骨格はどうしようもない…… 醜い心 • どうしようもない…… 醜い声 • どうしようもない…… • ほんまか?
  6. 6. 動機 女の子の声になりたい!! スピッツの声で歌いたい!! コナン君が持ってるような変声機さえあれば…… • 調べてみると自分でも作れそうな雰囲気 • 偉い人がもう作ってくれてるのは御愛嬌
  7. 7. そこで分析合成 音声の発生機構をモデル化し,そのパラメータを符号化 • 一般に言う音声合成とは全く違うので注意! じゃないよ!! 符号化したパラメータから音声を合成する • =分析合成
  8. 8. 目標 目標1 • 分析合成を用いて入力した音声を再合成する 目標2 • 入力した音声を文章はそのままで別の音声に変換する 目標3 • 入力した音声を文章はそのままで別の人物の音声に変換する
  9. 9. 注意 このスライドは「人工知能に関する断創録」様のブログを 全面的にパクッて参考にしています • 先人に感謝!!
  10. 10. 前半:分析合成 人間の声について 声道パラメータについて 実装について デモ
  11. 11. 人間の声の構造 声帯で元となる音声が発生する 声道を通って音声が歪められる 口腔内を通って母音および子音が付加される ブザー音を声帯で発生する音声に見立て それを声道や口腔の構造を再現したフィルタを通すことで 人間の声を計算機上で再現することができる!
  12. 12. 人間の声の再現 音声のピッチを求める 音声の声道パラメータ(メルケプストラム)を求める ピッチをもとにブザー音を発生させる(=声帯で音が発生) ブザー音を声道パラメータに基づくフィルタに通す • (=喉や口を通って声が外に出る) 人間の声!!!! (http://www.kumikomi.net/archive s/2010/08/ep30gose.phpより拝借)
  13. 13. 声道パラメータの求め方 音声信号をフーリエ変換し、周波数成分にする • 本当はこれをそのまま使いたい(ほんまか?) • 典型的には1秒間に44100点とかだがデータ量が多すぎて無理 周波数成分のうち細かな変動は無視し、大まかな特徴を 捉える(=スペクトル包絡を求める) • 周波数成分が1024個とかあるのを30データぐらいにする
  14. 14. 用語解説 フーリエ変換 • ある関数をフーリエ級数という様々な周波数と位相を持った 正弦波の足し合わせで表現し、それらのパラメータを 求めること • 音声データをフーリエ変換すると その音声にどんな周波数の音が含まれているかを 調べることができる • フーリエ変換した結果を 周波数スペクトラムとかいう (http://www.yukisako.xyz/entry/fourier-transformより拝借)
  15. 15. 用語解説 スペクトログラム • 周波数スペクトラムはある時間フレームの中の周波数を 表しているに過ぎない(つまり一瞬しか見れない) • 各フレームのスペクトラムを並べて スペクトラムの時間変化を見られるようにしたのが このスペクトログラム time
  16. 16. スペクトル包絡の求め方 周波数スペクトルの対数をとる 対数スペクトルをさらにフーリエ変換する フーリエ変換したもの(=ケプストラム)のうち、高周波 成分のものを取り除く 処理したケプストラムをフーリエ逆変換する • =スペクトル包絡線 フーリエ変換 フーリエ変換 対数化 高周波成分を 取り除く フーリエ変換 音の信号 周波数 スペクトル 対数周波数 スペクトル ケプストラム (ローパスした) ケプストラム スペクトル 包絡
  17. 17. 用語解説 ケプストラム(cepstrum) • 信号をフーリエ変換し得られた周波数成分を対数にしたものを さらにフーリエ変換したもの • つまり、スペクトルのスペクトルという感じ • これを用いることで周波数成分の概形を (少ない情報で)把握することができる • 音声に適用すると、人間の声から声帯の振動に起因する成分 のみを抽出できる • “spectrum”のアナグラム
  18. 18. 用語解説 メル-ケプストラム • 周波数スペクトルを聴覚に合わせた周波数軸(メル尺度)で 表したものをケプストラムにしたもの • 低い周波数ほど間隔が狭く、高いほど広くなる (http://tam5917.hatenablog.com/entry/2016/03/15/113555より拝借)
  19. 19. 用語解説 MLSAフィルター • Mel-Log Spectrum Approximatation • メルケプストラムから音声を合成するデジタルフィルタ • 類似の働きをするものは他にもいろいろある LMA All-pole All-pole lattice MGLSA(一般化したやつっぽい) • 今回の実装はこっち
  20. 20. 実装 Pythonを使用 • 初めて使った…… SPTKという分析合成用のツールを用いる • なので細かい実装はしません
  21. 21. SPTK Signal Processing TookKit 音声処理をするためのツール • ピッチを検出したり • メルケプストラムを抽出したり • ケプストラムとピッチから音声を合成したりできる 今回はこれのPythonラッパー(pysptk)を用いた
  22. 22. デモ グラフを見せたり音を鳴らしたりします その1:そのまま再合成 その2:ピッチを高くしたり低くしたり その3:ピッチを無くして無声音に
  23. 23. これで半分ぐらい? 質問があればどうぞ
  24. 24. 限界 メルケプストラムをいじっているだけでは 女の子の声にはなれない…… ある人物Aの音声と別の人物Bの音声を解析し Aの声からBの声へと変換できるようにする • 流行りの を使えばできそう 女の子になれなくて落ち込むFさん
  25. 25. 後半:機械学習 機械学習について 前処理について 実装について デモ
  26. 26. 機械学習とは 「データから反復的に学習し、そこに潜むパターンを 見つけ出すこと」らしい 大きく分けて3種類あるらしい • 教師あり学習 一連の入力とそれらに対応する正しい出力を受け取り、 事象を予測できるようになること • 教師無し学習 データを探索してその内部に何らかの構造を見つけ出す • 強化学習 どの行動が最大の報酬を生み出すかを、試行錯誤を通して突き止める
  27. 27. 教師あり学習 GMM(混合ガウスモデル) • というモデルを今回は用いた • 多次元のガウス分布がいっぱい重なったもの • 学習させると値が推定できる • 学習 複数の(x, y)から図のような ガウス分布を見つける • 値の推定  x を与えると その x での y の期待値が求まる • 実際はこれの50次元ぐらい版 • 詳しいことは知らん!!
  28. 28. 学習のさせ方 ある人物Aの音声のケプストラム(=x)と それと全く同じ文章を読んだ ある人物Bの音声のケプストラム(=y)を 先ほどのGMMで学習させる そのままのデータを突っ込んでもうまく学習できないので データに前処理をかける
  29. 29. 前処理 AのケプストラムとBのケプストラムを見比べたとき どの部分がどの部分に対応してるのかわからない したがって、DTWという手法を使って “もっともそれっぽい”対応を取ってから学習させる (断創録さまより拝借)
  30. 30. DTW DTW(Dynamic Time Wrapping)とは • 動的時間伸縮法 • 時系列データの類似度を測る手法の1つ • 察するに話す速さとか間の置き方とかを いい感じに伸縮してくれるっぽい (http://sinhrks.hatenablog.com/entry/2014/11/14/232603より拝借)
  31. 31. 実装 機械学習 • scikit-learn(sklearn)というライブラリを使った • 界隈では一番有名なやつらしい DTW • dtwというライブラリを使用
  32. 32. デモ テスト用の音声を使った機械学習の結果を見せます
  33. 33. 休憩 質問とか無いですか
  34. 34. 本題 ここで満足はできない “““自分の声”””を女の子の声にしたいんだ!!! 自分の声のサンプルと女の子の声のサンプルを 機械学習させれば女の子の声になれる!!
  35. 35. 学習用のデータを用意① グーグルを開く ゴニョゴニョっとする 木曾ちゃんのボイスデータが いっぱい手に入る!! いいぞ!!
  36. 36. 学習用のデータを用意② マイクを用意する カラオケに行って歌う 先ほど用意した音声を聞きながら 木曾ちゃんのセリフを真似する • (精神的)苦行 • 録音した自分の声を自分で聞くことほど 辛いものはない • 隣の部屋の人ごめんなさい
  37. 37. 学習させる ケプストラムを求め、DTWし、GMMで学習させる ここで障害が発生 • 拾ってきたデータだけエラーが吐かれる…… • どうやら完全な無音(データが0)が続くとダメらしい • 小さい雑音を鳴らしておくことで解決!
  38. 38. 試してみる マイクで録音して実際にやってみる ピッチを変えただけの声と比較 それっぽくなってる? • 最適なパラメータがわからん……
  39. 39. Q.女の子になれた? A.なれそう • 女の子への道は長い……
  40. 40. まとめと課題 まとめ • 分析合成とその周辺の知識について解説し、実演した • 機械学習と分析合成を使い、ある人物の音声を別の人物の音声 に変換する方法について解説し、実演した 課題 • 分析合成を行う際の各パラメータが合成結果にどう影響するの かについて学ぶ必要がある • 機械学習を行って合成した音声の再現度は良好とはいいがたく どうにかして改善する必要がある • ピッチは手動で書き換えたが、ここにも機械学習を使うことが できればより女の子らしくなることができると思われる • リアルタイムでやりたかった……
  41. 41. 感想 Python(とライブラリ)すげー 音声処理難しい…… • パラメータを間違えるとただのパルスが出力されたりして 難しい 女の子になりたい……
  42. 42. 以上です ご清聴ありがとうございました 質問とか言いたいこととか無いですか 酒が飲めるぞー!!

×