Machine_learning_nursery_rhymes’s diary

仕事の種を模索するため、今まで逃げていた統計・データを勉強していく

消防設備士甲種4を次回受けよう

f:id:Machine_learning_nursery_rhymes:20210327161042p:plain

頭の体操に消防設備士甲種4を受けようと考えています。
科目免除などもあるので調べているんですが、電気工事士を持っていると、電気関係の10問+12問は免除になるようです。

3時間15分のテストが2時間30分になると、筆記試消防法、電気の基礎知識、規格・構造の3科目で最低合格点数が40点験以上で合計が180点以上であれば合格。 筆記試験が合格すると実施されていた鑑定と製図試験の試験が採点され60以上であれば消防設備士甲種4類試験が合格。

・・・・科目4割、合計で6割か。免除されることで配分が重くなるのはマイナスですが、まあいっか。

直近でいつ受けれるのか探すと、神奈川は5月以降の試験は 試験会場が未定のため、決定次第ホームページでお知らせいたします。
東京は、令和3年6月5日(土)試験で、4/8〜4/19で書面申請との事、免除資格者は最初は書面で受けないといけないのか。

まずは、都内の消防署に行きますかね。

わかりやすい! 第4類消防設備士試験 【大改訂第3版】 (国家・資格シリーズ 184)

pandasでのデータ可視化メモ

df.plot(引数)

【折れ線でよく使う引数】
引数y: y軸の変数指定
引数x: x軸の変数指定
引数figsize: サイズ(tuple型で指定)
引数subplots: サブプロットをするかどうか(True もしくはFalse)
引数layout: サブプロットの行数、列数の指定
引数sharex: x軸の範囲の共有可否(True もしくはFalse)
引数sharey: y軸の範囲の共有可否(True もしくはFalse)
引数title: グラフタイトル
引数grid: グリッドの有無(True もしくはFalse)
引数colormap: 色(色の名前もしくはカラーコードを指定)
引数legend: 凡例の有無(True もしくはFalse)
引数alpha: 透過率(0〜1で1が濃く、0が薄い)

*サブプロットする際に、X,Y軸の共有が便利。
pandas.pydata.org

使うとき、引数がアレって思うからメモらないと忘れてしまう。

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理

音声検知モデル学習にあたっての備忘録メモ

import librosa

load関数は音声データ(1次元のNumPy浮動小数点配列)とサンプリングレートという2つの値を返します。サンプリングレートはオーディオの秒当たりのサンプルの数です。デフォルトでは、すべてのオーディオはモノラルにミキシングされ、ロード時に22050Hzにリサンプリングされます。
Tutorial — librosa 0.8.0 documentation

秒数 = データ数/サンプリングレート

描写の仕方

import matplotlib.pyplot as plt
y, sr = librosa.load('ファイル')
plt.plot(y)
plt.show()

音声の特徴

音声データの振幅は正の値と負の値をとり、平均値を計算すると0なる。音声データでは、振幅を2乗した値の平均値の平方根を平均振幅とする。

librosa.zero_crossings(y、threshold = 1e-10、ref_magnitude = None、pad = True、zero_pos = True、axis = -1)

librosa.zero_crossings — librosa 0.8.0 documentation
yが多次元の場合、指定されaxisに沿ってゼロクロス数(正負の交差点)が計算される。

下記の本を読んでみたいけど、高い。NO MONEY

検索用キーワード

パワースペクトル
音のグラフの縦軸を「音圧レベル」に、横軸を「周波数」に取り直すことをさします。
パワースペクトル - 「音」とはそもそも何だろうか!? - Cute.Guides at 九州大学 Kyushu University

・メルスペクトログラム
librosa.feature.melspectrogram(X)

・メルスペクトログラムからデシベル(dB)
librosa.amplitude_to_db(X)


異常検知と変化検知 (機械学習プロフェッショナルシリーズ)

Neural Network Console Challenge ~~音楽ジャンルで分類~

Neural Network Consoleを用いてAudiostockの音声(BGM)データを解析

企業データを用いてディープラーニングに挑むSonyとレッジが企画するAI開発コンテスト第2弾になります。第1弾は画像分類がテーマに今回は音声データ解析がテーマになります。
nnc-challenge.com
学習用データ提供:Audiostock

選んだテーマは、A「AudiostockのBGM検索の自動分類アルゴリズムを作り出す」にしました。与えられた音声データと、説明、タグを使用しテキストマイニング実施することで、いくつかの分類データを作成し学習させた中で一番精度の良かったモデルを検証していきます。

NNの使い方とインストールについて

Neural Network Consoleはディープラーニングをノンプログラミングで使用できるアプリでクラウド版、Windowsアプリ版の2種類があります。今回、推論用GPU、学習用GPU共に有料サービスですが、本コンテスト参加者の方(希望者のみ)には1万円分(合算)の無料枠を使用できます。今回は、クラウド版をメインで使用しました。
実際、Windowsアプリ版で学習データとNNW構成を考えて、クラウド版を合わせて活用すると便利だと感じました。

アノテーション

