Skip to content

野鳥の鳴き声を識別するプログラムです。VGG16をベースにしています。

Notifications You must be signed in to change notification settings

KatsuhiroMorishita/JPBirdSongClassification

Repository files navigation

JPBirdSongClassification

JPBirdSongClassificationはVGG16をベースの野鳥の鳴き声を識別するプログラムです。

目的

このプロジェクトでは、環境音から野鳥を識別することを目的としています。 環境音も区別することで、野鳥の状態を鳴き声からモニタリングすることを可能とします。

識別方法

本プログラムは、画像識別の技術を利用して、音源を一定時間ごとに切り出し、そのスペクトログラム画像を学習モデルに識別させます。 物体検出とは異なり、バウンダリーボックス(BBox)は作成しません。

その他

  • 現時点でこのリポジトリで公開中のモデルが主な識別ターゲットとしているものは、ヤンバルクイナ、ウグイス、モズ、ヤイロチョウです。
  • その他の種の識別精度が特に悪い訳ではないと思いますが、ご了承ください。
  • 種によって最適な尤度の閾値が異なりますので、いくつかの音源で試してから閾値を決定してください。
  • 今後は周辺ツールも公開するかもしれません。

識別可能な野鳥などの種

最新モデルで識別できる野鳥の種類は以下の通りです。 野鳥は48種ですのでまだ多くはありません。

野鳥 ヤンバルクイナ、ウグイス、ハシブトガラス、ハシボソガラス、カケス、リュウキュウコノハズク、フクロウ、アオバズク、アカショウビン、アカヒゲ、ヒヨドリ、モズ、ヒガラ、ヤマガラ、スズメ、カワラヒワ、ヤイロチョウ、ジョウビタキ、ルリビタキ、キビタキ、ホオジロ、ホトトギス、カッコウ、ツツドリ、ジュウイチ、シロハラ、ツグミ、クロツグミ、トラツグミ、オオトラツグミ、アオゲラ、ヒバリ、ニワトリ、メジロ、ヨタカ、アリスイ、ソウシチョウ、コジュケイ、サンショウクイ、キジバト、アオバト、イカル、クロジ、アオジ、エナガ、ヤブサメ、トビ、ミソサザイ、その他の鳥

*特定の囀りのみ、地鳴きだけの種を含む。いくつかの種でデータの少ない亜種を統合した。
*ヤンバルクイナ、ウグイス、モズ、ヤイロチョウは精度が出るように頑張っています。
*ツグミ・アリスイ・オオトラツグミは教師データが不足しています。

昆虫 リュウキュウサワマツムシ、マダラコオロギ、ケラ、リュウキュウカネタタキ、タンボオカメコオロギ?、クチキコオロギ、エンマコオロギ、カマドコオロギ、ヤチスズ、タイワンウマオイ、タイワンクツワムシ、ネッタイシバスズ?、ヒメギス、キンヒバリ、オオシマゼミ、クロイワツクツク、ニイニイゼミ、クマゼミ、ヒグラシ、アブラゼミ、リュウキュウアブラゼミ、ヒメハルゼミ、ツクツクボウシ、その他沖縄の虫4種、その他の虫
カエル ニホンアマガエル、ヌマガエル、アオガエル系、カジカガエル、リュウキュウカジカガエル、イシカワガエル、その他のカエル
その他 ニホンジカ、ネコ、オヒキコウモリ、アマミノクロウサギ、人の声、車の各種音、救急車、踏切、雨、風、小枝の折れる音、エアコンの室外機、小川、静寂、金属製の門扉、換気扇、航空機、テーピングの音、電子音、マイクノイズ、放電音、音楽

*音楽は2023-12-14モデルのみ
*アマミノクロウサギは教師データが不足しています。

また、今後の整備方針は以下の通りです。

