見出し画像

【Kaggle紹介】生き物の声を聞き分けろ!音声検出で森の希少種を守る

ESTYLEのデータサイエンス事業部新入社員の赤井です。

入社時に研修の一環としてKaggleコンペに挑戦しましたので、これから機械学習を学ぶ方は是非読んでみてください!

なお記事は前半と後半で分かれています。後半は実装を含む内容が書かれているので興味がある方は後半部分もぜひお読み下さい!

Kaggleとは?

データサイエンティストのための大会が行われているサイトのこと

Kaggleの読み方は「カグル」で、Kaggleに参加している方を「カグラー」と呼びます。Kaggleでは一体何が行われているのでしょうか。

簡単に申し上げますと、Kaggleでは企業や政府がコンペ形式で課題とデータを提示し、データサイエンティスト達は課題を解決するためのAIモデルを作成しています。課題に対して良いスコアを得られたチームに対して賞金が支払われるコンペもあります。

初学者にはハードルが高いと思われますが、Kaggleにはとっても便利な「Discussion」という機能があり、世界中のデータサイエンティスト達と交流を深め、時には現場で働いている方々とグループを組むことができます!そこには最先端の知識・知恵が集まっているので、どんな質問でも他のデータサイエンティスト達が答えてくれます。

ということは・・・

Kaggleは初学者にとって最高の「学びの場」になるのです!

コンペ概要

音声データを26種類の生物の鳴き声に分類する

今回挑戦したKaggleのコンペは「Rainforest Connection Species Audio Detection」[1]です。

スクリーンショット 2021-07-15 14.31.02

Rainforest Connectionという会社が各国の森にいる生き物の鳴き声のデータをKaggle上で公開していますので、そのデータを元に26種類の生物の鳴き声を正確に判別するといった内容になります。

問題の種類としては音声データの「多値分類」に入りますので、興味の湧いた方は「音声の多値分類」や「音声の多クラス分類」などで検索してみてください。

さて、我々はただひたすらモデルを作りスコアを競っていくわけですが、Rainforest Connection社は精度の良いモデルを使って何をしたいのでしょうか。

・・・一体彼らの目的はなんなんだ・・・

そう思いながら調べてみると、彼らの最終目標はコンペで上位に入賞した予測モデルを元に自動判別ソフトを作り、森にいる生物の品種数の増減をリアルタイムで測ることで環境保全に生かすことだと分かりました!

与えられたデータについて

注意点:正解ラベルも偽陽性ラベルも専門家が人力で付与している(そのため所々ミスがある)

ここからは少し難しくなりますが、なるべく丁寧に書きたいと思います。

提供されたデータ概要:
• 真陽性の種のラベルの学習データ
• 偽陽性の種のラベルの学習データ
• 学習データ(4727レコード。音声データ。)*1
• テストデータ(1992レコード。音声データ。)*2
• tfrecords/{train,test}*3

*1,2 学習データ/テストデータは1サンプル60秒,データ1つあたり1~3種類の生き物の鳴き声を含む
*3 TensorFlowの推奨するデータフォーマットなので、TensorFlowを使用する場合はこちらの方が早くデータ処理を行えます!今回はPytorchを扱うので使用しません。

スクリーンショット 2021-07-15 14.34.06

主催者が投稿した記事[2]によると、学習データではまず「初歩的なアルゴリズムを通して音声内の鳴き声部分を上の図のように白いボックスごとに抽出」します。次に「生物の鳴き声に詳しい専門家が2パターンにラベル付け」するのです。その2パターンは「①アルゴリズムが正しい場合の真陽性ラベル」と「②間違っている場合の偽陽性ラベル」です。これらはcsvファイルで与えられています。

このことを理解した上でさらに大事なことは、果たして最初に使われた初歩的なアルゴリズムが正確なのかどうかということです。KaggleのDiscussion[3]を見る限り鳴き声が実際鳴っているのにも関わらず、かなり高い確率でラベルがない状態になっていることが分かります。つまり、アルゴリズムが鳴き声をスルーしてしまっていたのです。そのため、アルゴリズムが見逃したラベルを見つける必要があります。

まずは学習データを画像認識モデルに通すことでラベルを付け直し「適切なラベリングがなされた学習データ」にします。その上で、「適切なラベリングがなされた学習データ」をモデルに学習させることで精度を高めることができるのです!

