3
5

【2024年度エラー修正版】BoT-SORTを使ってYOLOv7のモデルで物体追跡を実装する

Last updated at Posted at 2024-06-07

はじめに

日本語のサイトが2つしかなく、以下のサイトを読みながら実装しましたが、エラーが頻発しサイト通りに進まなかったです。

この記事を読めば、エラーなく実装までいけると思います。

同じようにつまづく人もいるかと思い、備忘録として投稿します。初投稿なのでお手柔らかに...

参考文献

この記事は以下の情報を参考にして執筆しました。1番目のサイトは学習済みモデル(yolov7-d6.pt)のダウンロードのコードが抜けているので、2番目のサイトが良いです。

環境構築

Google Colabで実装します。

ランタイムのタイプはGPUにしてください。(最初TPUに設定してエラー出たので)

image.png

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

公式よりcloneしてきます。

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

次に必要なライブラリをインポートします。

python
!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

以上で導入は完了です。

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

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

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

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

python
!mkdir pretrained

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

python
mv yolov7-d6.pt ./pretrained

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

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

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

python
mv mot17_sbs_S50.pth ./pretrained

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

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

動画は自分で好きなものをBoT-SORTフォルダの直下に配置してください。名前はTraffic.mp4に変更しておいてください。

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

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

実行したが、エラー発生!!!

発生したエラーと解決方法を記します。合計4つ+番外編1つ

1. 追加で必要なライブラリをインポート

python
!pip install lap yacs tabulate

2. Mapping関数の修正

再度実行すると新しいエラーが発生。

image.png

fast_reid/fastreid/evaluation/testing.py ファイルの 5 行目を以下のように修正。

python
from collections import OrderedDict
from collections.abc import Mapping

3. torch._six モジュールの修正

再度実行すると新しいエラーが発生。
image.png

fast_reid/fastreid/data/build.py ファイルの 12 行目を以下のように修正。

python
from collections.abc import Mapping

4. Numpyのnp.floatをfloatに修正

再度実行すると新しいエラーが発生。

image.png

NumPy 1.20以降、np.floatは非推奨となり、代わりに組み込みのfloatまたはnp.float64を使用することが推奨されているそう。

そのため、np.floatをfloatまたはnp.float64に置き換えれば良い。

いちいち探すのは大変なので、VScodeで検索したところ、以下の3つのPythonファイルを書き換えれば良さそう!

image.png

🚀無事、実行できた!🚀

再度、以下のコマンドを実行すると、

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

こんな感じで物体検知が進みます。私の場合、1分30秒(89MB)の動画が8分ほどで完了しました。そもそもColabに動画をアップロードするのにも時間がかかった...
image.png
Videotogif.gif

番外編(そもそもYOLOが動かない場合)

最初に実行した時、このようなエラーが発生した。

image.png

まずは以下のコマンドで確認したが、ディレクトリは問題なく、本来ならモジュールをインポートできるはずだった。

pwd
cd /content/drive/MyDrive/BoT-SORT

解決法

Google Colabで新しくファイルを作成し、もう一度最初から同じ手順で実行するとこのようなエラーは消えた。なんだったんだ。。

3
5
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
3
5