0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DeepSORT+YOLOv9による顔追跡

Last updated at Posted at 2024-11-20

前回の記事でYOLOv9を使った顔検出器を作ることができました。今回はその際に生成した重みデータを利用して、顔追跡をしてみたいと思います。使うアルゴリズムはDeepSORTです。ちょこっとハマったので記事にします。機材はいつも通りのMacBook Pro。

deepsort_output.gif

YOLOv9を準備する

事前に準備した顔検出器の重みデータ

YOLOv9の学習データ(weight)は下記に格納されているものとします。

(base) $ ls /Users/shino/yolov9/yolov9/runs/train/exp14/weights
best.pt	last.pt

YOLOv9のダウンロード

まず、顔検出器の準備をします。YOLOv9をgitからcloneして、重みデータ(weights)のディレクトリを準備します。

(base) $ cd ~
(base) $ pwd
/Users/shino

# 作業ディレクトリを作成する
(base) $ mkdir deepsort
(base) $ cd deepsort

# YOLOv9を入手する
(base) $ git clone https://github.com/WongKinYiu/yolov9.git
(base) $ cd yolov9

# conda仮想環境を作成する
(base) $ conda create --prefix ./env python=3.8
(base) $ conda activate ./env

# YOLOv9実行に必要なパッケージをインストールする
(env) $ pip install -r requirements.txt 

# 学習した重みデータをコピーする
# -->> DeepSORTのソースコードにyolov9-e.ptがハードコーディングされている
(env) $ cp /Users/shino/yolov9/yolov9/runs/train/exp14/weights/best.pt ./
(env) $ mkdir -p weights
(env) $ mv best.pt weights/yolov9-e.pt

DeepSORTを準備する

続いてDeepSORTを準備します。こちらのソースコードを利用させていただきました。

前手順で利用したPython仮想環境(conda activate ./env)のまま作業をしてください。YOLOv9とDeepSORT双方が必要なパッケージを仮想環境へインストールするためです。最後にYOLOv9をダウンロードしたディレクトリにobject_tracking.pyをコピーします。

(env) $ cd ~/deepsort
(env) $ pwd
/Users/shino/deepsort

# DeepSORTを入手する
(env) $ git clone https://github.com/sujanshresstha/YOLOv9_DeepSORT.git
(env) $ ls 
YOLOv9_DeepSORT	yolov9
(env) $ cd ./YOLOv9_DeepSORT

# 仮想環境にDeepSORTが必要なパッケージを追加する
(env) $ pip install -r requirements.txt

# DeepSORTのソースコードをyolov9ディレクトリ内に格納する
(env) $ cp object_tracking.py ~/deepsort/yolov9

DeepSORTで物体検出

それでは早速以下の動画の顔追跡をしてみます。

ディレクトリ構成を確認する

ダウンロードしたファイルをYOLOv9のディレクトリにpray.mp4として保存しました。最終的なディレクトリの構成は以下のようになります。

(env) $ cd ~/deepsort/yolov9 

# object_tracking.pyとplay.mp4があるか確認
(env) $ ls
LICENSE.md		figure				tools
README.md		hubconf.py			train.py
benchmarks.py	models				train_dual.py
classify		object_tracking.py	train_triple.py
data			panoptic			utils
detect.py		play,mp4			val.py
detect_dual.py	requirements.txt	val_dual.py
env				scripts				val_triple.py
export.py		segment				weights

# weightsがあるか確認
(env) $ ls ./weights
yolov9-e.pt

# クラス名のリストがないので作成
# -->> 顔しか検出しないので1行目にfaceとだけ書く
(env) $ mkdir ../configs
(env) $ echo "face" > ../configs/coco.names
(env) $ cat ../configs/coco.names
face

クラスラベルについては下記issueを参照しました。

推論を実行する

推論は以下のコマンドで実行します。

# 推論を実行(Ctrl+Cで終了)
(env) $ python object_tracking.py --video play.mp4 --output ./output.mp4
# 推論結果を表示
(env) $ open output.mp4

顔を追跡できていますね!画面外に出た人物のバウンディングボックスが若干残るのですが、これは再度フレームインする可能性があるため…かもしれません。

deepsort_output.gif

お疲れ様でした!

さらなる評価

DeepSORTのオプションは下記のUsage7.Run the codeをご参考ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?