YOLOシリーズの2022年最新版「YOLOv7」について、環境構築から学習の方法までまとめます。

YOLOv7は2022年7月に公開された最新バージョンであり、速度と精度の面で限界を押し広げています。

第8回目はBoT-SORTによる物体追跡(MOT)の実装方法を紹介します。

Google colabを使用して簡単に最新の物体検出モデルを実装することができますので、ぜひ最後までご覧ください。

今回の内容

・YOLOv7とは

・Object Trackingとは

・BoT-SORTの概要

・BoT-SORTの導入

・BoT-SORTで物体追跡(MOT)で実装する

YOLOv7とは

YOLOv7は2022年7月に公開された最新バージョンであり、速度と精度の面で限界を押し広げています。詳細は前回の記事で紹介しておりますのでよかったらご覧ください。

引用:https://arxiv.org/pdf/2207.02696.pdf

YOLOv7のベンチマーク結果は以下となっています。

引用:https://github.com/WongKinYiu/yolov7

なお、YOLOv7のライセンスは「GNU General Public License v3.0」となっています。

Object Trackingとは

Object Tracking (物体追跡)は動画中で変化・移動していく物体を追跡するタスクです。

動画像中で指定されたひとつの物体を追跡する Single Object Tracking(SOT)、複数の物体を同時に追跡する Multiple Object Tracking(Multi-Object Tracking、MOT)に大別されます。

Multiple Object Tracking(MOT)とは

Multiple Object Tracking(MOT)とは、動画に写っている複数の物体を追跡する手法の総称です。

MOTではそれぞれの追跡物体にIDを割り当てますが、同じ対象物にはなるべく同じIDを与え続けることを目指します。

MOTの利用ケースとしては、例えば動画から歩行者や自動車の数の数えるなどのタスクに利用することができます。

Tracking by Detectionとは

MOTの中でも「Tracking by Detection」と呼ばれる手法があります。

これは、物体検出モデルによって動画の各フレームから追跡対象の物体を検出した後、フレーム間ごとに同じ物体に対して同一のIDを与えていきます。

動画の各フレームで検出された同じ物体の矩形(Bounding Box)に対してなIDを割り振ることによって、物体を「追跡」します。

BoT-SORTの概要

BoT-SORT(Robust Associations Multi-Pedestrian Tracking)は2022年6月に発表された物体追跡の手法です。

カメラの動き補償に基づく特徴量トラッカーや、より良いボックスの位置決めのための適切なカルマンフィルタの状態ベクトルなどの改良を加えることで、検出による追跡を大幅に改善しています。

詳細は公式実装をご確認ください。

BoT-SORTの導入

導入

ここからはGoogle colabを使用して実装していきます。

まずはGPUを使用できるように設定をします。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

今回紹介するコードは以下のボタンからコピーして使用していただくことも可能です。

Open In Colab

GPUの設定が終わったら、Googleドライブをマウントします。

from google.colab import drive
drive.mount('/content/drive')
%cd ./drive/MyDrive

公式よりcloneしてきます。

# !git clone https://github.com/NirAharon/BoT-SORT.git
%cd BoT-SORT

必要なライブラリをインストールします。

!pip install -r requirements.txt
!python setup.py develop

!pip install cython
!pip install 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'
# Cython-bbox
!pip install cython_bbox

# faiss cpu / gpu
!pip install faiss-cpu
!pip install faiss-gpu

以上で導入は完了です。

学習済みモデルをダウンロードする

次に今回使用する学習済みモデルをダウンロードします。

モデルを格納する「pretrained」フォルダを作成します。

!mkdir pretrained

YOLOv7のモデルをダウンロードします。

!wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-d6.pt

「pretrained」フォルダにモデルを移動します。

mv yolov7-d6.pt ./pretrained

MOT17のモデルをダウンロードします。

!gdown 'https://drive.google.com/uc?id=1QZFWpoa80rqo7O-HXmlss8J8CnS7IUsN'

「pretrained」フォルダにモデルを移動します。

mv mot17_sbs_S50.pth ./pretrained

以上で必要なモデルが揃いました。

BoT-SORTでMultiple Object Trackingで実装する

BoT-SORTでMultiple Object Trackingで実装します。

今回はYOLOv7をベースとしています。

「–source Traffic.mp4」とすることで、Traffic.mp4動画に対して物体追跡を実装することができます。

!python tools/mc_demo_yolov7.py --weights pretrained/yolov7-d6.pt --source Traffic.mp4 --fuse-score --agnostic-nms --with-reid

実行結果は「runs/detect/exp」に出力されます。

まとめ

最後までご覧いただきありがとうございました。

2022年7月に公開されたのYOLOシリーズの最新バージョンである「YOLOv7」について、Object Trackingの実装方法を紹介しました。

物体検出の活用の幅がさらに広がりそうですね。