background-eyecatch
x
公開日:2021/07/28更新日:2022/06/14

DeepSORTを用いた人物のトラッキングを行うレシピ

lulu1351
進捗
0/6

メニュー

概要

1. 人物のトラッキングとは

カメラに映った人物それぞれに自動でIDを割り振り、追跡する技術です。

人物をトラッキングするためには、人物の事前登録は不要です。人が歩いたり、走ったり、座ったりしても同一人物と判定できます。また、障害物や他の人に隠れてしまった場合でも同一人物としてトラッキングし続けることができます。

デモ動画 ↓

2. オブジェクトトラッキングモデル:DeepSORT

DeepSORTはオブジェクトトラッキング分野において、最も人気で最もよく使われているフレームワークの一つです。今回の人物のトラッキングを行うレシピもDeepSORTを使います。

DeepSORTのアーキテクチャは「①物体検出」と「②トラッキング」の2つに分かれています 。

  • 物体検出:下記の図のように、動画のフレームごとの静止画の物体検出し、物体のバウンディングボックスを計算します。今回のレシピでは、YOLO最新モデルYOLO v5を使って、物体検出を行います。


  • トラッキング: 複数の連続する画像で同一のものであるかどうかを識別するものです。(イメージ図↓)

YOLO v5による検出されたバウンディングボックスを使用して、人物の移動経路を予測します。動画のフレームの前後で人物にIDをつけてトラッキングします。具体的には:

  • SortアルゴリズムとReIDアルゴリズムの組み合わせで、バウンディングボックスとトラッキングを紐付けます。
  • 紐付けできない場合は新規IDを割り当ててトラッキングに追加します。

3. 関連資料

DeepSORTの詳細について以下の資料をご参照ください。

DeepSORTで使用されているYOLO(物体検出)ReId(同一人物照合)SORT(トラッキング)、のアルゴリズムに関する理論詳細は以下の資料をご確認ください。

① YOLO(物体検出):


② ReId(Person Re-Identification):
Person Re-Identificationで人物を追跡してみました


③ SORT(Simple Online Realtime Tracking):

【物体追跡】Multi Object trackingの解説


それでは、DeepSORTを使って一緒に人物のトラッキングをやってみましょう。

学べること

  • DeepSORTを用いた人物のトラッキングを行います。
  • トレッキングしたいオブジェクト(classes) を指定で、特定のオブジェクト(例えば車)をトラッキングします。

始める前のスキルセット

  • Python (基本構文など)についての基礎知識
  • Google Colabの基本の使い方

実務活用例

  • 商業施設やイベント会場などでの人の流れ・巡回の解析、人と人との距離、密集度合、群衆の人流統計を行う
  • 施設内における迷子の捜索や、万引き常習犯の検知
  • 繁華街における悪質な呼び込みへの注意喚起など

キッチン

開発環境

  • Google Colab
    動画データの処理をしますので、GPUがあったほうが良いです。Google ColabはPythonのプログラミング環境を整えられているし、無料でGPUを使うことができます。

ツール

  • matplotlib>=3.2.2
  • numpy>=1.18.5
  • opencv-python>=4.1.2
  • Pillow
  • PyYAML>=5.3.1
  • scipy>=1.4.1
  • torch>=1.7.0
  • torchvision>=0.8.1
  • tqdm>=4.41.0
  • seaborn>=0.11.0
  • pandas
  • easydict

データセット

今回のレシピはYOLOv5のpretrainedモデルを使用します。
YOLOv5のpretrainedモデルはCOCOデータセットを使ってトレーニングされたものです。

このレシピはCOCOデータセットを直接使用しませんが、
人物以外のオブジェクト(車など)をトラッキングしたい時には、COCOデータセットのオブジェクト classes 番号を指定する必要があります。

COCOデータセットについては以下をご参照してください。
COCOデータセット

調理

1−①:Google Colabを準備します。

Google Colabで「ノートブックを新規作成」します。今回は動画データを処理しますので、GPUを使います。

「ランタイム」>「ランタイムのタイプを変更」から「ハードウェア アクセラレータ」を「GPU」に設定しておきます。

1−②: Githubからソースコード一式をダウンロードします。
DeepSORTの実装ソースコードはいくつのバージョンがありましが、今回は「Yolov5 + Deep Sort with PyTorch」のバージョンを使用します。

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

1−③:作業ディレクトリを移動します。

%cd Yolov5_DeepSort_Pytorch

1−④:必要なライブラリをダウンロードします。

設定ファイルrequirements.txtを使って指定のパッケージを指定のバージョンで一括インストールします。

%pip install -qr requirements.txt

1−⑤: 必要なモジュールをインポートします。

import torch from IPython.display import Image, clear_output clear_output() print(f"Setup complete. Using torch {torch.__version__} ({torch.cuda.get_device_properties(0).name if torch.cuda.is_available() else 'CPU'})")

2-①: データを準備します。

以下のデモ用の動画をダウンロードして使ってください。
①サッカー試合動画:
messi_pk.mp4
②一般道路の動画:
traffic.mp4
③ライブカメラの動画:
live_camera.mp4

ご自身で動画(.mp4)を用意することも可能です。

2-②:デモ用動画をアップロードします。
以下の様にデモ用動画を「Yolov5_DeepSort_Pytorch」フォルダ直下にアップロードします。


早速、デモ動画「messi_pk.mp4」の中の人物をトラッキングしてみます。
まず以下のコマンドを実行してみましょう。

※2022年2月28日 追記
最新版のYolov5_DeepSort_Pytorchの場合、「--yolo_weights」を「--yolo_model」に変更してください。

※2022年6月14日 追記
最新版のYolov5_DeepSort_Pytorchの場合、「--yolo_weights」を「--yolo-weights」に変更してください。また実行前に「Yolov5_DeepSort_Pytorch」フォルダ直下に「weights」フォルダを作成してください。

!python3 track.py --source messi_pk.mp4 --yolo_weights yolov5x.pt --save-vid

上記コマンドを解説します。
–source :動画ファイルのパス(ファイル名)
–yolo_weights:YOLOv5の学習済みモデルを指定します。(初回の実行時に自動的にダウンロードされます。)

【出力】:
処理後の動画は「Yolov5_DeepSort_Pytorch/inference/output」に格納しています。

実行するたびに、outputフォルダの以前の実行結果が上書きしてしまうので、実行結果を保存しましょう。

処理後の動画:

テスト

今回使用した物体検出アルゴリズムはどれですか?

DeepSORTによる人物のトラッキングの応用として最もふさわしいものはどれですか?

DeepSORTで使用されていないアルゴリズムはどれですか?