
パイナップル畑の鳥獣被害を機械学習で防ぐ -其の一
「パイナップル畑を荒らす鳥や獣を追い払う!」
そんな野望からこの計画は始まりました。
実家は西表島で、親はパイナップル農家です。
パイナップルは植えてから収穫まで2年という長い時間がかかります。
その2年の間、西表島の豊かすぎる自然から様々な動物がパイナップルを狙って畑にやってくるのです。
課題
まずは以下の記事をご覧ください。
竹富町内の有害鳥獣(イノシシ・カラス)による農作物被害額が2022年度で668万円と前年度の約2倍、過去4年間で最多となった。
このうち西表島では米農家やパインアップル農家など広く被害が及んでおり、深刻な状況になっているという。
なぜ2022年度は特に被害が多いのか分かりませんが(台風が関係してる?)
イノシシとカラスは特に畑を荒らしまわる厄介者です。
この有害な鳥獣からパイナップル畑を守るべく、IoTデバイスと機械学習を武器に計画を開始させました。
ちなみに自分のスペックです。
・株式会社ゆめみでAndroidアプリエンジニアとして勤務
・IoTデバイス好きだが、ハードウェアの知識はあまりない
・機械学習の経験は一切なし
こんなスペックですが、ゆめみが推奨する「とりあえずやってみなはれ精神」で動き始めました。
IoT
このへんはまだ先の話なのでザックリと。
AruduinoやRaspberry Piなどのデバイスカメラでいけるじゃない?という考えです。
問題は電源をどうするか問題ですが、機械学習が片付いたら真面目に考えようと思い、先送りにします。
機械学習
まずはイノシシやカラスを検知するため、IoTデバイス+カメラで撮影した画像から機械学習でイノシシやカラスを検知しようと考えました。
しかし機械学習の知識は全くないので、楽に機械学習できる方法を探してみた結果、、、
Edge Impulse というサービスを使ってみることにしました。
Edge Impulseはノーコードで機械学習のモデルを作成し、スペックの低いデバイスでもエッジAIを動作できるプラットフォームのようです。
ただ、無料版には色々と制限があるようで、その制限を超えると課金プランじゃないと動かせないようです。
正直、よく分かってませんが、、、こいつでいく事にしました。
今回のゴール
まずは「Edge Impulseで画像からイノシシとカラスを検知する」
今回はとりあえずここまでできればOKとします。
なにせ機械学習の経験がないですし、Edge Impulseも初めての利用のためです。
また、Edge Impulseも日本語の情報がほとんど出てきませんでした。
(あまり日本の仕様例はないと思われます)
できたもの
いきなり成果物をお見せします。
スマホのカメラの画像から機械学習を動かし、鳥を検知させることができました!
※ 機械学習のモデルはEdge Impulse製です。


イノシシも同時に学習させたので、認識してくれました。


画像では分かりにくいので、認識させている様子を撮影しました。
ここから解説
どのように作ったか?を軽く説明していきます。
といってもほぼEdge Impulseの説明となります。
機械学習のモデルを作る
機械学習で検知するにはモデルを作る必要があり、
モデルを作るには画像を集めて学習させる、とのことです。
本来ならこれをPythonなどでコーディングするのが正当法っぽいんですが、
そこはEdge Impulseでノーコードで可能なようです。
まずは画像集め
Googleで画像検索し、ダウンロードして集めてきました。
カラスの画像を30枚
ヒヨドリの画像を20枚
イノシシの画像を20枚
動物が映っていない風景画像が30枚
パイナップル畑では特にこの「カラス・イノシシ」の被害が多いため、ピックアップしています。
ヒヨドリを選んだのは機械学習に「鳥はヒヨドリだけじゃないんだぞ」と教えたいためです。

画像をEdge Impulseにアップロードして認識させる
YOLOv5で鳥を認識させ、それをラベル付けすると楽でした。

イノシシ画像も25枚ほど認識させておきました。

大事なのが、鳥もイノシシも載っていない画像も学習させる必要があります。
これを行わないと、あらゆる色や形を誤認識します。
(例えば黒い物が映るとすべてカラスと認識してた)

学習開始
ラベル付けができたら学習開始させます。

無料版は20分内で学習が終わらないとエラーとなるため、画像数やサイズを調整する必要があります。
体感ですが、学習させる画像枚数が100枚を超えると20分を超えはじめました。
学習したモデルを試す
以下はイノシシを画像認識させることができています。

スマホで試す
Edge Impulseのすごいところはスマホからサクッとモデルを試せるところなのです。
プロジェクトのQRコードをスマホで読み取ると、カメラの画像をモデルが正しく認識できるか?を試せます。
これはすごい

今回はここまで
モデルはとりあえ完成しました。
画像数が少ないので認識制度は低いと思いますが、無料版で試せるのはここまでとなります。
次回はIoTデバイスとEdge Impulseを組み合わせられればと思います。
ではでは。
参考にしたサイト
Detect objects with bounding boxes - Edge Impulse Documentation
公式の画像から検出する公式ガイド
Adding sight to your sensors - Edge Impulse Documentation
学習させてモデルを作成する公式ガイド
FOMO: Object detection for constrained devices - Edge Impulse Documentation
今回は使ってないが、FOMOだと更に高速に動かせるらしい
Data acquisition - Edge Impulse Documentation
学習のためのデータ収集のガイド