はじめに
前回の記事

前回はまずdocker環境の作成(というより確認)を行いました。
入場者のカウントをするために、まず物体検出で人を検出する必要があります。動作させるまでが比較的簡単で、かつ情報も多い「YOLOv5」を使ってみたいと思います。
結論
色々やってみて書いてみたものの…
結論から言うと元々NVIDIAから用意されているL4T(Jetson Linux)の環境でYOLOv5を動作させることは難しいと判断し、
JetsonのOSごと入れ替えることにしました。
ということで、以降はメモになってしまいましたがまあ参考程度に…
ここからはメモ(トライした内容)
YOLOv5が動作するDocker環境を作る
チュートリアルが用意されているので、それほど難しくはなさそうに見えます(多分)。
docker imageをつくる
少し古い記事ですが、こちらを参考にしました。
まずは、
$ docker run --runtime nvidia -it --net host nvcr.io/nvidia/l4t-pytorch:r32.5.0-pth1.7-py3 bash
Unable to find image 'nvcr.io/nvidia/l4t-pytorch:r32.5.0-pth1.7-py3' locally
r32.5.0-pth1.7-py3: Pulling from nvidia/l4t-pytorch
5000a6c32c5a: Pulling fs layer
8e855b69096a: Pull complete
8db8dbbd4bb9: Pull complete
833dc3235950: Pull complete
f79d264135a3: Pull complete
1c40f77bb35b: Pull complete
1990ecf0bfb7: Pull complete
c8ffbfd7f0aa: Pull complete
ba785779122a: Pull complete
024ce79b6790: Pull complete
9b09da3b5483: Pull complete
17f974a43cf9: Pull complete
211b56b73ff1: Pull complete
78aca4be1f3b: Pull complete
95f34310bbda: Pull complete
678c9d1557e9: Pull complete
ec17ad7cab01: Pull complete
08fb1eee5328: Pull complete
a7d175f2b9c4: Pull complete
073654dab576: Pull complete
c7f104909386: Pull complete
506acb5475de: Pull complete
a78c74a50f25: Pull complete
4ff84ca23dc9: Pull complete
9fc338f2fa9b: Pull complete
f4efaaf0a448: Pull complete
c5458d5c46d6: Pull complete
4b7e04ab7ace: Pull complete
f30dd4ea24f0: Pull complete
66bcdc238401: Pull complete
Digest: sha256:bf222a8211fbb3f5e6d2814e6cd29f69bc08060e3ca4de6a8bc0bd36897dd3bf
Status: Downloaded newer image for nvcr.io/nvidia/l4t-pytorch:r32.5.0-pth1.7-py3
あとで思いましたが、docker runするより先にpullする方が分かりやすかった気がします…
「YOLO v5 のrequire.txtを使用して入れると、OpenCVが動かない」と大事なことが書いてあるので、その情報に従ってOpenCVをインストールします。
docker run --runtime nvidia -it --name my_container nvcr.io/nvidia/l4t-pytorch:r32.5.0-pth1.7-py3 bash
コンテナを上記コマンドで立ち上げた後、下のコマンドで各モジュールをインストールします。
apt update && apt install -y python3-opencv ssh && pip3 install -U pip && pip3 install requests tqdm pyyaml seaborn pycocotools thop
一旦コンテナを抜けた後、以下のコマンドでimageとして保存します。
名前は後でわかりやすそうな名前を適当につけました。
sudo docker commit my_container myrepo/jetson-l4t:r32.5.0-pth1.7-py3-yolov5-2025-01-11
参考にした記事ではtensorboard, opencv-python, torchvisionそれぞれをコメントアウトするように記載されていたので、それに従ってrequirements.txtの該当箇所をコメントアウトします。
※最新コードではtensorboardはすでにコメントアウト済だったため、opencv-pythonとtorchvisionだけコメントアウトしました。
~/workの配下にyolo-v5をクローンしたため、 ~/workspaceに割り当てます。
※個人的には自動的に削除する方が好きなので--rmのオプションを入れています。
sudo docker run --rm -it --name my_container -v ~/work:/work myrepo/jetson-l4t:r32.5.0-pth1.7-py3-yolov5-2025-01-11
python detect.py --weights yolov5s.pt --source path/to/images
File "detect.py", line 1
SyntaxError: Non-ASCII character '\xf0' in file detect.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
嫌がらせかな?笑🚀
# Ultralytics YOLOv5 🚀, AGPL-3.0 license
また止まった。
File "detect.py", line 183
model.warmup(imgsz=(1 if pt or model.triton else bs, 3, *imgsz)) # warmup
むむ。どうも準備した環境はPythonのversionが3.6.9になっているんですが、
上記の表記はverison3.8以降とのこと。
Pythonを入れ直してもいいけど依存関係が崩れるのが怖いので…
ということで仕切り直します!
version3.6で実行できたと情報がある辺りのコミットまで戻ってみることにしました。
ただ。これも動かず(やはりversion3.8以降を想定している模様)
(これ以外にもpython3.8を入れ直そうとしてみましたが、ライブラリの依存関係がうまく解消できなかったのかうまくいかず…)
結局。色々と調べてみました。
- JetsonnanoのL4TはR32までしかサポートされておらず、Python3.6(ここ重要)がデフォルトとなっているとのこと。
- そのため、Python3.8以上を想定するYOLOv5はそのままでは動かない
- そうするとPython3.8を入れるしかないが、せっかく用意されていたcuDNNやCUDAなどの依存関係が壊れてしまう
また、YOLOv5のissueを見つけてしまいました。
色々書かれてはいますが、
簡単に言うとYOLOv5はPython3.8以降しか想定してないから、頑張って環境作ってね。とのこと。
JetsonのL4Tバージョンを更新してPython3.8以降に対応するようにしてね、とのアドバイスもありますが、
Jetson nanoに対応しているのは以下のページにあるように、L4T 32.7.6まで(v34以降は対象外、32まではPython3.6)なので更新しようがないんですよね。

(YOLOv5をPython versionのアップデートなしJetsonで動かした、という記事をいくつか見ましたが…うーん。。なんでだろう)
ということで。これ以上同じ流れで進めても深みにはまりそうな気がしてきたので、
別途見つけてきたJetson nano向けのUbuntu20.04にOSを切り替えることにしました。(Ubuntu20.04はPython3.8がデフォルト)
また、このOSを使ってYOLOv5を動作させる情報もありました。
ということで、JetsonnanoにUbuntu20.04をインストールする方針に変更!
次回に続きます。