人工知能

MacでYOLOv7を使う

MacにYOLOv7をインストールして使えるようにする手順をまとめました。

軽い気持ちでMacでYOLOv7を動かしてみようとしたところ、かなり苦労しました。YOLOv7がCUDAが使える環境しか想定しいていないので、CPUだけで動くようにしました。同じ境遇の方の参考になれば。

公式手順ではMacで動かせない

YOLOv7公式には、インストール方法として次の手順が紹介されています。

# create the docker container, you can change the share memory size if you have more.
nvidia-docker run --name yolov7 -it -v your_coco_path/:/coco/ -v your_code_path/:/yolov7 --shm-size=64g nvcr.io/nvidia/pytorch:21.08-py3

# apt install required packages
apt update
apt install -y zip htop screen libgl1-mesa-glx

# pip install required packages
pip install seaborn thop

# go to code folder
cd /yolov7

でも残念ながら、この手順ではMacでYOLOv7を動かすことはできません。最初の行であるnvidia-docker runの部分で速攻エラーになります。

まず、nvidia-dockerコマンドはCuda+GPU対応のdockerコマンドですが、Macでは使えません。NVIDIAのGPUが使われていないので。

そのためnvidia-dockerコマンドをdockerコマンドに置き換える必要がありますが、それでも動きません。コンテナイメージnvcr.io/nvidia/pytorch:21.08-py3nvidia-dockerとセットで使われることが前提だからです。

他のPyTorchコンテナイメージを使うための準備

Macではnvcr.io/nvidia/pytorch:21.08-py3コンテナイメージが使えないので、代わりにbitnami社が提供しているPyTorchコンテナイメージを使うことにします。

このコンテナイメージはx64用にビルドされているので、Docker Desktopの設定でRosettaを有効にしておきます。

画像に alt 属性が指定されていません。ファイル名: docker_desktop_setting_rosetta.png

これで、x64用にビルドされたコンテナイメージをarm64環境で使うことができるようになります。

プログラムを用意

この部分はMac特有の手順ではないですが、YOLOv7の説明にも明記されていなかった部分です。(単に見落としてただけかもしれないけど)

YOLOv7のプログラム(リポジトリにあるPythonプログラム)をcodeフォルダにダウンロードします。

git clone https://github.com/WongKinYiu/yolov7.git code

作成されたcodeフォルダには.pyプログラムが入っています。コンテナを起動するときバインドマウントし、コンテナ内から実行して使います。

さらに、MS COCOに対しての評価やトレーニングをしたい場合は、MS COCOのデータセットもダウンロードする必要があります。MS COCOのデータセットはかなり大きいので、ダウンロードに数時間かかりますが、評価やトレーニングもしたいという人はget_coco.shを使ってcocoフォルダにダウンロードしておきます。

chmod u+x code/scripts/get_coco.sh
./code/scripts/get_coco.sh

評価やトレーニングはせずに、検出だけ試せればいいという人は、フォルダだけ作っておいて下さい。フォルダが無いと後ので順でエラーになるので忘れず作って下さい。

mkdir coco

Mac用YOLOv7コンテナを立ち上げる

Dockerfileを作って、コンテナイメージにして、それを起動する流れでMac用のYOLOv7の環境を作ります。

Dockerfile作成

FROM bitnami/pytorch

USER root
RUN apt update
RUN apt install -y zip htop screen libgl1-mesa-glx
RUN pip install seaborn thop tqdm opencv-python scipy

CMD bash

bitnami/pytorchをベースに対しYOLOv7 Installationに記載のパッケージをインストールするDockerfileです。

コンテナイメージ作成

作成したDockerfileからコンテナイメージをcustom-pytorchという名前で作成します。

docker build --tag custom-pytorch .

コンテナ起動

docker runコマンドを使ってコンテナイメージを起動します。

docker run --rm --platform linux/amd64 --name yolov7 -it -v `realpath coco`:/coco/ -v `realpath code`:/yolov7 --shm-size=64g custom-pytorch

codeフォルダはYOLOv7のリポジトリのクローン、cocoフォルダはmkdirしたか、get_coco.shを使ってダウンロードしたMS COCOデータセットです。前述した手順をすっ飛ばしているとこれらのフォルダが無くてエラーになるので注意です。

YOLOv7を使ってみる

ようやく準備が完了したので、YOLOv7を使ってみます。

コンテナ内で、まずYOLOv7のプログラムがある/yolov7に移動します。

cd /yolov7

そしてYOLOv7 Testingに載っている動作確認用のコマンドを実行してみます。

python detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source inference/images/horses.jpg

--source /yolov7/inference/images/horses.jpgで物体検出をかる対象を指定しています。結果はyolov7/runs/detect/exp/horses.jpgに書き出されました。

inference/images/bus.jpgに対しても物体検出かけてみました。

かなり小さいtieも検出していてすごい!しかし画像右上にある自転車までは見抜けなかったようであるな!クックック!…誰キャラ!?(謎)

動いた!…けど

無事、Mac上でYOLOv7を動かすことに成功しました。

でも、ここまで頑張っておいて今更ですが、YOLOv7を使いたいなら、素直にCUDAが使える環境を使ったほうがいいです(爆)

それかYOLOv8です。Mac上でも簡単に動かすことがきるので、Macユーザーの方はぜひYOLOv8を使ってみて下さい。

-人工知能

© 2024 ヂまるBlog