LPCネットワークの検証に戻る。(i)1層あたりのパラメータを増やす, (ii)層数を増やす の2軸で様子見。 構成は全部LD法初期値から学習するものとする。(前回と(8, 8)の結果が違うのはモーメンタムに修正が入ったから)

パラメータ数/層数を変えたときの圧縮率
音源 \ 手法 ( 8) ( 16) ( 32) ( 64) ( 8, 8) ( 16, 16) ( 32, 32) ( 8, 8, 8) ( 16, 16, 16) ( 32, 32, 32) ( 8, 8, 8, 8) ( 16, 16, 16, 16) ( 32, 32, 32, 32) FLAC(-8)
薄紅先頭10sec 64.78 63.84 63.16 62.33 63.80 63.08 62.25 63.43 62.64 61.91 63.20 62.45 61.61 64.94
サマーマジック先頭10sec 58.75 57.73 56.94 56.44 57.74 56.87 56.19 57.33 56.53 55.90 57.10 56.34 55.67 57.72

パラメータ/層を増やせば増やすほど圧縮率は改善していく(注意:パラメータ領域は記録していない)。 Pythonで観察したように、全体の総パラメータ数が同一ならば、2層構成が一番良い。

じゃあ、具体的にコーデックに仕立てようか。プリエンファシス含め前段に何が良いのかを確定させる。LPCNetは(8,8)で固定、Pは固定プリエンファシス、OPは最適プリエンファシスとしてチェック。

前処理構成を変えたときの圧縮率
音源 \ 手法 ( P, P) ( P, OP) ( OP, P) ( OP, OP) ( OP, OP, OP) ( P, OP, OP) ( OP, OP, P)
薄紅先頭10sec 64.78 64.49 63.99 63.80 63.80 64.46 63.95
サマーマジック先頭10sec 58.52 58.18 57.96 57.74 57.79 58.21 58.11

これは、間違いなく最適プリエンファシス2段で確定かな。他にも、(OP, OP)で固定してさらにLPCNetの前にLPCを入れると性能が良くなることを見ている。その次数はいくつがいいか?見てみよう。

LPCNetの前に入れるLPCの次数による圧縮率
音源 \ 手法 2 4 8 16 32
薄紅先頭10sec 63.65 63.64 63.65 63.21 62.70
サマーマジック先頭10sec 57.67 57.54 57.51 57.20 56.88

次数を上げれば上げるほどよい。8であんまり改善しないのは、後段のLPCNetの1層目が1分割になることが多く、結果次数8が2連結になってしまい性能が上がりにくくなっていると考えられる。

LPCNetの前に入れるLPCもNetに取り込むべきではないかと考える。すると、層ごとのパラメータ数を変えるべきという発想に至る。 各層でパラメータ可変になるように対応した。2層がベストという観察だけど、LPCNet前のLPCも取り入れて3層で勝負してみる。つまり、プリエンファシス2段+LPCNet。悪ければ変える。

よし、汚くてもいいからコーデックに仕上げてみよう。出来上がり次第、CMakeでプロジェクトを作ってきれいに実装し、評価フェーズに入る。