1. 人物のトラッキングとは
カメラに映った人物それぞれに自動でIDを割り振り、追跡する技術です。
人物をトラッキングするためには、人物の事前登録は不要です。人が歩いたり、走ったり、座ったりしても同一人物と判定できます。また、障害物や他の人に隠れてしまった場合でも同一人物としてトラッキングし続けることができます。
デモ動画 ↓
2. オブジェクトトラッキングモデル:DeepSORT
DeepSORTはオブジェクトトラッキング分野において、最も人気で最もよく使われているフレームワークの一つです。今回の人物のトラッキングを行うレシピもDeepSORTを使います。
DeepSORTのアーキテクチャは「①物体検出」と「②トラッキング」の2つに分かれています 。
YOLO v5による検出されたバウンディングボックスを使用して、人物の移動経路を予測します。動画のフレームの前後で人物にIDをつけてトラッキングします。具体的には:
3. 関連資料
DeepSORTの詳細について以下の資料をご参照ください。
DeepSORTで使用されているYOLO(物体検出)、ReId(同一人物照合)、SORT(トラッキング)、のアルゴリズムに関する理論詳細は以下の資料をご確認ください。
① YOLO(物体検出):
② ReId(Person Re-Identification):
Person Re-Identificationで人物を追跡してみました
③ SORT(Simple Online Realtime Tracking):
【物体追跡】Multi Object trackingの解説
それでは、DeepSORTを使って一緒に人物のトラッキングをやってみましょう。
今回のレシピは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フォルダの以前の実行結果が上書きしてしまうので、実行結果を保存しましょう。
処理後の動画: