(旧)鳴き声を用いた野鳥の自動識別

森下功啓製作所 ONLINE

熊本大学三田研究室で自分のテーマではなかったのだけど、趣味で作った鳥の鳴き声を使って種類を当てるプログラムの解説ページです。疑問、リクエストは掲示板
[2017/2/5] GitHubのリンクを追加した。また、記事も若干見直した。

はじめに

鳥の鳴き声を基にして種類を当てるソフトウェアを作ってみたので公開してみました。
無保証ではありますが、そこん所を踏まえて頂ければなんら使用に関して関知いたしませんのでどうぞお使いください。

プログラム

プログラムを下記よりダウンロードしてください。 なお、実行形式ファイルの実行には.NET Framework 4が必要です。 メインのc#コードの開発にはVisual Studioを使っています。

開発環境:Windows 7 Pro x86/x64
リリース日 プログラムパッケージ 更新内容
2016/2/5 GitHubへのリンク バージョン管理が煩わしくなったので、GitHubにアップしました。
2014/1/4 今後の予定 このプロジェクトを再開するとしたらプログラムの開発言語をほぼPythonに統一します。
2013/7/7
Bird Recognizer With Song 特徴ベクトル生成・学習・識別ツール
FeatureTextFormatTester 特徴データのテキストフォーマットミスを発見するためのツール
ForFirstCheck by Python 初認日確認用Pythonスクリプト
lib 関連ライブラリ
renameWithCreatedDate by Ruby 音源ファイル名を書き換えるRubyスクリプト
sample data 鳥とは関係ないけど、機械学習用サンプルデータ
Song Checker WAVE音源を聞きながら、人手で何の音か仕分ける、もしくは特定の鳥かどうかを仕分けるツール
extraction by Python Song Checkerで付けたラベル毎に仕分けるPythonスクリプト
WaveReader Class Checker WAVEファイル読み込みクラスの対応フォーマットチェック用
開発言語は、PythonRubyC#です。

2013年3月時点でのソースコード/バイナリに少々手を加えた各種ツール群です。 教師データの作成から評価までをスムーズに、学部4年生でもやれる程度には一通りそろえました。 実行には、Ruby, Python, .NET Framework 4.0が必要です。 より詳しい情報は、取扱い説明書 for BRWS20130623をご参照ください。 著作権云々とやかく言いませんので、ご自由にお使いください。

[取りまとめの無い蛇足]
個人的には、リアルタイム処理を切り捨ててソースコードをもっと簡単にしたかったのですが、これ以上は趣味でやるには何とも・・・。 少なくとも、特定の鳥種について絞った識別を行う上では、85%程度の正答率を出すことができるのは確認しています。 残りの15%は、ほとんどが不明に分類されます。 他の鳥の声をターゲットに間違える割合も若干あるのですが、学習データの質と閾値に依ります。 ノイズに関しても、学習データを用意すればほぼ間違えません。 ただし、学習データの作成などの熟練に1年程度かかります。

2012/7/17 BirdRecognizerWithSong_20120717.zip
開発環境:Microsoft Visual C# 2010 pro
ソースコードとバイナリのセットです。 readme.txtに簡単な説明を記入しておきました。 3/28リリース版に比べ、かなり機能拡張を行っています。 ソースコードも読みやすくなったと思います。 より詳しい情報は、説明書 for BRWS20120717をご参照ください。 なお、この説明書へのダウンロードリンクにはDropBoxを利用しており、いつか消してしまうかもしれません。。。

おまけ:作業効率を1000倍くらい(当社?比)早めてくれるツール群もあります。 要望があればアップしようと思います。
2012/3/28 BirdRecognizerWithSong_20120328.zip
開発環境:Microsoft Visual C# 2010 pro
ソースコードとバイナリのセットです。 クラス構造に関する説明書を同梱しました。
2012/3/16 birdRecognition_20120316.7z
開発環境:Microsoft Visual C# 2010 pro
初アップ。 とりあえず、バイナリのみです。
万能ではないもののそこそこの性能が出る特徴ベクトル生成器を搭載しています。

デモ用に、YouTubeから取得した音源を基に学習したヤンバルクイナ用の識別器設定ファイルを同梱しています。 サンプルが少なかったのでウグイスをよくヤンバルクイナと間違えたりするおちゃめな奴ですがどうぞよろしく。

デモンストレーション

実際に動かしている様子をYouTubeにアップしてみました。 ご参考にどうぞ。

多種の同時識別システムの構築方法

4章で述べた方法により特定の鳥とそうでないものを識別する2分類システムを構築できれば、そのシステムを組み合わせれば多種類の野鳥の識別システムが出来上がりです。 一般に、ニューラルネットワークやサポートベクタマシンでは一度に多数の答えを出すのは調整が難しく、システムの完成度を上げるのが困難です。 そこで、ターゲットなのかそうでないのかだけを判別する識別器の構築を目指した方が、構築もその後のメンテナンスも楽です。 特にメンテナンスに入ると、多種同時識別を行う一つの識別器と2分類識別器の集合システムとでは作業量に雲泥の差がでます。

2分類システムの場合、識別ターゲットに合わせた特徴ベクトルを選択できるのも強みでしょう。

音源データの不足とオープンサイエンスへの期待

個人的な経験上、識別性能の評価を行うためには1つのクラスにつき200個以上の教師データが必要です。 例えば、2012年度の熊本大学三田研究室における卒業研究では、キビタキを識別するために類似の鳥や雑音について各々200例のデータを集め、教師データの総数は1,000個を超えていました。 また、ある地域の雑音の強い音源に対しては2,000個の識別対象のデータと、4,000個程度の雑音データを用意してようやく識別性能が出たということも有りました。

機械学習は学習させたデータの範囲であれば識別に威力を発揮しますが、学習データを逸脱したデータに対しては識別能力を期待できません。 野外での録音では様々な音が入るため必然的に学習の範囲を逸脱します。 また、鳥は個体差や地域差が大きく外れ値を多く含みます。 従って教師データを作成する上では、大量の生の録音データが必要です。 市販されているCD音源のみでは不十分です。

故に、個人的にオープンサイエンスの流れに対する期待は大きいものがあります。 オープンサイエンスでは、公的資金を得て発表された論文の無償での公開と、得られた実験データの全面公開が求められます。 また、オープンサイエンスは市民参加型のプロジェクトという概念も含みます。 海外では既に成果を上げたプロジェクトがいくつかあります。 例えばeBirdやGALAXY ZOOなどです(ページ下部のリンク参照)。 これらのプロジェクトではデータの収集やデータの分類に市民サイエンティストの力を借りる仕組みを取り入れています。 日本でも鳥を愛する人口は多く、また最近(2017-02)では日本でもオープンサイエンスが話題になり始めました。 このオープンサイエンスの流れにより、研究で利用できる録音データリソースの充実に期待したいところです。

初鳴き検出

日本に渡って来る渡り鳥の初鳴き確認は容易に行えるものの、降雨と風の影響を強く受けるようです。 複数の県にまたがった観測を同時に行わないと自動化の意味がありません。 また、一晩で一鳴きしかしないような鳥の確認には機械的な識別が向くとはいえ、特徴データの作成が難しくなります。 そのようなターゲットに対しては、数年に渡る根気のいる観測が必要でしょう。

発表動向

最近は音声による自動識別の分野で鳥に関する発表はほとんどなされていないようです。 代わりに、カエルやセミでいくつか発表がありました。 確かに、一晩中ほぼ同じ調子で鳴くカエルは識別データも作りやすいし、環境指標としても良いターゲットだろうなと思います。

リンク

学生向けの技術資料

inserted by FC2 system