今回、楽曲のタグを利用し三種類の分類データを作成し学習・推論させます。

(1)感情による分類

単語感情極性対応表を利用してタグのpositive・negativeを数値化しました。-1に近いほどnegative、+1に近いほどpositiveに分けていきます。タグの単語の下記の表に沿って点数をつけ平均化しbin分けました。上位、下位の1500の音声データを使用し、positive、negativeな曲分類を作成しました。

〇単語感情極性対応表(例)
優れる:すぐれる:動詞:1
良い:よい:形容詞:0.999995
喜ぶ:よろこぶ:動詞:0.999979
褒める:ほめる:動詞:0.999979
めでたい:めでたい:形容詞:0.999645
~~~~
ない:ない:助動詞:-0.999997
酷い:ひどい:形容詞:-0.999997
病気:びょうき:名詞:-0.999998
死ぬ:しぬ:動詞:-0.999999
悪い:わるい:形容詞:-1
*1

図1では1曲当たりの平均化された数値をヒストグラムにしています。positive・negativeに特化した曲数はあまりありませんでした。点数が付かなかった曲はゼロとしました。
f:id:Machine_learning_nursery_rhymes:20200924200802p:plain
図1.Happy 分類

(2)音楽ジャンルで分類

(1)と同様に、タグに対してテキストマイニングを実施し、頻出単語を調べました。その中で私が聞いても違いが分かった、"ロック", "フュージョン","バラード","ポップス","クラシック"の5種類の分類機を作成しました。

(3)楽器で分類

(2)と同様に"ピアノ", "シンセサイザー","ギター","エレキ"で
楽器による音色に違いがあると考え、テキストマイニングで上位に挙がってきた楽器について4種類に分類わけしました。
f:id:Machine_learning_nursery_rhymes:20200928190250p:plain
図2.楽器イメージ

"学習とネットワーク設定

まずは、音声解析を実施したことがないので、サンプルプロジェクト(wav_keyboard_sound)を利用してNNWを構成しました。10層のコンボリューションと1個の結合層で学習していきます。
f:id:Machine_learning_nursery_rhymes:20200929075849p:plain
図3.学習用NNW

結果

やってみた結果、すべてのモデルで正解率が0.5を切っており、あてずっぽより精度が低かったです。
f:id:Machine_learning_nursery_rhymes:20200929123013p:plain
表1.学習結果正解率

(1)例として、図4は感情による分類になります。学習に2811曲使用しgpuを使用し10分程度で終わりました。VALIDATION ERRORは20エポック以降、過学習ぎみになっています。
f:id:Machine_learning_nursery_rhymes:20200925205507p:plain
図4.感情による分類の学習率

改良(ネットワーク設計)を見直しました。

11層のコンボリューションに変更し、Afine手前のプーリング処理をMaxPoolingにしました。また、構造探索できるツールをUNITに追加し、より細かいパラメータで探索できるようにしました。
最後に、Dropoutを入れることで、複数の異なるネットワークの多数決に近いアンサンブル学習し近いことができるようになっているはずです。認識違い等があればすいません。
詳しくは過去の記事を参照f:id:Machine_learning_nursery_rhymes:20200929124831p:plain
図5.再構成したニューラルネットワーク

再学習

今回、(1)~(3)の中で一番精度が向上した(2)音楽ジャンルで分類について考察していきます。学習に3000曲使用し、検証用に676曲使用しました。
f:id:Machine_learning_nursery_rhymes:20200928150639p:plain
図6.音楽ジャンル分類の学習率

f:id:Machine_learning_nursery_rhymes:20200929192346p:plain
図7.Confusion Matrix

Precison(実際に正解だった率)を見ると、y'__3("ポップス")が0.5と低いです。"ポップス"って自分自身聞いても、ポピュラーソング、またはポピュラー音楽なんで定義が曖昧でした。併せて、Recallでも0.3475と低くなっています。

結論としては"ポップス"が予測できていないことが分かりました。”ポップス”について、除いたら全体的に精度は向上すると考え、アノテーションを修正しました。

改良(アノテーション)/再学習

再学習した結果より、"ポップス"を除いた、"ロック", "フュージョン","バラード","クラシック"の4ジャンルで再度学習させました。学習の際は重みづけを前回と同様にして実施します。

学習結果からRe-editを使うと、選択中の学習/評価のネットワークの重み付きで再学習することができます。
f:id:Machine_learning_nursery_rhymes:20200929215628p:plain
図8.Re-edit画面

f:id:Machine_learning_nursery_rhymes:20200929220012p:plain
図9.再学習結果

図9、図7を比較しPrecisonが大幅に向上し、Accuracyが0.7703まで向上しました。

分類の一つ一つの間違いについて確認しました。y:labelは正解ラベルで、"y'__0:ロック", "y'__1:フュージョン","y'__2:バラード","y'__3:クラシック"の中で、確率になっています。データセットを作成する際に、xの名前がラベリングしなおされているようなので、曲を探すとき分かりづらかったです。
f:id:Machine_learning_nursery_rhymes:20200930221608p:plain

推論