最後にテストデータを使って生物の種類を予測し、そのデータをcsvファイルに変換した上でKaggleにアップロードすることで自分のスコアが得られます!実際にはこの工程は一回きりではなく、何回か繰り返してスコアを高めていきます。

学習の流れ

音波データを画像データに変換し画像分類問題にする
私の作戦第一号は、音波の波形をそのまま学習するではなく画像に変換し画像分類問題にすることです!

理由としては波形をそのまま学習すると、大量のデータを要することになるからです。そして、今までのKaggleの音声分類問題ではこの手法がスタンダードなものとして使われてきました。

2016年から最初の音声分類問題がKaggleに出現しているのですが、そちらについてはこの論文[4]が参考になるのでぜひ時間があればゆっくり読んでみてください。英語ですが図を見るだけでも多少理解が深まると思います。

実装手順:①音声処理→②画像処理→③モデルに学習させる
今回採用した大まかな全体の流れとしては、以下の図の通りです。

スクリーンショット 2021-07-15 14.40.01

EfficientNet図の引用元[5]

音声処理ではまずノイズを調整したりピッチを変えたりするタイムシフトといった処理を行います。次に音声データをメルスペクトログラムという画像データに変換します。

画像処理では、最初に正規化するためにノイズ(Gaussian Noise)を加えます。全ての画像に共通した効果を与えることで、モデルに学習しやすくさせるのです!その後に鳴き声が鳴っている箇所の画像を切り取ります。

最後にEfficientNetと呼ばれるGoogleが開発した機械学習のいわゆる「アーキテクチャ」に画像を通すことで学習を行います。「アーキテクチャ」とはいわゆるモデルの型のことです!こちらのモデルは非常に優秀で主に画像認識の分野で使われているものです。もう少し知りたければ、こちらのサイト[6]をご参照ください。

実際にはさらに複雑な工程を踏むので、そちらについては後半の実装記事をご覧ください。

次回予告!

音声処理、画像処理、モデリングの実装コードを掲載!

今回はコンペについてや学習の流れについてお伝えしましたが、次回は音声処理、画像処理、そしてモデリングを実装とともに紹介していきますので乞うご期待下さい!

最後に次回のポイントを一足早くお伝えします。

機械学習において最も大事なことは、質のいい「特徴量」を作ることです!

音声分析ではそれを最も可能にする方法が音声をメルスペクトログラム(X軸:時間, Y軸:周波数)と呼ばれるグラフに変換することです。

人間が目で見て画像や音声の特徴を調整できる状態にすることで、音声処理や画像処理が簡単になります。

下の画像をご覧ください。こちらがメルスペクトログラムになります。

スクリーンショット 2021-07-15 14.45.06

二つの画像は同じ音声ファイルですが、メルスペクトログラムを目で見ながらホワイトノイズやピンクノイズを足したり、ピッチシフト、ボリュームコントロール、タイムシフトを通したりする処理を施しました。ご覧の通りおよそ1024Hzから1500Hzの帯域と3000Hzから4096Hzの形が鮮明になりました!実際にはこのままだと過学習の恐れがあるのでここからさらに処理を施す必要があります。
次の記事では私が行った音声や画像の処理について説明をしていきます!

リンク

[1]Kaggleコンペ(Rain forest)概要ページ
https://www.kaggle.com/c/rfcx-species-audio-detection
[2]Kaggle Discussion:正解ラベルと偽陽性ラベルについてhttps://www.kaggle.com/c/rfcx-species-audio-detection/discussion/197866
[3]Kaggle Discussion:欠損ラベルについてhttps://www.kaggle.com/c/rfcx-species-audio-detection/discussion/202456
[4]Kaggleの音声分類コンペに関する論文
http://ceur-ws.org/Vol-1609/16090547.pdf
[5]Googleが開発したEfficientNetの性能について【英語】https://ai.googleblog.com/2019/05/efficientnet-improving-accuracy-and.html
[6]EfficientNetについて(qiita)【日本語】
https://qiita.com/omiita/items/83643f78baabfa210ab

採用情報

ESTYLEは、「コウキシンが世界をカクシンする」という理念のもと、企業のDXを推進中です。経験・知識を問わず、さまざまな強みを持ったエンジニアが活躍しています。

未経験文系からデータサイエンティストへ

弊社では、スキルや経験よりも「データを使ってクライアントに貢献したい」「データ分析から社会を良くしていきたい」という、ご自身がお持ちのビジョンを重視しています。

ご応募・問い合わせはこちら

この記事が気に入ったらサポートをしてみませんか?