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)
という感じで推論の結果が表示できる。