Jetson Xavier NX Dev kit でYOLOv5をGPUで動かすまでの手順
準備するもの
- Jetson Xavier NX Developer Kit
- SDカード 32GB以上のもの
- Micro USB Type-B(2.0)とPCをつなぐデータ転送ができるタイプのケーブル
次のサイトから
Jetson Xavier NX Developer Kit SD Card Image をダウンロードする
https://developer.nvidia.com/embedded/downloads
ここではJetPack 5.0.2.をダウンロード
この一つ前のバージョンのJetPack 4.6.1. はUbuntu 18.04でJetPack 5.0.2.では Ubuntu 20.04 が起動する
ダウンロードしたファイルを balenaEtcher や Raspberry Pi Imager を用いてSDカードに書き込む
書き込み終了後JetsonにSDカードを差し込み起動するか確認する
うまく起動した場合は運がいい
なぜだかうまくいかないことが多発している
原因の可能性 https://forums.developer.nvidia.com/t/boot-failed-with-find-partition-via-pt-failed/172663/9
起動後はこちらのサイトを参考にSSDにシステムボリュームを変更する
NVIDIA Jetson Xavier NXのシステムボリュームをNVMe SSDに切り替える
別のインストール方法を行う(こちらのほうが時間がとてもかかる)
NVIDIA SDK Managerをインストールする
NVIDIAのアカウント登録が必要
https://developer.nvidia.com/nvidia-sdk-manager
指示に従い全部インストールする
jetsonのインストールを行うと自動でCUDAのサンプルが入っている
usr/local/cuda-11.4内のsamplesをホームに持ってくる
samples/5_Simulations 内のサンプルのどれかに入りmakeを動かそうとすると
libGLU.soとglu.hがないと言われることがある
その場合は
sudo apt install freeglut3-dev libglu1-mesa-dev
これを入力してインストールを行うと無事makeが走るようになる
参考にしたサイト https://ksakiyama134.hatenablog.com/entry/2016/09/25/005130
Jetsonでは通常のpipでインストールしたPytorchでは動かずうまくGPUを使うことができない
さらにエラーも出ないので最初はわけがわからなかった
このようになにか調子が悪いと思ったらその状況をJetson xavier nx特有の問題か調べることが必要となる
NVIDIA公式サイトからインストールを行う
https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html
以下は上記サイトを参考にした
まずsudo apt update
を行う
Pytorchに必要なパッケージをインストールする
sudo apt-get -y install autoconf bc build-essential g++-8 gcc-8 clang-8 lld-8 gettext-base gfortran-8 iputils-ping libbz2-dev libc++-dev libcgal-dev libffi-dev libfreetype6-dev libhdf5-dev libjpeg-dev liblzma-dev libncurses5-dev libncursesw5-dev libpng-dev libreadline-dev libssl-dev libsqlite3-dev libxml2-dev libxslt-dev locales moreutils openssl python-openssl rsync scons python3-pip libopenblas-dev;
エクスポート から インストールまで
export TORCH_INSTALL=https://developer.download.nvidia.com/compute/redist/jp/v50/pytorch/torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
これはJetpack5.0.2用のコマンドで自分のバージョンに応じて/jp/v502/
の部分を適宜変更する
export TORCH_INSTALL=path/to/1.13.0a0+d0d6b1f2.nv22.09
python3 -m pip install --upgrade pip; python3 -m pip install aiohttp numpy=='1.19.4' scipy=='1.5.3' export "LD_LIBRARY_PATH=/usr/lib/llvm-8/lib:$LD_LIBRARY_PATH"; python3 -m pip install --upgrade protobuf; python3 -m pip install --no-cache $TORCH_INSTALL
よくわからないエラーが出ているがインストールはできる
また当然pytorchのバージョンに対応したtorchvisionをインストール必要がある
対応しているバージョンは各々の環境で確認が必要
上のコマンドで入れた人は0.13になるので以下のコマンドを入れる
git clone --branch v0.13.0 https://github.com/pytorch/vision torchvision
cd torchvision
権限を求められるので/usr/lib/python3.8に与える
sudo chmod 777 -R /usr/lib/python3.8
python3 setup.py install
このあとかなり時間がかかってインストールされるので待機
Pytorchとtorchvisionのインストールが終わったら
pip list
で確認を行う。うまくインストールされると下のような表示になる
git clone https://github.com/ultralytics/yolov5
cd yolov5
次に入力するコマンドでrequirements.txtというファイル内に書かれているパッケージがインストールされるのだが、このままだと先程とは違うバージョンのtorchとTorchivsionをインストールしようとするため、requirements.txtのPytorchとTorchivsionの部分を以下のようにコメントアウトしてからコマンドを入力
sudo pip3 install -r requirements.txt
sudoをしっかりつけることが重要
pip list
で多くのパッケージがインストールされたのを確認する
YOLOv5内にはもとからサンプル画像が入っているのでそちらを使って実行してみる
python3 detect.py --source ./data/images/bus.jpg
ここでIPythonやtqdmやseabornがないと言われた場合は
sudo pip3 install ipython
などそれぞれpipでインストールを行う
最初の実行時には学習データのインストールがされるため少し時間がかかる
ここで注目してほしいのが実行画面の最初の一文の最後で
CUDA:0 (GPUの名前, ~~MiB)
と出る
ここでCPUと出ているとうまくインストールができていないか依存関係が間違っているのでやり直す
うまく動くと`runs`というファイルの中に結果のファイルがdetect~という名前が作成される
python3 detect.py
のあとに様々なオプションを設定することができる
ここでは最低限のもののみ説明する
--source
コマンドは画像認識するターゲット(ソース)の設定を行う先程のように画像のパスを渡したり、ファイル名/*
を入力するとファイル内の画像すべてを選択したりできる
webカメラを接続してリアルタイムで行いたい場合は--source 0
でカメラからの動画をソースに設定できる
もしつながらない場合はlsusb
で番号を調べることができる
--weight
コマンドは使用する学習データを変更できる
なにも入れない状態では--weights yolov5s.pt
というサンプルの学習データがデフォルトに設定されている
--conf
コマンドは尤度の設定で0.~の1未満で設定してそれ以下の場合の認識を表示しなくなる
簡単にいえば似ている度合いの基準を設定できて、ある程度似ているなら表示や完璧にそっくりなもののみ表示といったことができる
デフォルトでは0.25に設定されている
以上でインストールは完了