の自由帳

実験記録 7a184ccb

StarGAN (Conditional GAN) の実装にあたって、Discriminator にクラス分類できるだけの表現力があることを予め示したい。

以前の実験では、話者を分類する能力が著しく低かったため、それを改善することが目標になる。

モデル

graph TD

input("&laquo;Input&raquo;<br/>Spectrogram<br/>1 x 256 x 256<br/>[0, 1]")
conv1[Convolution<br/>ch: 64, ksize: 3, stride: 1, padding: 1<br/>BatchNormalization<br/>ReakyReLU]
conv2[Convolution<br/>ch: 64, ksize: 4, stride: 2, padding: 1<br/>BatchNormalization<br/>ReakyReLU]
conv3[Convolution<br/>ch: 128, ksize: 4, stride: 2, padding: 1<br/>BatchNormalization<br/>ReakyReLU]
conv4[Convolution<br/>ch: 256, ksize: 4, stride: 2, padding: 1<br/>BatchNormalization<br/>ReakyReLU]
conv5[Convolution<br/>ch: 512, ksize: 4, stride: 2, padding: 1<br/>BatchNormalization<br/>ReakyReLU]
conv6[Convolution<br/>ch: 1024, ksize: 4, stride: 2, padding: 1<br/>BatchNormalization<br/>ReakyReLU]

subgraph Output
    h("512 x 8 x 8")
    clz_speaker[Convolution<br/>ch: 1421, ksize: 3, stride: 1, padding: 1<br/>BatchNormalization<br/>ReakyReLU]
    clz_birth[Convolution<br/>ch: 53, ksize: 3, stride: 1, padding: 1<br/>BatchNormalization<br/>ReakyReLU]
    clz_sex[Convolution<br/>ch: 2, ksize: 3, stride: 1, padding: 1<br/>BatchNormalization<br/>ReakyReLU]

    gap_speaker[global average pooling<br/>softmax]
    gap_birth[global average pooling<br/>softmax]
    gap_sex[global average pooling<br/>softmax]

    y_speaker("&laquo;Output&raquo;<br/>Speaker<br/>1421")
    y_birth("&laquo;Output&raquo;<br/>BirthPlace<br/>53")
    y_sex("&laquo;Output&raquo;<br/>Sex<br/>2")
end

input --> conv1
conv1 --> |64 x 256 x 256| conv2
conv2 --> |128 x 128 x 128| conv3
conv3 --> |256 x 64 x 64| conv4
conv4 --> |512 x 32 x 32| conv5
conv5 --> |1024 x 16 x 16| conv6
conv6 --> h

h --> clz_speaker
clz_speaker --> gap_speaker
gap_speaker --> y_speaker
h --> clz_birth
clz_birth --> gap_birth
gap_birth --> y_birth
h --> clz_sex
clz_sex --> gap_sex
gap_sex --> y_sex

入力

スペクトログラム

16000 Hz の モノラル音声を、1024 サンプルを 512 サンプルずつ重なるように 256 サンプリングする。 その後、hamming 窓を掛け、FFT して結果の絶対値を得て、freq=0 を除いた 256 を使用する。(8000 Hz で LP フィルタをかけたのと同じ働きをする。)

ラベル

発話者(1421クラス)、発話者の生まれた地域(53クラス)、性別(2クラス)の三種類。

すべてのデータが、完全にラベルが振られているとは限らない。

学習

optimizer: RMSprop

learning rate: 1e-5

minibatch size: 10

epoch: 1000

結果

学習時間: 15.96 時間

話者分類の精度は 0.4 程度まで改善できた。このまま引き続き 1000 epoch ほど学習すれば 0.5 程度まではたどり着けると推測できる。

感想

もう少し精度のあるネットワークがほしい。

次回は StarGAN の論文の Discriminator に準じた形のネットワークを確認する。