精度向上や、亜種との分離作業中 オオトラツグミ、アマミノクロウサギ サンショウクイ、リュウキュウサンショウクイ ツグミ、クロツグミ アオバズク トビ カワラヒワ クロジs・アオジs,c カッコウ アリスイ アカヒゲ、リュウキュウキビタキ、ズアカアオバト、ルリカケス
今後追加予定の種 ムクドリ、セキレイ類 シジュウカラ、オオルリ、センダイムシクイ、イカルチドリ、カシラダカ、コゲラ、オオアカゲラ ガビチョウ ツバメ類 バン、オオバン、ヒクイナ、カイツブリ、ヒドリガモ、カルガモ、マガモ、コガモ、オナガガモ、カワセミ オオヨシキリ、セッカ サシバ、ノグチゲラ、リュウキュウオオコノハズク、カラスバト、シロガシラ

実行環境の作り方

ローカル環境で動かす場合

Pythonのインストール https://www.python.org/ からPython Python 3.10をインストールします。 (TensorflowはPython 3.10で動く。ただし、3.11以上は未対応なので注意。) just meモードが良いでしょう。
ffmpegのインストール 下記の記事を参考に、ffmpegをインストールしてください。 なお、Ubutntuではaptコマンドでインストール可能です。

参考記事:
https://torisky.com/ffmpeg%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%A8%E4%BD%BF%E3%81%84%E6%96%B9%EF%BC%882021%E5%B9%B41%E6%9C%88%EF%BC%89/

CUDAのインストール NVIDIA社製のGPUを搭載したマシンでは、GPUを学習と予測に利用可能です。 計算にGPUを利用するには、CUDA toolkitと、cuDNNが必要です。 下記の記事を参考に、CUDA toolkitとcuDNNをインストールしてください。 (注意:たまに、CUDAに対応していないGPUボードがあります)

参考記事:
https://qiita.com/8128/items/2e884998cd1193f73e2f

なお、インストールできるバージョンにはtensorflowにより制限ががあります。 TensorFlow公式ページのGPU対応に関するソフトウェア要件に合致するバージョンを選択してください。 WindowsでGPUを使うには、Tensorflow 2.10までとなります。 (Windows上でWSLを使ってUbuntuを動かして、その上で最新のTensorflowを使うこともできますが、動作速度が遅いのでお勧めできません)

TensorFlowのソフトウェア要件:
https://www.tensorflow.org/install/gpu?hl=ja

Gitのインストール Gitはバージョン管理ツールの一種です。下記のサイトからダウンロードして、インストールしてください。 基本的に設定はいじらなくても大丈夫です。

https://git-scm.com/

プログラムのダウンロードとPythonのライブラリのインストール GitHubのCodeボタンから選べる「Download ZIP」でもプログラムをダウンロードはできますが、モデルファイルが入っていません。 モデルファイルのサイズが大きく、LFSという別の管理になっているためです。 下記のコマンドで、完全なダウンロード~Pythonへのライブラリのインストールができます。
$ git clone https://github.com/KatsuhiroMorishita/JPBirdSongClassification.git
$ cd JPBirdSongClassification
$ pip install -r requirements.txt  

ただし、Windows環境でPythonにパスが通っていない場合は、下記のように実行せねばなりません。

$ py -m pip install -r requirements.txt  

なお、requirements.txtにはPythonに必要なライブラリが記載されています。このファイル内でtensorflowのバージョンに2.10を指定していますが、これは素のWindows用の設定です。WindowsでもWSLを使って動かす場合や、UbuntuやMacOS上で動かす場合はこの制限を外しても大丈夫です。ただし、GPUを使う場合は、インストールするtensorflowのバージョンとCUDAのバージョンに整合性が必要ですのでご注意ください。

Google Colaboratoryで動かす場合

Google Colaboratoryで動かす場合 Googleアカウントをお持ちであれば、Google Colaboratoryで動かすことも可能です。 Googleアカウントにログインした状態でColaboratoryの新規ノートブックを作成してください。

参考:
https://atmarkit.itmedia.co.jp/ait/articles/1812/10/news145.html

