Machine_learning_nursery_rhymes’s diary

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

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

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

データセットの見直し

改めて、ドキュメントのデータセットを見直しました。
①データセットCSV ファイルは、ヘッダを表す 1 行目と、データを表す 2 行目以降で構成されます。
②通常入力データには x、出力データには y を割り当てます。入出力が複数ある場合はそれぞれ x1、x2…、y1、y2…のように、x、y の後に数字を付加して区
別します。
③次元インデックスは、ベクトルの形をした変数である場合に、CSV の各列がベクトルの何次元目であるかを示します。次元インデックスは、変数名に続けて__(ダブルアンダースコア)と数字で表します。インデックスは 0 から始まり、例えば 10 次元のベクトルであれば 0~9 の値を取ります。

音声データの扱い

変数が波形データである場合は、各セルに波形データのファイル名を入力します。ファイル名には絶対パス、もしくはデータセット CSV ファイルからの相対パスを利用することができます。現在 Neural Network Console は拡張子が.wav であり、非圧縮(PCM)フォーマット、かつ 8bit もしくは 16bit の波形ファイルに対応しています。コアライブラリ内部において波形は各次元の要素数が(時間長,チャンネル数)である行列として扱われます。Neural Network Console において波形の振幅は、8bit 波形の場合は 1/128 倍、16bit 波形の場合は 1/32768 倍し、-1.0~1.0 の値として扱われます。
support.dl.sony.com

圧倒的にドキュメントが少ない感じがします。

ラベルを振りなおして再学習

f:id:Machine_learning_nursery_rhymes:20200925205507p:plain
f:id:Machine_learning_nursery_rhymes:20200925205513p:plain

yのラベルを0から振りなおして再学習すると、いつもの見慣れた混同行列になります。5日目で実行した1,2から0,1にしたんですがこのあたり、上記ドキュメントにも載っていないのでイマイチ分からない。混同行列で正解率が0.5を切っているので間違っている方が多いいことに。この方法はダメそうなので、新しいアノテーション方法を考えるか。

新しいラベル付け

Python, Janomeで日本語の形態素解析を使用してタグの頻度を算出してみました。テクノ、クラシックとか曲のジャンルで分けるか、ピアノ、シンセサイザー、ギターとか楽器で分けるのかどうしよう。何で分けても面白くはないな~

'ポップ': 3556, 'ジングル': 1480, '軽快': 1244, '映像': 1138, 'ロック': 1035, '楽しい': 960, 'CM': 925, '都会': 890, '的': 852, 'ゲーム': 847, 'フュージョン': 816, 'ギター': 814, '感': 788, 'バラード': 783, 'イベント': 755, 'さわやか': 744, '元気': 740, '明るい': 739, 'ピアノ': 726, 'シンセサイザー': 716, '情報': 715, 'ゆったり': 662, '優しい': 655, 'ドキュメント': 639, 'さ': 625, 'わくわく': 624, '映画': 619, '淡々': 605, 'ほのぼの': 595, 'テクノ': 582, '穏やか': 573, '希望': 553, 'ポップス': 549, 'おしゃれ': 549, 'ドラマ': 539, '爽やか': 536, '夜': 533, '哀愁': 530, 'クラシック': 526, 'アニメ': 519, '充実': 518, '店舗': 502, 'コミカル': 495, 'いきいき': 481, '環境': 465, 'ワールド': 460, '自然': 457, '思い出': 442, '上品': 440, '切ない': 439, 'エレキ': 439, '前進': 435, 'しっとり': 435, '感動': 433, '店内': 431, 'オープニング': 429, '挑戦': 429, 'リゾート': 407,
*一部抜粋


マンガでわかる! 音楽理論

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

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

学習方法の変更!

f:id:Machine_learning_nursery_rhymes:20200924200802p:plain

2回目のアノテーションでは当初7つに分けていたものの、正負が最大になっている群で学習させてみることにしました。前回、タグで正負つかなかったものを0で埋めたのが失敗だと仮定しました。

学習結果

f:id:Machine_learning_nursery_rhymes:20200924201027p:plain

50epoch

TrainingとValidationの差が大きい場合(過学習)は、モデルがTraining Dataに特化し過ぎた状態になりますが、今回は良い感じでしょうか。


f:id:Machine_learning_nursery_rhymes:20200924201459p:plain

