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-py3
はnvidia-docker
とセットで使われることが前提だからです。
他のPyTorchコンテナイメージを使うための準備
Macではnvcr.io/nvidia/pytorch:21.08-py3コンテナイメージが使えないので、代わりにbitnami社が提供しているPyTorchコンテナイメージを使うことにします。
このコンテナイメージはx64用にビルドされているので、Docker Desktopの設定でRosettaを有効にしておきます。
これで、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を使ってみて下さい。