【注目論文】ISMIR2022論文ピックアップ（１）

ISMIR2022のProceedingから、気になった論文をピックアップして読んでみました。

## P2-11: Mel Spectrogram Inversion with Stable Pitch

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/39d62787-a6ca-00ed-64d2-5075b1c3b2d2.png)

**新しいニューラルボコーダーの提案**。

MelGANやHifi-GANのような、Mel-Spectrogramを音声波形に変換するDNNです。「**音楽音声に特化**（specifically designed for music）」としており、実験の章ではAmbientデータセットとNSynthデータセットを使って有効性を検証しています。

ニューラルボコーダーと言えば波形を直接生成するタイプが多いですが、この提案法は２次元複素数行列であるSTFT表現を推定するタイプです。
[**iSTFTNet**](https://www.kecl.ntt.co.jp/people/kaneko.takuhiro/projects/istftnet/)もそうですね。

波形を生成するタイプのDNNは、音声波形の周期的なパターンを学習させるのが難しく、合成結果のピッチが不安定になりやすいという弱点があります。
なので特に音楽の音声の合成は、やっぱり周波数域で推定するのが望ましいよね、と論文は主張します。

周波数域での推定は「**位相の推定が難関**」とされています。本提案手法は、時間軸・周波数軸上の位相の微分値をNNで出力し、微分値の積分によって位相の値を求める、という工夫をしています。
[**GANSynth**](https://magenta.tensorflow.org/gansynth)と同様、（unwrapされた）位相の時間変化の一定性に着目した作戦ですね（下図の$\nabla\phi$）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/dae2945c-d850-72fe-ef70-6d8417c43089.png)
ほかのボコーダーと違い、識別器を用いた**敵対的学習過程が無い**のは特徴的です。
にもかかわらず、MelGANやHifi-GANに匹敵、あるいは上回る合成品質を達成したのは興味深いです。敵対的学習を採用することによる効果はfuture researchに回すとのことでしたが、どこまで良くなるか気になります。

## P5-02: Musika! Fast Infinite Waveform Music Generation
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/8f475d9e-eeab-76de-0ac3-6af7f0e68b9f.png)
**音声波形レベルの音楽生成モデル**。

実際に生成してみたい人用に[**Huggung Faceデモ**](https://huggingface.co/spaces/marcop/musika)も用意されています。

音楽音声生成モデルは、音声の複素数STFTを出力する**２階層**オートエンコーダーによって作られています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/c7199730-d5b0-762f-18d7-df47ea735bf3.png)

この生成モデルも先ほどのニューラルボコーダーと同じく、複素数STFTを推定するタイプになっています。
上の図のように、オートエンコーダーは２つのエンコーダーと２つのデコーダーからなっており、学習はいくつかの段階に分かれて行われます。
1. $Enc_1$&$Dec_1$からなるオートエンコーダーを、**STFTの対数振幅のL1損失**を最小化するよう学習させる。
1. $Enc_1$のパラメータを固定し、$Dec_1$のパラメーターを「**STFT対数振幅のL1損失＋iSTFTで得た波形のMulti-spectral Loss＋GAN関連の損失関数**」を最小化するよう学習させる。
1. $Enc_2$&$Dec_2$をオートエンコーダーに追加する。
1. $Enc_1$&$Dec_1$のパラメーターを固定し、手順1と2の方法で$Enc_2$&$Dec_2$を学習させる。

以上の手順で、音楽作品の音声データを学習データとして音声の生成モデルを作っています。1と2の手順は[RAVE](https://github.com/acids-ircam/RAVE)に似てますね。
位相は直接教師データから学習せず、2の敵対的学習過程により、波形に戻したときに整合性が取れるように学習させていく作戦です。

明示的ではありませんが、オートエンコーダーを２段階に分けて学習させることで、$Enc_1$&$Dec_1$は低次な音声波形構造、$Enc_2$&$Dec_2$はより高次な音楽内容の情報をエンコードするといった「**棲み分け**」がなされることを意図しているらしいです。

学習されたデコーダーは、特徴ベクトルを入力すると音楽音声を出力してくれます。
このデコーダーを使い音楽を生成するために、今度は特徴ベクトルを生成するGANを作ります。エンコーダーが出力した特徴ベクトルを「本物データ」として扱い、GAN学習を回します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/ee5c88f8-3468-30ca-4f91-b96b568885ce.png)

特徴ベクトル生成GANの学習は、**長い時間に渡って生成結果の整合性を保つ**ための工夫が施されています。
Generatorに入力するノイズベクトルは単純にランダムサンプルするのではなく、以下の手順で作成します。
1. 三つの「**アンカー**」ベクトル$w_l, w_c, w_r$をランダムにサンプル
1. アンカーの間を線形補間で埋めて長い系列$W$を作成
1. 作成した系列から隣接する区間$W_1, W_2$を切り出し、それぞれGeneratorに入力。Generatorは隣接する特徴ベクトルを出力する。

Generatorの出力２回分を繋げたものが、ちゃんと連続的な特徴ベクトル列になっているか、Discriminatorに判別させます。

**入力ベクトルに時間連続性を持たせることで、Generatorにもまるで時系列モデルのような挙動を持たせる**作戦ですね。

生成手順は、
1. アンカーをサンプルし、連続的な入力系列を作る
1. 入力系列を一定間隔で切り出し、Generatorに順番で入力、特徴ベクトルを生成する
1. 特徴ベクトルをデコーダーに入力し音楽音声STFTを推定
1. iSTFTで音声波形を獲得

となります。
一定間隔に「アンカー」をサンプルし続ければ、入力系列は無限に延ばせるので、論文タイトルが言うような「**Infinite**」な生成が可能になります。
また、自己回帰的な生成過程ではないため並列化可能であり、「**Fast**」な生成も可能になります。

## P5-10: DDX7: Differentiable FM Synthesis of Musical Instrument Sounds
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/5c5cb76f-f8e6-2e99-4ae9-c080711a89b7.png)

