【作物の収量を把握】オブジェクトトラッキングを試してみる【YOLOv5+DeepSort】

AI実装

作物を育てて気になることの一つに「どのくらい収穫できるか?」があると思います。熟練の農家さんであれば、畑を見渡して収量を把握するのかもしれませんがなかなか難しいですよね😥

今回はオブジェクトトラッキング(Object Tracking※)というAI技術をつかって、畑にどのくらい収穫できそうなモノがどのくらいあるかを数えていきます❗長くなってしまいそうなので、今回はひとまずObject Trackingの実装編です。

※Multiple Object Tracking(MOT)と言われたりもします。

YOLOv5で物体検出した作物の数を数える【Object Counter】という技術を前に紹介しました。何が違うの・・・?と思うかもしれませんが、その辺りも説明していきます。

Object Trackingとは、↓のように物体検出したバウンディングボックスに番号をつけて追いかける技術です。

track_all.gif
出典:https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch

Object Trackingとは!?

  • Object Detection

Object Trackingを説明する前に、先ずは物体検出(Object Detection)を簡単に説明する必要があります。物体検出は画像から物体の位置と種類を検出するAIモデルになっています。物体検出AIがみているのは一枚の画像のみです。

過去に物体検出の動画を出力していますが、これは複数の物体検出画像をつなげることで動画をつくっています。これが物体検出動画の中身です。

  • Object Counter

さて、ここでObject Counterの話になります。Object Counterは物体検出より得られたバウンディングボックスをカウントしています。つまり、ある瞬間での物体の数をかぞえることはできていますが、例えば畑全体で収穫できそうな作物の量を数えるといった、画像に収まりきらない数をかぞえることができないのです。

Object Counterは、例えば瞬間の人混みや、道路の混雑状況など、大まかに数を把握したいタスクには適していますが、正確に数を数えるタスクは苦手なんですね😨

  • Object Tracking

これでは困るということで、使えそうな技術がObject Trackingです。Object Trackingは物体を追跡するAI技術です。

↑のGIF動画のバウンディングボックスに割り振られた番号(171, 174とか)がフレームが切り替わっても追従しているのが分かると思います。このバウンディングボックスへ割り振られる番号を数えることで作物の量が分かる!?という発想です。

ちなみに各フレームのバウンディングボックスが同一のモノか?という判断をおこなっているのもAIです。今回はこのAIの部分にDeepSortというモデルをつかっていきます。

YOLOv5+DeepSortオブジェクトトラッキングをやってみる

実行環境

いつものようにローカル環境で実装していきます。

PC環境

  • OS : Windows 10
  • CPU : AMD Ryzen7 5800
  • メモリ : 16GB
  • GPU : GeForce RTX3070 8GB

CUDA関連

  • CUDA : 11.4
  • cuDNN:8.2

Python

  • Python 3.8.12

コード

コードは↓のモノをつかわせてもらいました。Colab Notebookも公開されています。試してはいませんがそちらでも同じことができると思います。

GitHub - mikel-brostrom/yolo_tracking: BoxMOT: pluggable SOTA tracking modules for segmentation, object detection and pose estimation models
BoxMOT: pluggable SOTA tracking modules for segmentation, object detection and pose estimation models - GitHub - mikel-brostrom/yolo_tracking: BoxMOT: pluggable...

Git cloneしていくのですが、ここで注意です。Yolov5_DeepSort_Pytorchは「YOLOv5」をサブモジュールとしてつかっているので、普通にGit cloneしたり、コードをダウンロードしても起動しません。

↓のコードを。AnacondaPromptなどで実行してください。※Gitはあらかじめインストールしておく必要があります。

git clone --recurse-submodules https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch.git

ライブラリインストール

作業ディレクトリへ移動し必要なライブラリのインストールしてください。

cd Yolov5_DeepSort_Pytorch
pip install -r requirements.txt

Pytorchはバージョン1.7が必要なのですが、私の環境ではPyTorchが何故かインストールできなかったので手動でインストールしています。↓のHPより環境にあったモノをpipインストールしました。

https://pytorch.org/

学習済重みをつかってひとまず実行してみる

検証用の動画はコレをつかってやってみました。ダウンロードし作業ディレクトリ化へ格納してください。

Yolov5_DeepSort_Pytorch
     -> data
          -> videos #ここに保存!

さっそく学習済み重みをダウンロードしてObject Trackingをやってみましょう!↓のコードを実行してみてください。

 python track.py --source ./data/videos/ --yolo_model yolov5s.pt --save-vid --save-txt --class 0

引数を説明します。

--source :オブジェクトトラッキングするデータの在りか(path)を指定
          0  # webcam
          img.jpg  # image
          vid.mp4  # video
          path/  # directory
          path/*.jpg  # glob
          'https://youtu.be/Zgi9g1ksQHc'  # YouTube
          'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

--yolo_model :学習済モデルの選択。
        yolov5n.pt --img 640
               yolov5s.pt
               yolov5m.pt
               yolov5l.pt 
               yolov5x.pt --img 1280
          path/ #独自データ.pt

--save-vid :動画データの保存

--save-txt  :結果データの保存

--class :物体検出するクラスを指定。デフォルトだとCOCOラベルとなっているので
           0 #person
           1 #bicycle
           2 #car
           ...

↓のような動画が、./runs/track/expフォルダの中に生成されたと思います。

若干見づらいですが、バウンディングボックスに番号が表示され、フレームが進んでも追従しているのが分かるかと思います。

お疲れ様でした。これでひとまずobject trackingの実装完了です。

–class引数を変更するといろいろなモノをトラッキングできるようになります。また–classになにも設定しなければCOCOのクラス全てをマルチオブジェクトトラッキングします!

いろいろやってみた動画が↓です。よかったらご覧ください。※注)音出ます

オリジナルデータでオブジェクトトラッキングしてみる

独自のデータをつかってもObject trackingを実装することができます!簡単にやり方だけ説明すると↓の感じです。

  • YOLOv5で独自データをつかった学習を実施
  • 学習で得られた重みデータを(best.pt)をYolov5_DeepSort_Pytorch作業フォルダへ移動
  • –yolo_model へ学習した重みデータのpathを指定しObject Trackingを実行

ざっくりこんな手順です。これを利用することで畑の作物の収穫量を把握することができるようになります。詳細は長くなるので別のブログでご紹介しようと思います👍

独自のデータをつかってレタスの収穫量を把握してみました!

YOLOv5の様々な使い方について

FarmLブログではYOLOv5の様々な使い方を紹介しています。お時間あれば併せてご覧ください。

  • 独自データをつかったYOLOv5の学習方法
  • 事前学習済みデータを転移学習したYOLOv5の学習方法
  • 遺伝的アルゴリズムを利用したYOLOv5のパラメータ最適化手法
  • YOLOv5で物体検出した画像を切り出して学習データにする方法
  • YOLOv5で物体検出した作物の数を数える【Object Counter】

関連書籍のご紹介

ディープラーニングをやってみたい!という方におすすめな関連書籍のご紹介。

コメント

タイトルとURLをコピーしました