実験記録 7a184ccb
StarGAN (Conditional GAN) の実装にあたって、Discriminator にクラス分類できるだけの表現力があることを予め示したい。
以前の実験では、話者を分類する能力が著しく低かったため、それを改善することが目標になる。
モデル
graph TD
input("«Input»<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("«Output»<br/>Speaker<br/>1421")
y_birth("«Output»<br/>BirthPlace<br/>53")
y_sex("«Output»<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 に準じた形のネットワークを確認する。