2018年9月15日土曜日

tmuxの画面が固まったら

Windows Subsystem for Linux (WSL)のターミナルでtmuxを使っているときに、
ないしは、byobuのバックエンドでtmuxを使っているときに、
うっかり、SJISの文字コードを表示すると画面が固まります。

復旧するすべは分からないのですが、固まったウィンドウのみを削除することはできます。

表示が乱れるかもしれませんが、固まっているウィンドウを表示し、

 [prefix-key]→ & → y → [prefix-key] → d
を押します。ウィンドウをkillして、tmuxから抜けています。そして、再度、tmux (またはbyobu) に接続すると、固まっていたウィンドウがなくなっています。

または、固まっていないウィンドウに移動し、画面を正常にするために一旦 tmux から抜けて、再度接続し、そこで
$ tmux kill-window -t :[ウィンドウの番号]
を実行すると、固まったウィンドウを削除できます。tmuxバックエンドのbyobuでも同じです。

2018年9月4日火曜日

非可逆圧縮音声ファイルと非圧縮音声ファイルの自動判定

はじめに


人間の耳では感知しにくい、mp3による圧縮音声と非圧縮音声の違いをニューラルネットワークを使って判定できるか試してみます。

mp3とwavのスペクトログラムを下図のように比較すると、明らかに周波数の高い部分がmp3では消えているので、それを特徴として捉えられれば判定できそうです。

方法


Hennequinらの方法(Codec Independent Lossy Audio Compression Detection, 2017)を参考にしました。

今回の実験に使用したニューラルネットワークを以下に示します。 入力は、フレーム長(窓幅)を512サンプルとした対数パワースペクトルです。Nフレームつなげたものを画像とみなしてCNNで処理します。フレームシフトは256サンプルです。活性化関数は全てLeakyReLUです。

Conv2D     Nx256 32-channel
MaxPooling (N/2)x128 32-channel
Conv2D     (N/2)x128 16-channel
MaxPooling (N/4)x64 16-channel
Conv2D     (N/4)x64 16-channel
MaxPooling (N/8)x32 16-channel
Conv2D     (N/8)x32 16-channel
MaxPooling (N/16)x16 16-channel
Conv2D     (N/16)x16 16-channel
Flatten    (N/16)x16x16
Dense      64
Dropout
Dense      64
Dropout
Dense      2
Softmax(2-classes)

データ


訓練データは12曲で、先頭から曲の終端まで1000フレーム(5.8秒)ごとに1回、特徴ベクトルを抽出しました。 合計506個です。検証用データは15曲で特徴ベクトルは792個です。

結果


1エポック当り100ステップ、バッチサイズ4で50エポック訓練した結果、以下のようになりました。 N=1のみ3回実験しました。
NTrain-accValidation-acc
102410.968250
5120.9992500.955000
2560.9982500.902750
1280.9952500.933000
640.9935000.864750
320.9787500.925500
160.9815000.976750
80.9855000.972250
40.9800000.899500
20.9815000.889000
10.9750000.931500
10.9635000.956000
10.9547500.936250
Nが小さくても判定できています。僅か1フレームでも9割前後の精度がでています。 なお、MaxPooling層がない場合は訓練が進まず、精度がまったくでませんでした(0.5前後で運任せ)。

コード


https://bitbucket.org/bluewidz/mp3detect/src/default/ を参照ください。