2021年9月30日木曜日

自動撮影カメラの検出プロセスをシミュレーションする

  改訂中の論文で必要になったので,自動撮影カメラの検出プロセスのシミュレーションに取り組んでいる.

 出来上がったアニメーションを先に示しておこう.扇形がカメラの検出エリア,正三角形が我々の「有効範囲」(ここを通過した動物だけデータ化する),青の白抜き〇が動物で灰色がその軌跡である.ここでは,カメラが撮影した動物の場所を赤で,2台目のそれを青で表現している(思った以上にGIFが重かったので2台目は削除).




 以下,一応解説(誰が読むか知らんけど).


 通常の自動撮影カメラには,受動型の赤外線センサーが搭載されていて,検出エリア内を動物が通過したら撮影される仕組みになっている.工学的な原理(というほど大層なものではないが)ここで紹介したとおりだ.


 検出エリア内に入った動物が撮影されるまでのプロセスは,生き物の一生に例えられるかもしれない.どんな生き物も,生まれた瞬間からある一定の確率で死亡するリスクにさらされる.ある瞬間における死亡リスクを「ハザード」と呼ぶが,若いうちはハザードが低く,だんだん年を追うごとにハザードが高くなるのが普通だろう(若齢個体の死亡リスクは高いとか,そういう話は置いておく).


 生き物の「死亡」を,自動撮影カメラによる「検出」に置き換えることが出来る.動物がカメラから離れた場所からだんだん近づいてくる場合,常に撮影される「リスク」にさらされている.そして,その瞬間リスクはカメラに近づくにつれてだんだん大きくなっていく(通常,カメラの検出確率は距離とともに減衰するので).リスクにさらされ続けた動物は,ある段階でリスクが現実のものになるだろう.生き物の一生との喩えとの相違点は,生物は必ずいつか死ぬのに対し,カメラによる撮影は逃れられる可能性があるということと,死ぬのはつらいがカメラに撮影されてもとくには困らないという点だ.


 つまり,撮影までのプロセスは,いわゆる生存時間解析の枠組みでとらえられることになる.この辺りについては,イギリスのRowcliffe大先生が2011年の論文でしっかりと整理している.


 今回やってみたのは,実際に撮影される様子をアニメーションにしてみるという作業だ.簡単に必要な作業を説明すると,①カメラによる瞬間撮影リスクを何らかの数式によって表現する(ハザード関数の定義).カメラによる動物の検知能力は,カメラからの距離と中心線からの角度とともに減衰するとする.②動物の1度の通過それぞれについて,累積ハザード(ハザードの積分値)を計算し,生存関数を求める.③一様乱数rを発生させ,y = rと生存関数との交点を求める.この交点が検出された場所ということになる(交点がない場合は検出されない).


 今回は,2台のカメラで同じ有効範囲を狙った場合,どのようにカメラ設置したら2台のカメラの検出を独立に近づけるかを検証する目的でこの課題に取り組んだ.同じ地点に置いたり,別の場所に置いたりしてみた(ここでは結果は示さない).軽い気持ちで取り組んだのだが,結構手を焼いた.


 積分計算が必要になるので大変そうにも見えるが,それはそんなに問題ではない.むしろ,「2台目のカメラを原点以外の別の地点において有効範囲を撮影する」という状況の実装が結構面倒だった.点や直線を回転させないといけなくなるのだが,その回転のさせ方が通常とは逆になる(ふつうはある点を中心に回転させるが,ここでは座標系の回転が必要だった).これにちょっと時間がかかってしまった(わかってしまったら当たり前のことだったけど).高校数学+αの知識で取り組めるので,Rの使い方に慣れたり高校数学の復習をするうえでは結構いい教材な気がする(とある東大の学部生は,あっさりと実装できてしまったけど).



2021年9月14日火曜日