ノートブックを作成した後、セルに以下のコマンドを入力して実行します。 これでColaboratory上のカレントディレクトリにプログラムがダウンロードされます。

$ !git clone https://github.com/KatsuhiroMorishita/JPBirdSongClassification.git

後はローカルと同様に実行できます。 ただし、コマンドの先頭にエクスクラメーション・マーク「!」が必要です。

実行方法

学習

画像の識別を学習し、学習モデルを作成します。

学習の実行 設定をtrain_setting.yamlに記述する。 記法は予測の設定と同様です。

学習処理は、下記のコマンドで実行します。

$ python train.py  

または、

$ py train.py  

学習結果は./run/train*として連番で保存されます。

予測

学習後に保存されるモデルファイルを用いて、画像もしくは音声ファイルを用いて予測することができます。

予測処理の実行 設定をpredict_setting.yamlに記述する。 書式はYAML記法です。 適当なテキストエディタ―で編集して下さい。 エディターは色分けしてくれるVSCodeやSublime Textがお勧めです。 デフォルトの設定ファイルを開けば、恐らく使い方は分かります。

予測処理は、下記のコマンドで実行します。

$ python predict.py  

または、

$ py predict.py  

予測結果はrunsの中に連番で保存されます。

予測結果の見方 予測結果は、2つのファイルに分けて保存されます。 「prediction_likelihoods*.csv」は一定時間ごとの尤度を記録しており、もう1つの「prediction_result*.csv」は一定時間ごとの識別結果を記録しています。 「prediction_result*.csv」の識別結果は、設定ファイルで指定した尤度以上の種の名前が記載されています。 Excelで開くと、左から音源のパス、切り出し開始時間\[秒\]、切り出し幅\[秒\]、尤度もしくは種名、の順で並んでいます。

表 「prediction_likelihoods*.csv」の例

fname s w class0 class1
ファイルのパス1 0 5 0.1 0.5
ファイルのパス2 5 5 0.2 0.3
ファイルのパス3 10 5 0.7 0.1

表 「prediction_result*.csv」の例

fname s w class0 class1
ファイルのパス1 0 5 ND
ファイルのパス2 5 5 uguisu
ファイルのパス3 10 5 uguisu karasu

評価

評価結果がどの程度の性能を示しているのか、PR-AUC、ROC-AUC、F値により評価します。 評価には、予測処理で得られた尤度を保存したファイル「prediction_likelihoods*.csv」と、音源ファイルのパスと鳴き声の区間が記された正解ファイルが必要です。正解ファイルの例としては、フォルダdata/timelist内のテキストファイルをご覧ください。

正解ファイルのフォーマット
# 音源ファイルのパス,鳴き声が始まる時間(秒),鳴き声の時間幅(秒),以降繰り返し・・・
yanbal.wav,103.0,48.9,158.0,12.8,183.2,61.3
評価処理の実行 設定をevaluate_setting.yamlに記述する。 記法は予測の設定と同様です。

学習処理は、下記のコマンドで実行します。

$ python evaluate.py  

または、

$ py evaluate.py  

処理結果は./runs/evaluate*に保存されます。

予測結果を使った様々な処理

ディレクトリutilsは、予測結果「prediction_likelihoods*.csv」を用いて、スペクトログラム画像を作製したり、その画像を分類した後に正解リストを作製したり、検出された時期や時間帯を可視化するツールを格納しています。 詳細はutilsをご覧ください。

リクエスト・お問い合わせ

JPBirdSongClassificationのバグや将来へのリクエストがあれば、GitHub issuesに書き込みをお願いします。対応して欲しい外来種等の情報でも構いません。

ライセンス(jp)

学術用途に限り、無償で利用可能です。 引用された場合は、連絡は不要ですが参考文献にご掲載ください。

所属先への寄付金大歓迎です。 e-mailでご連絡ください。

About

野鳥の鳴き声を識別するプログラムです。VGG16をベースにしています。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published