今回はオブジェクトトラッキングというAI技術をつかってみます。オブジェクトトラッキングを用いることである人物が走ったり、座ったりしても同一人物と判定できます。
オブジェクトトラッキングとは
オブジェクトトラッキングとは、サムネイルの動画のように人物検出AIで検出された人物に番号をつけて追跡する技術です。下記の二段階の処理を行って、トラッキングしています。
①人物検知【YOLOv5】
人物検出にはYOLOv5を用いて、検出した人物をバウンディングボックスで囲います。
②検知した人物を追跡【DeepSort】
新しく検出した場合には新しい番号(ID)をふり、すでにIDが振られている人物を検出した場合には動画のフレームの前後で近い大きさと距離のバウンディングボックスを対応づけることで、人物にIDをつけ追跡します。DeepSortは、すでにIDが振られている人物かの見極めにAIモデルを使用することでより良いトラッキングを実現しています。
図1. オブジェクトトラッキングの検知例
環境
【PC環境】
・OS : Windows 10
・CPU:Intel Core i7-9700K
・メモリ:32GB
・GPU:NVIDIA GeForce RTX 2070 SUPER
【CUDA関連】
・CUDA:11.4
・cuDNN:8.2.4
【Python】
・Python 3.8.12
【コード】
https://github.com/mikel-brostrom/Yolov5_StrongSORT_OSNet
実行準備
既存のリポジトリをローカル環境に複製
1 |
git clone --recurse-submodules https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch.git |
※Gitがあらかじめインストールされている場合。URLからダウンロードもできます
Anaconda仮想環境の構築
1 2 |
conda create -n yolov5_deepsort python= 3.8.12 conda activate yolov5_deepsort |
ライブラリのインストール
1 2 |
cd Yolov5_DeepSort_Pytorch pip install -r requirements.txt |
学習済みモデルを下記からダウンロードし、yolov5のweightsに格納
https://drive.google.com/file/d/1gglIwqxaH2iTvy6lZlXuAcMpd_U0GCUb/view
※今回は人物だけを追跡
パス
Yolov5_DeepSort_Pytorch
└yolov5
└weights
実行
実行用の動画は下記からダウンロードし、data/videosフォルダの中に格納。
https://pixabay.com/ja/videos/%E3%82%B3%E3%83%BC%E3%83%B3%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB-%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%AD%E3%83%BC-4797/
パス
Yolov5_DeepSort_Pytorch
└data
└videos
さっそく人物トラッキングをやってみましょう。下記のコードを実行してください。
1 |
python track.py --source data/videos/ --yolo-weights yolov5/weights/crowdhuman_yolov5m.pt --class 0 --save-txt |
#引数
–source:人物トラッキングするデータのパスを指定。0を指定するとWebカメラ
–yolo_model:学習済モデルのパスを指定
–save-vid:動画データの保存
–save-txt:結果データの保存
–class:検出したいラベルを指定すると、そのラベルのみを検出。今回は人物だけなので0を指定
結果
図2の動画が、runs/track/expフォルダの中に生成されました。バウンディングボックスに番号、ラベル、信頼度が記載されています。フレームが進んでも番号が人物に追従しているのが分かるかと思います。
パス
Yolov5_DeepSort_Pytorch
└runs
└track
└exp
図2. オブジェクトトラッキングの検知結果
まとめ・考察
今回は、人物のトラッキングをしてみました。かなり上手く行きましたが、下記のように物体検知に課題があると考えました。
・遠くの人物は検知されにくい
・立っている人に比べて座っている人は検知されにくい
–class引数を変更するといろいろなモノをトラッキングできるようになるため、今後のBlogで試して行きたいと思います。さらに、オリジナルデータを用いてオブジェクトトラッキングもしてみたいです。