カメラトラップ動画の自動種判別:zambaパッケージのインストール手順

  自動撮影カメラを使ううえで一番大変なのは,撮影された画像を一枚一枚確認することだ.カメラの性能も完璧からほど遠いので,何も撮影されていない画像が7割を占めることもある.俗に言う「空打ち」かどうかを慎重に見極めながら,撮影された動物の種判別を行うこと.この作業には膨大な時間がかかる.


 最近,こうした作業にAI(いわゆる深層学習)が用いられるようになってきた.深層学習による自動判別の大きな問題は,「その道の人」しか使えないということだが,いくつかのグループが,一般ピープルに使いやすいようにパッケージ化してくれている.例えば,この論文では,GUIベースで動物の判別が出来るようにしたアプリを開発し,フリーでダウンロードできるようにしてくれている.


 今のところ手に入るパッケージのほとんどは,静止画のみを対象としたものだが,動画向けのパッケージもいくつかある.マックスプランクのプロジェクト,Project Zambaもその一つだ.このプロジェクトは,2017年の終わりにコンペを開催し,中央アフリカで撮影された動物の種同定の成功率を世界中のグループ(90ヵ国以上から参加があったらしい)に競わせた.そして,もっとも優れたパフォーマンスを示したモデルをパッケージ化して研究者や保全活動家に無料で提供した.それがZamba(らしい).


 前々からちょっと試してみたいと思っていたところ,ようやく時間が取れたので,気合を入れて取り組んでみた.調べたいのは,このモデルを日本で取得した動画に適用したらどうなるか,ということだ.分類群も姿かたちも振る舞いも大して変わらないし,アフリカの方が圧倒的に多様性が高いから,学習済みモデルでも,そのままある程度適用できるのではないかという気もする.とくに,私にとって最も重要な「空打ち」動画の判別には使えるのでは,という期待もある


 以下,注意点.


