今回はJetson NanoでYOLOv5とPyTorchを使って物体検出をする方法を解説したいと思います。Jetson Nanoに対応しているJetPackの最新バージョンで使用できるものとなっていますので、ぜひ参考にしてみてください。
また、Jetson Nanoに関する記事を以下のページでまとめていますので、あわせてご覧ください。
![](https://murasan-net.com/wp-content/uploads/2022/10/109249311957a9768da5e450028-3-700x300-1-300x129.jpg)
環境
ハードウェア:Jetson Nano A02 4GB
JETPACK SDK:4.6.2
Python:3.6.9
Jetson Nanoの本体については、私が使用しているモデルは旧モデルのA02ですが、これから購入される方はインタフェースなどが増えているB01モデルがおすすめです。
![](https://murasan-net.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png)
![](https://murasan-net.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png)
インストール
Jetson NanoのJetPack上でYOLOv5をセットアップする手順を解説していきます。
手順はez_teraさんの以下の記事を参考にさせて頂きました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9SmV0c29uJTIwTmFubyVFMyU4MSVBOCUyMEpldHNvbiUyMFhhdmllciUyME5YJUUzJTgxJUE3JTIwWU9MT3Y1JUUzJTgyJTkyJUU1JThCJTk1JUUzJTgxJThCJUUzJTgxJTk5JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz0zYWU4NWNhNjRhNWZiMTE4Zjc3ZDE2NmUyMjA3NGI1Ng&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBlel90ZXJhJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz00NWE1NDczNjhkMzU5ZTJkZTA1MmE1MWIxODg4MDczZA&blend-x=142&blend-y=486&blend-mode=normal&s=c0b33f19d9d3695bda535377cf38dfc6)
エディタのインストール
設定ファイルを編集するためのnanoエディタをインストールします。(インストール済みの方は飛ばしてください)
以下のコマンドを実行してください。
sudo apt install nano
スワップ領域の設定変更
Jetson Nanoではメモリーが4GBしかないため、メモリーが不足した際にSDカードをスワップ領域としてしようできるようにします。スワップ領域を変更するためのツールを以下のコマンドでインストールします。
sudo apt install dphys-swapfile
インストールしたら以下のコマンドを実行して、エディタで設定ファイルを開きます。
sudo nano /etc/dphys-swapfile
「CONF_SWAPSIZE」と「CONF_MAXSWAP」の行を以下のように変更してください。(コメントアウトされている場合は#を削除してください)
CONF_SWAPSIZE=4096
CONF_MAXSWAP=4096
OpenCVのインストール
続いて画像処理ライブラリ、OpenCVをダウンロードしてビルドします。任意のフォルダに移動して以下のコマンドを実行してください。
sudo wget https://github.com/Qengineering/Install-OpenCV-Jetson-Nano/raw/main/OpenCV-4-5-0.sh
ダウンロードが完了したら、以下のコマンドを実行してパーミッションを変更します。
sudo chmod 755 ./OpenCV-4-5-0.sh
以下のファイルを実行してビルドします。(かなり時間がかかりますので気長に待ってください)
./OpenCV-4-5-0.sh
PyTorchのインストール
続いてYOLOv5での推論に使用する機械学習ライブラリをインストールします。META社が公開しているPyTorchをインストールします。
任意のディレクトリに移動し、以下のコマンドを実行して必要なファイルをダウンロードします。
sudo wget https://nvidia.box.com/shared/static/cs3xn3td6sfgtene6jdvsxlr366m2dhq.whl -O torch-1.7.0-cp36-cp36m-linux_aarch64.whl
以下のコマンドを実行し、必要なツールをインストールします。
sudo apt install python3-pip libopenblas-base libopenmpi-dev
pip3 install Cython
pip3 install numpy torch-1.7.0-cp36-cp36m-linux_aarch64.whl
torchvisionのインストール
PyTorchで使用するパッケージ、torchvisionをインストールします。以下のコマンドを実行してください。
sudo git clone --branch v0.8.1 https://github.com/pytorch/vision torchvision
ダウンロードしたディレクトリに移動し、セットアップスクリプトを実行します。
cd torchvision
export BUILD_VERSION=0.x.0
sudo python3 setup.py install
cd
YOLOv5のインストール
最後にYOLOv5をインストールします。任意のインストールディレクトリに移動し、以下のコマンドを実行してリポジトリをダウンロードしてください。
sudo git clone https://github.com/ultralytics/yolov5.git
インストールするパッケージのリストを編集します。以下のファイルをエディタで開いてください。
sudo nano requirements.txt
これまで個別にインストールした、以下のツールの行をコメントアウトしてください。
#opencv-python>=4.1.2
#torch>=1.7.0
#tensorboard>=2.2
#torchvision>=0.8.1
以下のコマンドを実行して、インストールを行います。
pip3 install -r requirements.txt
これでYOLOv5を使用する環境のセットアップは完了です。
![](https://murasan-net.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png)
推論を実行する(動作確認)
YOLOv5のディレクトリで「detect.py」を実行して、サンプルで用意されている画像を使って推論を行います。以下のコマンドを実行してください。
sudo python3 detect.py
発生したエラー
私の環境では「detect.py」を実行すると以下のようなエラーが発生しました。
Illegal instruction (コアダンプ)
調査したところCPU命令セットの違いによる可能性があるということで、以下の環境変数の設定を行えば解消されるという情報があったため試してみました。
export OPENBLAS_CORETYPE=ARMV8
私の環境ではこれでも解消されなかったため、さらに調査したところNumPyにバグがあるとの情報が見つかりました。(以下のサイトを参考)
NumPyを最新の1.19.5からバグのない=1.19.3のバージョンに変更します。以下のコマンドを実行してインストールします。
sudo pip3 install numpy==1.19.3
これで私の環境ではエラーが解消されました。
ちなみにNumPy 1.19.4はまた別のバグがあるようです。
![](https://murasan-net.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png)
実行結果
再度「detect.py」を実行すると以下のように無事推論が終了しました。
Fusing layers...
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients, 16.4 GFLOPs
image 1/2 /home/xxxx/yolov5/data/images/bus.jpg: 640x480 4 persons, 1 bus, 133.2ms
image 2/2 /home/xxxx/yolov5/data/images/zidane.jpg: 384x640 2 persons, 2 ties, 108.1ms
Speed: 33.7ms pre-process, 120.6ms inference, 196.2ms NMS per image at shape (1, 3, 640, 640)
Results saved to runs/detect/exp
「runs/detect/exp」を確認すると以下のように推論結果が描画されたファイルが正しく出力されていました。
![](https://murasan-net.com/wp-content/uploads/2022/11/bus-768x1024.jpg)
![](https://murasan-net.com/wp-content/uploads/2022/11/zidane-1024x576.jpg)
![](https://murasan-net.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png)
プログラミングのスキルを活かすには
プログラミングのスキルを仕事に活かすには、フリーランスとして受けられる案件がおすすめです。
![](http://image.moshimo.com/af-img/2225/000000069940.png)
テックゲートフリーランスは、フリーランスエンジニアの案件紹介や契約交渉・債権管理などのサポートを行っているフリーランスエージェントです。
- リモートワーク可能な案件が50%以上
- 週3〜4日の案件の豊富さ
- 年収100万円アップのサポート
無料相談フォームからご登録いただくだけで、経験年数やスキルに合わせて案件をご紹介。また、リモートワーク可能な案件や週3〜4日OKの案件も豊富に用意されています。
副業やフリーランスとして仕事を受けてみたいと考えている方には、テックゲートフリーランスが提供する多様なサポートが非常におすすめです。
\ 無料で登録してみる! /
まとめ
今回はJetson NanoでYOLOv5を使って物体検出を行う方法を解説しました。Jetson NanoでもYOLOv5が使えるようになったことによって、PCでの環境とソースを共有できそうです。JetsonでYOLOを使ってみたい方はぜひ参考にしてみてください。
機械学習を効率よく学びたい方には、自分のペースで動画で学べるUdemyの以下の講座がおすすめです。数学的な理論からPythonでの実装までを習得できます。(私自身もこの講座を受講しています)
![icon](https://murasan-net.com/wp-content/uploads/2022/10/udemy001.jpg)
それでは、また次の記事でお会いしましょう。
![](https://murasan-net.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png)
![](https://murasan-net.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png)
\ 機械学習を学びたい人には自宅で学べるUdemyがおすすめ! /
講座単位で購入できます!
コメント