**DDSPに基づいたFMシンセサイザー**。

去年の[**Neural Waveshaping Synthesis**](https://arxiv.org/abs/2107.05050)に続き、今年はDDSPファミリーにFMシンセが登場。
ISMIRではないですが、WORLDボコーダー（本来の意味のボコーダー）の[**DDSP化も提案され**](https://arxiv.org/abs/2208.07282v3)るなど、この分野は面白アイデアが続出しています。

元祖DDSPシンセと同様、入力音声の音高と音量を解析し、シンセパラメーターを推定するDNNを学習することが目標です。
良いDNNが作れれば、[**DDSP-VST**](https://magenta.tensorflow.org/ddsp-vst)や[**Mauf**](https://mawf.io/)のような音色変換を行うことができます。

FM音源の合成モジュールは以下のパラメーターを持ちます。
* $I$: 変調指数
* $f_c$: キャリア周波数
* $f_m$: モジュレーター周波数
* $A$: キャリア振幅
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/8c484c1d-db71-a2c4-b418-639bbf575411.png)

さらに合成モジュールを直列あるいは並列につなぐことでより複雑な合成音を得ています。

これらのパラメーターのうち、キャリア周波数$f_c$はCREPEで推定したf0を使い、振幅$A$も元信号のラウドネスを与えます。
モジュレーター周波数$f_m$も、勾配降下で最適化できないので、$f_c$の定数倍とします。
合成モジュールの繋ぎ方も事前に決めるしかありません。

なのでDNNデコーダーが推定するのは変調指数$I$のみ。つい最近提案された、[**勾配降下可能な周波数推定法**](https://qiita.com/xiao_ming/items/37303e1a5a8c26ff5088)を使えば、$f_m$も推定対象にできそうな気もしますが。

[**本研究の専用ページ**](https://fcaspe.github.io/ddx7/)で色んな合成結果を聴けます。

合成モジュールの設定が良ければ音質は高いですが、逆に言えば人手による事前設定に色々依存しているところに、限界を感じる部分はあります。
そこに目をつむれるなら、元祖DDSPより計算が軽いのは一つの長所と言えるかもしれません。

## P6-13: Music Separation Enhancement with Generative Modeling

**音源音源分離の結果を、後処理GANで補正したらどうか？という提案**。

DNN系の音楽音源分離手法は波形ベース（Demucs等）と周波数域ベース（Spleeter/OpenUnmix）に大別されますが、それぞれ分離結果の音質に一定の傾向があるみたいです。

波形ベース手法は、**高周波数域がノイジーになりがち**。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/b5e04427-5e74-9a9e-643d-ff57fd53e22b.png)
周波数域ベース手法は逆に、**高域成分が抜けがち**になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/3a2914fb-4c03-db77-fd35-842ed0e3d108.png)

本研究は、**分離後の音声をさらにGANに通すことで、高品質なステムを獲得できないか**？という仮説を検証しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/fa52eac7-9263-b729-8429-a6825cbde841.png)
この「味付け」する為のモジュールを**MSG**と呼んでいます。何かと思えば**M**ake it **S**ound **G**oodの略だとか。流行らせたいのかな...

提案手法の評価は主観的評価法で行われました。人を集めて聞き比べて頂いた結果：
1. ベース・ドラムパート分離に関しては、MSGを適用した分離結果が適用前よりも良く聞こえた場合が多かった。
1. ボーカルパートに関しては、MSG適用**前**の分離結果のほうが良く聞こえる場合が多かった。

以上の結果から、「**ボーカルパート以外はステムの品質が向上した**」と結論付けています。ボーカルに関しては、既に十分良いから向上の余地が無いのかも？的な考察がされていました。

処理前後の音声は以下のリンクから聞き比べできます。
https://master.d3neehbzr2rbmh.amplifyapp.com/

さて、この違いは客観的な評価基準にも反映されるのでしょうか？論文はいくつかの評価方法を考察しました。
* **Signal-to-Distortion Ratio (SDR)**
音源分離手法の評価でよく使われるやつです。しかし、主観的な品質とSDRの数値は必ずしも連動しないようです。
音質が明らかに違うのにSDRがほぼ同じだったり、MSG処理で品質が良くなったのにSDRが逆に下がった、という例を挙げています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/eeb420fd-17bd-7579-30dd-b90b5e72cdc4.png)
* **Mean spectral rolloff error**
音源分離手法で問題になっていた、高域成分のノイズや欠損の程度を測るための基準です。
スペクトラム全体のエネルギーの98%を占める境界をspectral rolloffとします。上の図の白線がそれです。
正解音声との差を測ってみると、特に周波数域ベースの手法では差が顕著に縮まりました。**ボーカルパートも含めて**。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/f5f92146-ddc6-c4a9-b175-67ad21452640.png)
MSG処理によって高域の問題が緩和されるのは分かりましたが、やはり主観的評価とは一致していないですね。
* **Onset strength**
Librosaの`onset_strength()`関数を使い、オンセット検出の精度から分離結果が楽器のトランジェント（音の輪郭）をうまく復元できているか調べます。
オンセット検出のF1スコアを比較した結果、ベース・ドラムパートでスコアが向上し、ボーカルパートのスコアはOpenUnmixを除いてスコアが下がっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/a146f2be-d201-1344-1e66-f55bdc1f910b.png)
一行ごとに照らし合わせると怪しい所もありますが、これは主観的評価の結果と比較的一致している……と言ってもいいでしょう……たぶん。
著者はこの結果をもって、MSG処理によって音のトランジェントが改善したことが、主観的評価の向上に繋がったのではないか、と考察しています。

個人的には、GANを使うならもっと別のやり方もあるのでは？と思ったりもします。
例えば、単純に音源分離DNN学習の過程に識別器を加えてGAN学習を回すととどうなるのか、気になります。