WSL2 Docker YOLOv8 - eiichiromomma/CVMLAB GitHub Wiki

(WSL2) DockerでYOLOv8

用途一覧-cpuとかがtagsでの付帯文字を意味する。右側のdocker pullのコマンドをコピーして,WSL2(Ubuntu)に貼り付けてイメージを入手する。

ここではCPUでの推論のlatest-cpuを持ってくる。(latest-pythonはいきなりpythonのインタプリタが開くので微妙)

docker pull ultralytics/ultralytics:latest-cpu

で,docker runするときにultralytics/ultralytics:latest-cpuを指定すれば使えるようになる。(いきなりrunのときのイメージ指定をしても同じでpullは事前にダウンロードする命令)

テスト用の画像をwgetでダウンロードしてからコンテナを起動する。 yoloコマンドでの推論結果は自分が居る場所のproject/nameに保存されるが,単純にdockerを起動するとWindowsから開けないので-vオプションでUbuntuのホームをコンテナの/mnt/workdirにマウントして作業する。

sudo apt install -y wget
wget \
https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Collage_of_Nine_Dogs.jpg/1229px-Collage_of_Nine_Dogs.jpg

docker run -it -v $HOME:/mnt/workdir --ipc=host \
    ultralytics/ultralytics:latest-cpu

で,コンテナが起動したら

cd /mnt/workdir
yolo predict model=/usr/src/ultralytics/yolov8n.pt \
source=1229px-Collage_of_Nine_Dogs.jpg project=mypj name=test1

で推論が完了する。Windowsのエクスプローラーで左の一覧からLinux->Ubuntu->home->ユーザー名->mypj->test1と掘っていくと推論結果の画像が置いてある。

結果のGUI表示

結果の表示には色々足りてない状態だが配布元はheadless運用前提なんだからという感じなので自分で入れるしかない(ならドキュメント描くなよ)

X Window Systemを使えるコンテナが必要なので下記のようにrunする。

xhost +
docker run -it -v $HOME:/mnt/workdir --ipc=host \
    --mount type=bind,source=/tmp/.X11-unix,target=/tmp/.X11-unix \
    --mount type=bind,source=/mnt/wslg,target=/mnt/wslg \
    --env DISPLAY=${DISPLAY} --env WAYLAND_DISPLAY=${WAYLAND_DISPLAY} \
    --env XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} \
    ultralytics/ultralytics:latest-cpu

で,コンテナが起動したら下記を実行する。libqt5gui5が足りてないパッケージで,yoloの最後にshow=Trueを付けるとGUIで結果表示になる。

cd /mnt/workdir
apt install -y libqt5gui5

yoloコマンド

yolo predict model=/usr/src/ultralytics/yolov8n.pt \
    source=1229px-Collage_of_Nine_Dogs.jpg \
    project=mypj name=test2 show=True

で表示はされるが0.5秒くらいで消える。動画とかWebCAM用だとのことでどうにもならない。

動画の場合は確かにちゃんと表示されるが、今度はターミナル上で^Cしないと止まらない状態になる。あと結果フォルダにデカい動画が保存される。

yolo predict model=/usr/src/ultralytics/yolov8n.pt source='https://www.youtube.com/watch?v=1HmGLV46L60' project=mypj name=test3 show=True

Python I/F

Pythonの場合もあまり便利なツールは入ってなさそうなのでipythonを入れておく。 コンテナ内で

python3 -m pip install ipython
ipython

でipython上で

from ultralytics import YOLO
model = YOLO('/usr/src/ultralytics/yolov8n.pt')
results = model.predict('1229px-Collage_of_Nine_Dogs.jpg',show=True)

という感じで推論の結果が表示できる。