・zambaは種までの判別はしてくれない(分類群くらいだと思ったらよい.詳細はここ

・15秒の動画に最適化されているらしいが,そうでなくても判別はしてくれる

・動画の拡張子は代表的なものなら何でもOK

・Cloud web applicationを使えば,以下のような面倒な手続きはすっ飛ばせる(はず).だけど動画をアップロードする必要あり.

・多くの深層学習パッケージのように,pythonやTensorflowのバージョン依存で動いたり動かなくなったりする.必ず指定されたバージョンを使うこと.

・CPU版とGPU版がある.以下の手順はCPU版(手元のパソコンにはGPUを入れてない).

・以下の手順は,Windows 10,64bit版の利用を前提


 なお,以下では最新版のAnacondaを入れて,古いバージョンのpythonを事後的に使えるようにする方針をとっている.Anacondaのバージョンとpythonのバージョンの対応がイマイチよくわからないので,多少面倒くさいが,こっちの方がスムーズだと思う.ということで以下,覚書代わりにインストールの手順を解説しておく.


1. Anaconda経由でpython最新版をインストール

・最初にここからAnacondaの最新版をダウンロード

・exeファイルをダブルクリックして開き,そのまま進んでいく.最後にパスを加えるかどうかを聞いてくる.意味が分からなかったらデフォルトのままチェックを外しておいた方が良いが,そうでなければチェックを入れておく(赤字になってビビるが,困ったらシステムの環境変数をいじるだけ)

・Anacondaを入れたら自動的にpythonもインストールされる(Anacondaはそういうためのもの.念のため).


2. 旧バージョンのpython(3.6)をインストール

・windowsの検索でanaと入力して,Anaconda Promptを起動する.

・conda create -n python36 python=3.6と入力してEnterキーを押す.途中でy/nか聞かれたら,キーボードのyを押してEnterキーを押す


3. XGBOOST 0.71をインストール

・次にXGBOOSTを入手.どういうものかは,ここを参照(私はよく分かってません).

・最新版はここから入手できるが,最新版では動かなかった.トリセツにある0.71版をどこからダウンロード出来るのかが分からない・・・

・仕方ないので,ここのを使わせてもらう.画面右中央辺りにあるダウンロードをクリック

・xgboost-0.71-cp36-cp36m-win_amd64.whlというファイルが「ダウンロード」フォルダにあることを確認(デスクトップとかにあったら,ダウンロードに移動)

・Anaconda Promptに「activate python36」と入力,Enter(python36はスペースなし.python 36では駄目)

・Anaconda Promptに「cd Downloads」と入力,Enter(「ダウンロード」フォルダにxgboost-0.71-cp36-cp36m-win_amd64.whlがあることが前提)

・Anaconda Promptに「pip install xgboost-0.71-cp36-cp36m-win_amd64.whl」と入力,Enter(インストールが始まる)

・終わったら,いったんAnaconda Promptを終了


4. FFMPEGのインストール

・これは最新版でよい

ここからffmpeg-n4.4-151-g5e61fce832-win64-gpl-4.4.zipを入手

・zipファイルを解凍

・CドライブのProgramFilesの中にffmpegというフォルダを自分で作成

・解凍されたフォルダの中身(binフォルダとか)をffmpegフォルダの中に移動

・次にパスの追加.Windowsの検索で,「システム環境変数」と入力,「システム環境変数の編集」をクリックして立ち上げる

・「システムのプロパティ」という画面になるので,下の方の「環境変数」をクリック

・下側の画面からPathを探し選択

・右下の編集ボタンをクリック

・一番下側に「C:\Program Files\ffmpeg\bin\」と手入力(あるいはコピペ)


5. zambaのインストール

・Anaconda Promptでactivate python36と入力,Enterした後,pip install zamba[cpu]と入力&Enterすると,zambaのCPU版のインストールが開始される.

・GPUを使う場合はpip install zamba[gpu]だが,+αの設定が必要.ここを参照(まだ私はやってない).


6. zambaによる同定

・「vids_to_classify」というフォルダを作り,その直下に同定対象の動画を収める.(vids_to_classify内にフォルダがあるといったような階層構造には対応していない)

・Anaconda Promptを立ち上げたときに表示されるディレクトリーに「vids_to_classify」をコピー(私の場合は,C:/Users/yosshにコピペ.日本語が混じってる場合は新しいユーザーを作成するしかない...)

・Anaconda Promptで「activate python36」と入力&Enterキーを押し,「ls vids_to_classify/」と入力&Enter.収めたビデオのファイル名が表示されるかを確認.

・表示されたら,「zamba predict vids_to_classify/ --output_class_names」と入力,Enterキーを押すと同定が始まる.



 手順としては以上の通り.


 1回目は,weightsファイルをダウンロードするとかで,異常に時間がかかる.2回目以降は多少マシになる.同定結果は,,,やはり日本の動物でも結構うまくいく.ただし,夜間の赤外光が弱い動画では,明らかに動物が写っているのに空打ち判定されてしまう.古いBrowningは赤外光が弱いので,他の機種だとうまくいくかもしれない(ちょっとやってみた感じだと,少なくとも昼間の動画だと,正答率はかなり高い).CPUでやっているので時間がかかりすぎる.その点を除けば(GPUを使えば),結構実用に足るかも.まあ気軽にやってみてほしい.


2021年9月8日水曜日

自動撮影カメラの故障速度:BrowningとBushnellに関して

久しぶりに研究関連の話題.論文の覚書が,自分のための備忘録として結構便利なことに気付いて頻繁に更新しているので,こっちのブログも頑張ろうと思う.


だから,というわけではないのだが,最近,自動撮影カメラがどれくらい正常に稼働するものなのか(どれくらいで故障してしまうのか)を集計してみた.カメラの寿命がどれくらいかは,長期的なモニタリングを行ううえで非常に重要な情報だろう.


私の研究室では,購入したカメラにはすべてIDがふってあって,どこにどれだけ設置してあったかが一応わかるようにしている.購入したカメラが軽く500台を超えるので(全部合わせると多分1000台近い),かなり細かく管理しないと訳が分からなくなってしまう.もっとも物品の管理は学生に全部任せていて,この集計をしてくれたのもY君だ.

今回は,比較的新しいBrowning社製とBushnell社製の生存時間を調べてもらった.以下の図がその結果.Borwning社製のものは,STRIKE FORCE PROの2つのバージョン,Bushnellはサイズが比較的でかかった時代のさまざまなバージョンを含んでいる(最近のggplot2は,凡例に画像を入れられるらしく,図を見てもらえばどういう機種かはなんとなくわかると思う).

自動撮影カメラの生存時間

思った以上に寿命は長い.Browningでも購入2年でも8割方のカメラが無事に生き残っている.Bushnellは若干生存時間が短いようにも見えるが,少し古い機種であることとも関係があると思う.カメラは消耗品で,常に研究資金を獲得しないと調査が続かないのだが,これくらい持ってくれるなら少しは気が楽だ.


カメラの寿命は,かなり使い方依存の面がある.我々は,調査のたびにカメラを全とっかえするのでこのうちの半分くらいの期間はフィールドにはないと思ってもらっていい.また,設置時は,雨よけをして直接雨水に当たらないようにしたうえで,すべての隙間をシリコンで埋めている(乾燥材などは入れていない).持って帰ったカメラはすぐに可能な限り乾燥させている.この辺りは自分でやるのには限界があるので,学生たちが自分たちでやってくれるシステムを作るのが大事だろう.


まあ,何かの参考になれば幸いだ.