Megadetectorによる空打ち削除の可能性の検討
Megadetectorについて
Megadetectorは,人,動物,車を判定するMicrosoft開発のAI.判定結果は,.jsonで出力される.
Timelapse2を使えば,出力ファイルをもとに,バウンディングボックスを画像に表示していくれる(以下,参照).ただし,tdb/ddbファイルと同じ場所に保存する必要あり.
Megadetectorは,静止画にしか対応していないので,動画→静止画に変換する必要あり。変換+動物の有無の判定にどれくらい時間がかかるかが課題。また,人が見た場合との信頼度の差も気になるところ。これらの点についてテストしてみた.
テストの条件
パソコンのスペック
プロセッサ 12th Gen Intel(R) Core(TM) i7-12700K 3.60 GHz
実装 RAM 32.0 GB (31.7 GB 使用可能)
GPU RTX 3070
画像の切り出しは,RstudioからpythonまたはRを利用。
切り出した画像は,パソコンのHDD内に保存
Megadetectorの利用は,マニュアル通りAnaconda promptから(下手に環境変えるのが怖い…)
テストの内容
N180812のBSN0869, BSN0942, BSN0943, BSN0945, BSN0946, BSN0975, BSN0977内の1047の動画を対象にする。
人による動物の在・不在判定の結果とMegadetectorによる結果を比較する。
以下,4つの条件(判定の信頼度?とはMegadetectorの出力値を指す)
画像を1秒ごとに切り出したもの 判定の信頼度 > 0.1
画像を1秒ごとに切り出したもの + 冒頭の2秒を5フレームごと(2*30/5枚)判定の信頼度 > 0.1
画像を1秒ごとに切り出したもの 判定の信頼度 > 0.05
画像を1秒ごとに切り出したもの + 冒頭の2秒を5フレームごと 判定の信頼度 > 0.05
Rとpythonによる切り出しには自分で書いたコードを利用
結果
Pythonだと1047動画の1秒ごとの切り出しに19.7分(Rのav:av_video_images関数だと35.3分),冒頭2秒を5フレームごと(1/6秒ごと)に切り出しに13.5分
前者で19552枚,後者で12537枚の静止画像に
Megadetectorによる判定に前者で30分,後者で18分
信頼度の分布は以下の通り
信頼度の分布
判定結果
結果まとめ
当然のことながら,偽陰性と偽陽性はトレードオフになる
偽陰性のほうを避けたいので条件4が妥当?
最初の2秒間だけ映る動物が結構多い(今回は2秒にしたけど1秒で十分)
実際に見過ごした種リストが以下.ほとんどがネズミ類
Station File Animal Species_human Species
1 BSN0869 IMG_0030.AVI ネズミ類
2 BSN0869 IMG_0057.AVI ネズミ類
3 BSN0869 IMG_0119.AVI シカ
4 BSN0942 IMG_0008.AVI ウサギ
5 BSN0943 IMG_0046.AVI ネズミ類
6 BSN0943 IMG_0047.AVI 鳥類
7 BSN0945 IMG_0056.AVI サル
8 BSN0946 IMG_0007.AVI ネズミ類
9 BSN0946 IMG_0024.AVI ネズミ類
10 BSN0946 IMG_0030.AVI ネズミ類
11 BSN0946 IMG_0088.AVI ネズミ類
12 BSN0946 IMG_0109.AVI ネズミ類
13 BSN0946 IMG_0110.AVI ネズミ類
14 BSN0946 IMG_0144.AVI ネズミ類
15 BSN0946 IMG_0270.AVI 鳥類
16 BSN0975 IMG_0033.AVI 鳥類
見落とした動画
結論
Megadetectorすごい...