Neural Network Consoleで作成した学習済みモデルをAPIで公開することで、ユーザは推論の実行をAPI経由で行うことが可能でEVALUATIONでタブのPublish APIを使用すると、リクエスト数課金、インスタンス占有の2種類が選べます。
今回は、wavなどの音楽形式のデータのためインスタンス占有タイプのみになります。起動時間をAlwaysかScheduleで選べました。
〇詳しくはコチラ
【金額】
・CPUインスタンス :85円/時間
GPUインスタンス :560円/時間
f:id:Machine_learning_nursery_rhymes:20200930221738p:plain

推論は、python3を使用し、outputsに実行結果にはoutputsに出力レイヤーの名称と確率が返ってきます。こちらを使用することで、音楽ジャンル分類機が完成しました。

{"version": "20201001_022242346291", "outputs": [{"name": "y'", "data": "0.0480295866727829, 0.941403329372406, 0.010470078326761723, 9.703217074275017e-05, 4.2797791977022825e-09"}]}

インスタを立ち上げると、URLとKeyが確認でき、Publicをonにすると使用が始まります。
f:id:Machine_learning_nursery_rhymes:20201001131236p:plain

インスタの使用回数は横の画面で時間とcountが分かります。
f:id:Machine_learning_nursery_rhymes:20201001131414p:plain

まとめ

今回、初めてNeural Network Consoleを扱いましたが、一部Start TimeがUT時間で分かりにくかったり、データセットの作り方で苦戦しましたが、ドキュメントや公式のYouTubeなどが豊富にありCNN構造の勉強はしやすく面白かったです。

初心者でもアノテーションをしっかりすれば、2週間程度で精度がある程度出るモデルが作成できました。より、深い層にするなどでさらなる精度向上が望めるのではないかと思います。

*1:引用文献PN Table

Neural Network Console Challenge~Audiostockの音声(BGM)データを解析~ 9日目

"ロック", "フュージョン","バラード","ポップス","クラシック"の分類

精度向上の取り組み①

波形の位置を考慮した認識の場合と、位置を平均化した場合とでAfine手前のプーリング処理を変える必要があるとのことでした。今回、音楽ジャンル分けということでリズムについては平均の方が良いのかと思いました。

(1)MaxPooling
f:id:Machine_learning_nursery_rhymes:20200928144727p:plain

(2)Global Average Pooling
f:id:Machine_learning_nursery_rhymes:20200928144837p:plain
*1

精度向上の取り組み②

Dropoutを入れることで、複数の異なるネットワークの多数決に近いアンサンブル学習し近いことができる。

f:id:Machine_learning_nursery_rhymes:20200928145355p:plain
*2

精度向上の取り組み③

探索箇所を限定しての探索や複雑なネットワーク全体を
探索できます。使うことで、何回もtrainingが走るのでGPUの消費が結構ありました。

今回の構造

11層のコンボリューション用いたNNWになっており、
精度取り組み①~③まで反映しています。

f:id:Machine_learning_nursery_rhymes:20200928150241p:plain

結果

精度が0.65まで向上しました。初めてやった時が0.47だったのでNNWを見直せばももう少し精度向上が望めるのではないかと思ってます。構造探索でよかったパラメータを踏襲しつつもう少し精度向上を図っていきます。

f:id:Machine_learning_nursery_rhymes:20200928150639p:plain

f:id:Machine_learning_nursery_rhymes:20200928150652p:plain


Pythonで儲かるAIをつくる

Neural Network Console Challenge~Audiostockの音声(BGM)データを解析~ 8日目

Neural Network Console Challenge~Audiostockの音声(BGM)データを解析~ 8日目は
インプットの時間に当ててドキュメントを読んでます。

ニューラルネットワークの勉強


実践Deep Learning:波形データの分類と回帰

教師データの作成で精度が向上しないので、ニューラルネットの構造を変更することで精度を上げられないか検討します。音声データと、波形データでは次元の数が異なっており、(64,3)のものを、(3,64)にTransposeして(3,1,64)の次元にReshapeすれば画像データと同じようにCNNを使用できるとのこと。この形を基本にまずは、簡単なCNNを組んでみようかな。

見本では10層の畳み込みニューラルネットワークで構成していました。


音声認識 (機械学習プロフェッショナルシリーズ)

Neural Network Console Challenge~Audiostockの音声(BGM)データを解析~ 7日目

1日目はこちら
2日目はこちら
3日目はこちら
4日目はこちら
5日目はこちら
6日はこちら

音楽ジャンルで学習データ作成

①今回は以下のジャンルで分けてみました。
"ロック", "フュージョン","バラード","ポップス","クラシック"

みんな曲調が違うかなと思いましたが精度が出ない!!。

f:id:Machine_learning_nursery_rhymes:20200926114644p:plain

②次は使っている楽器で分けてました。
"ピアノ", "シンセサイザー","ギター","エレキ"

f:id:Machine_learning_nursery_rhymes:20200926134440p:plain

うん、、、、これってどうやったら精度が上がるんだろうな。

Pythonで儲かるAIをつくる