検証用データに対する統計的な評価指標と混同行列できます。Accracyが0.5662なので、半分正解。2分の1なのでコインの裏表みたいなもんに(´;ω;`)。

Accuracy: 全データの内、正答した数の割合
Precision:予測を正と判断した中で、答えも正のものである割合
Recall:答えが正の中で、予測が正とされた割合
F-Measure: PrecisionとRecallの調和平均

詳細はこちら

【疑問】
2値分類を目指していたんですが、この表をみるとy=0からあるので、ラベルは0からつける必要があるの?
学習の収束はよさそうなのにこんなに正解率が低いの?

次回やること

①ラベル付けを1,2から0,1に変更する。
フーリエ変換をする。

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

1日目はこちら
2日目はこちら
3日目はこちら

実際の学習

初めてデータ作成から学習・評価まで通貫で実施しました。試しに10epoch試してみました。
10epochで少ないのが収束の気配なく…評価もさんざん。失敗は成功の元ということで、
次回につなげよう。

【学習結果】
f:id:Machine_learning_nursery_rhymes:20200923205250p:plain

【評価結果】
f:id:Machine_learning_nursery_rhymes:20200923205632p:plain

評価結果の確率も0.15前後で全部一緒になってしまった。

GPUを使った感想

ソニーの紹介でもケースバイケースですが9倍以上になるということで、実際CPUと比較し、
GPUは圧倒的に早いです。今回の学習はNVIDIA® Tesla® K80 GPUで¥103 used使用しました。
GPU00:01:10:23。CPUだと1時間で1epochもいかんかった~
f:id:Machine_learning_nursery_rhymes:20200923205951p:plain

次回の展望

アノテーション方法の変更
フーリエ変換

Pythonで学ぶフーリエ解析と信号処理

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

1日目はこちら
2日目はこちら

データセット作成

初めてのデータセット作成ということでかなり苦戦しました。
Neural Network Consoleのデスクトップ版には画像分類データセット作成ツールがありますが、他のデータセットの作成の仕方が分かりませんでした。

f:id:Machine_learning_nursery_rhymes:20200920171031p:plain
*画像ではフォルダがごとに振り分けしていたら自動でtrain、testを作成してもらえます。メッチャ、便利そうです。今回は使えません。

クラウド版ではデータセットアップロードツールを使用します。このあたりが初見者殺しだと思います。私の脳みそが足りないだけかもしれませんが、
ここからデータセットを作成するところが苦戦しました。

データセットアップロードツールの使い方 – Docs - Neural Network Console

添付したリンクのツールを使い、同一ファルダに音声データ、xに音声データ名、yに種類分けした1~7を記したcsvを格納しアップロードします。その際に、train、valで分けてアップロードしないとダメなようです。データセットクラウド内で分割とかできないと不便です。今回、再度分割してアップロードする気が失せてしまったので全てで学習させることにします。

音声データ編

f:id:Machine_learning_nursery_rhymes:20200920171915p:plain

今回、初めて音声データを扱うためNNCの使い方の上記ページを参考にします。必要な情報は音声データの時間、サンプリングレート、モノラルかステレオかの3つの情報です。
音声データは24秒とすぐわかりました。サンプリングレートはiTunesで8.000kHzと分かりましたので24×8000=192000のモノラルということが
分かりました。
↓このあたりを読んで納得しました。
サンプリングレート・サンプリング周波数|Web会議・テレビ会議システムならLiveOn(ライブオン)

学習推論編

f:id:Machine_learning_nursery_rhymes:20200920172703p:plain

まずはサンプル構成でトライしてみました。cpuで10エポック回してみます。







30分で1/10エポックの50%しか学習が進まない。一旦やめて、gpuを申請することにします。

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

前回の記事はこちら

テーマ設定2

本日も引き続き、テーマ設定を試行錯誤していきます。与えられている音声データには一行説明とタグ情報が付属しています。
そこでタグ情報を使って気分が良くなる楽曲を抽出し一先ず形態素解析を実施していきます。

手順

コピペ初心者なので上記リンクサイトを参考に今回抽出した楽曲のタグについて単語感情極性対応表にそって点数を振りました。
*1参考サイト

1)結果・・・・形態素解析した結果は以下の通りになります。

シンセサイザー 名詞,一般,*,*,*,*,シンセサイザー,シンセサイザー,シンセサイザー
日常  名詞,一般,*,*,*,*,日常,ニチジョウ,ニチジョー
大人  名詞,一般,*,*,*,*,大人,オトナ,オトナ
ムード 名詞,一般,*,*,*,*,ムード,ムード,ムード
ドラマ 名詞,一般,*,*,*,*,ドラマ,ドラマ,ドラマ

形態素解析した結果を、感情極性対応表にそって点数をつけていきます。

2)結果 点数が付いたものがこんな感じ!
[シンセサイザー,日常,大人,ムード,ドラマ]
[-0.395559, -0.757641, -0.960539, -0.174015, -0.188471]


3)結果 この点数のつけ方はイマイチピンときませんね。この点数を平均化し、欠損値は0で埋めました。以下はそれをヒストグラムにし[-1.0, -0.568]、[0.0278, 1.0] をネガティブ、ポジディブとします。

f:id:Machine_learning_nursery_rhymes:20200920093115p:plain

さて、ラベリングまで出来たら次はデータセット作りたい。

ソニー開発のNeural Network Console入門【増補改訂・クラウド対応版】--数式なし、コーディングなしのディープラーニング
はじめての「SonyNNC」 (I・O BOOKS)

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

はじめに

企業データを用いてディープラーニングに挑むSonyとレッジが企画するAI開発コンテスト「Neural Network Console Challenge」が応募期間 2020.09.16 WED ~ 2020.10.19 MONで開催されています。

今回のテーマは、Neural Network Console を用いて、Audiostockの音声(BGM)データを解析し🅰の指定テーマまたは🅱の自由テーマを選んでご応募します。
(学習用データ提供:Audiostock)
★Aテーマ
AudiostockのBGM検索の自動分類アルゴリズムを作り出す
★Bテーマ
自由な発想で音声データを解析する

Neural Network Consoleのダウンロード

Neural Network Consoleのセットアップからサンプルプロジェクトの実行まで実施したことがなかったので、Windows版で練習、クラウド版を本番として実施しました。

【環境】
Windows
プロセッサ:intel(R) Core(TM)i7-8750H
実装メモリ(RAM):32GB
GPUNVIDIA GeForce RTX2070

Windows版で2点躓いたので記載しました。
①利用開始時のオンライン認証時にエラーが表示する。
Windows版Version 1.80でのエラーについて – Blog - Neural Network Console

f:id:Machine_learning_nursery_rhymes:20200919105129p:plain

Visual Studio 2015 の Visual C++ 再頒布可能パッケージが上手く認識しない。最新のVisual C++ 2019を入れることで解決しました。

サンプルセットを使用し使い方の確認

今回、初めてNeural Network Consoleを使用するので、まずはサンプルセットで体験してみます。

GPUについてもドライバーが最新であれば、CUDAなど入れず使えるということで、mini_dcgan.sdcprojのプロジェクトを使用し、数字をGANで生成してみました。

★データセット
f:id:Machine_learning_nursery_rhymes:20200919110443p:plain
X:image、y:labelから新しい数字を生成します。

★生成結果
sigmoiで新たな数値が生成されています。6万枚のデータを100エポック、64バッチサイズで学習させて30分程度でした。GPUについても15%程度の稼働になっています。
f:id:Machine_learning_nursery_rhymes:20200919110850p:plain

pythonを使わずここまで手軽にできるのは便利で凄いです。もう少し触りながらテーマを考えていきます。

テーマ設定

今回の学習データはAudiostockの提供する音声(BGM)データ 約10,000点とタグ付けと説明のみ。
アノテーションすることでmy 分類機を作るのかGANを使って新しい音楽を作ってみるか

AI実装検定【S級】の出題範囲を勉強教材にしてみよう 1日目

2020年9月7日の公式サイトにてAI実装検定【S級】第1回試験のエントリー開始が始まりました。

①級の内容

AIの実装力だけでなく画像処理をメインとした実践的な力と、自然言語処理や有名モデルの実装などの応用的な実装に対しても挑戦できるレベルです。
また、現在AI資格試験の最高峰であるE資格(日本ディープラーニング協会主催)に比べるとカバーする範囲は狭いですが、各項目で求められる実装レベルは同程度です。
E資格の中間目標又はE資格後の実践的な力を試すことが出来る目標としても活用いただけます。
各級の紹介 | AI実装検定

紹介内容を見ると、E資格を意識しつつ勉強できるように内容になっていそうです。

②試験範囲

ディープラーニング 20題
ディープラーニング∞Cheat」よりNLPと主要なMODELについて下記範囲を出題(2020#1)
画像処理 30題
「画像処理100本ノック」1-100問よりPythonによる実装を出題

この検定、出題範囲が割と他力本願な気もしますが、勉強はしやすそうです。まずは毎週、「画像処理100本ノック」を説いていくことにします。

③「画像処理100本ノック」1-100問

Q.1 チャネル入れ替え
画像を読み込み、RGBをBGRの順に入れ替えよ。

1つの画素の色を、R(赤)、G(緑)、B(青)の3原色を混ぜ合わせて表現し、RGBカラー画像という。
RGBカラー画像では、R, G, Bそれぞれの濃度を256階調(0~255 = 8bit)で表します。画像の形状は img.shape によって取得行数でき、行数,列数,チャンネル数(RGBデータ).

0番目が赤(Red)のデータ
1番目が緑(Green)のデータ
2番目が青(Blue)のデータ


def BGR2RGB(img):
b = img[:, :, 0].copy()
g = img[:, :, 1].copy()
r = img[:, :, 2].copy()

# RGB > BGR
img[:, :, 0] = r
img[:, :, 1] = g
img[:, :, 2] = b

return img

この関数だと、各色をコピーして、入れ替えて上書きしているようです。初めて勉強すると10個やるのも時間かかるな


Python実践データ分析100本ノック