【YOLOv5+DeepSort】人物トラッキングを試してみた

画像解析

今回はオブジェクトトラッキングというAI技術をつかってみます。オブジェクトトラッキングを用いることである人物が走ったり、座ったりしても同一人物と判定できます。

オブジェクトトラッキングとは

オブジェクトトラッキングとは、サムネイルの動画のように人物検出AIで検出された人物に番号をつけて追跡する技術です。下記の二段階の処理を行って、トラッキングしています。

①人物検知【YOLOv5】
人物検出にはYOLOv5を用いて、検出した人物をバウンディングボックスで囲います。

②検知した人物を追跡【DeepSort】
新しく検出した場合には新しい番号(ID)をふり、すでにIDが振られている人物を検出した場合には動画のフレームの前後で近い大きさと距離のバウンディングボックスを対応づけることで、人物にIDをつけ追跡します。DeepSortは、すでにIDが振られている人物かの見極めにAIモデルを使用することでより良いトラッキングを実現しています。

図1. オブジェクトトラッキングの検知例

詳細は下記論文まで。
Wojke, Nicolai, Alex Bewley, and Dietrich Paulus. “Simple online and realtime tracking with a deep association metric.” 2017 IEEE international conference on image processing (ICIP). IEEE, 2017.

環境

PC環境】
OS : Windows 10
CPUIntel Core i7-9700K
・メモリ:32GB
GPUNVIDIA GeForce RTX 2070 SUPER

CUDA関連】
CUDA11.4
cuDNN8.2.4

Python
Python 3.8.12

【コード】
https://github.com/mikel-brostrom/Yolov5_StrongSORT_OSNet

実行準備

既存のリポジトリをローカル環境に複製

※Gitがあらかじめインストールされている場合。URLからダウンロードもできます

Anaconda仮想環境の構築

ライブラリのインストール

学習済みモデルを下記からダウンロードし、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

さっそく人物トラッキングをやってみましょう。下記のコードを実行してください。

#引数
–source:人物トラッキングするデータのパスを指定。0を指定するとWebカメラ
–yolo_model:学習済モデルのパスを指定
–save-vid:動画データの保存
–save-txt:結果データの保存
–class:検出したいラベルを指定すると、そのラベルのみを検出。今回は人物だけなので0を指定

結果

図2の動画が、runs/track/expフォルダの中に生成されました。バウンディングボックスに番号、ラベル、信頼度が記載されています。フレームが進んでも番号が人物に追従しているのが分かるかと思います。

パス
Yolov5_DeepSort_Pytorch
   └runs
      └track
         └exp

図2. オブジェクトトラッキングの検知結果

まとめ・考察

今回は、人物のトラッキングをしてみました。かなり上手く行きましたが、下記のように物体検知に課題があると考えました。
・遠くの人物は検知されにくい
・立っている人に比べて座っている人は検知されにくい

class引数を変更するといろいろなモノをトラッキングできるようになるため、今後のBlogで試して行きたいと思います。さらに、オリジナルデータを用いてオブジェクトトラッキングもしてみたいです。

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