はじめまして、オプティムのR&Dチームの中村です。
R&Dチームの中でも実案件を多く担当している新卒2年目で、齋藤(Rust)と同期です。農業AI関連の見積りから開発あたりをやっています。好きな日本酒は紀土です。日本酒ではないですがPyTorchも好きです。
ちなみに学生時代は、もう少しハードウェアよりの電子情報工学の勉強をしていました。
OPTiMがチャレンジしている様々な分野がある中で、農業(いちご)の話を書いてみたいと思います。 「いちごのデータセット」という若干ニッチなものがあるので、今回はそれにMask R-CNNを加えていちごの検出をしてみました。 余談ですが「OPTiMはドローンを用いた農場の空撮データを、日本でも上位にくるほど持っているのではないか説」という一説があります。(未検証)
個数が分かるとハッピーなこと
まずそもそも動画像から果実の個数が分かると何が良いの?という点に触れておきます。 動画像から「果実の個数」が分かると「全体収量」の推測に繋がります。そして「全体収量」が分かると以下のようなことが期待できます。
- 収穫の段取りを収量に合わすことが出来る
- 収量の多い日・少ない日で無理のないシフトが組める
- 来客スケジュールを無理なく組める(観光農園)
- 収穫体験や果物狩りに来たのに、全然なかった...というのはせつないですよね
- 出荷量の事前調整
などなど。就農者が少なくなっている中での効率的な栽培の手助けになります。農場にもよりますが、現在これらの収量予測は収穫しながらチェックしたり、サンプリング用の圃場を設けたりして人で行われている場合もあります。収量予測の他にも農作業はたくさんあるので、出来る限り代替えできそうだったらしたいですよね。
今回がんばるところ
とはいえ、そのために「何百万する機材が必要で...」となると、いくら楽になるとはいえ現実的ではありません。 今回は推論時の撮影機材も実用的なハードウェアでどの程度の精度が出せそうかという点にも着目して、以下の方法で撮影しています。
- 撮影機材
- iPhone
- 方法
- すでに現地にある台車にiPhoneを固定して撮影する
スマートフォンであれば入手性を考慮した上でも安価ですし、スマートフォンが使えれば撮影出来るという運用フロー上の学習コストの低さもGoodだと思います。 ゆくゆくは深層学習の推論自信もスマートフォン内でやっていきたいですね!
いざ撮影
撮影した結果、このような動画が撮れていました。
思ったよりガタガタしてます。というのも地面はコンクリートではなく土なため、地面の凸凹や石ころの影響もあります。 あとは人が手で押しているので、速度も一定ではないですね。とはいえ、「ここはいちごっぽい」というのは人でも視認できるので、深層学習で検出できなくもなさそうです。
いざ学習
今回はMaskR-CNNでいちごの検出を試してみます。Mask R-CNNはInstance Segmentationに対応したネットワークモデルの1つで、画像をピクセル単位でどのクラスに属するものなのかを予測します。このときSegmentation (Semantic Segmentation)と異なる点は、同じクラスの物体を区別することができます。
Mask R-CNN以外にもFCIS、DeepMask、PANet等があります。
GitHub - msracver/FCIS: Fully Convolutional Instance-aware Semantic Segmentation
GitHub - foolwood/deepmask-pytorch: PyTorch re-implementation of DeepMask
GitHub - ShuLiu1993/PANet: PANet for Instance Segmentation and Object Detection
まだMask R-CNNはスマートフォン等のモバイル機器での推論の現場までは来ていませんが、CoreML*1やTensorFlow Lite*2などのエッジで推論できるライブラリ・フレームワークの進化速度も早いので楽しみですね。 学習と推論にはFacebook Research謹製のMaskR-CNN Benchmarkを用いました。
そのままの状態ではCOCO Challenge・Pascal VOC Challengeなど精度のベンチマークのベースラインとして使われているデータセットしか読めなかったため、処理内容に一部カスタマイズを入れています。加えて各種パラメータ等もいちご向けにカスタマイズしました。
- ネットワークモデル
- Mask R-CNN (R-50-FPN)
- データセット
- 撮影動画から切り出した画像500枚(COCO形式) ※あまりにも小さないちごはアノテーション対象外とする
いざ推論
推論結果は以下のようになりました。
ブレが大きかったり、振動でローリングシャッター歪み*3が出ているシーンも数多く見受けられますが、健闘できているような印象です。 収穫まで日数のある小さないちごはアノテーションしませんでしたが、それでもいくつか検出はされていますね。
精度を上げるために
今回は軽めに試してみましたが、いざ本腰を入れてとなると以下の点でまだまだ改善の余地は残っていそうです。
- データソース
- 台車を押す速度の調整
- 振動を抑える機材・手法の導入
- データセット
- 数を増やす
- アノテーションの工夫
- 学習の改良
- Augmentationのバリエーションを増やす
- パラメータを煮詰める
などなど。 どれも泥臭いものが多いですが、地道な積み重ねは大切なので取り組んでいきたいですね。
おわりに
OPTiMではこのような一般的に広く扱われていないニッチ、かつ大きな影響を与えられるデータと戦うプログラマーやエンジニアのみなさんを大歓迎します。ぜひ一度お話しましょう!
謝辞
- いちご農園データ協力: 美らいちご 様
- 記事内いらすと素材: いらすとや 様
*1:学習済みモデルをiOS, MacOS上で容易に扱えるようにしたフレームワーク https://developer.apple.com/documentation/coreml
*2:TensorFlowのモバイル環境向けライブラリ https://www.tensorflow.org/lite
*3:別名こんにゃく現象と呼ばれている、CMOSセンサーからの読み出し遅延によって起こる現象です