Vitis AI Model ZooでPyTorch+YOLOXを動かそうとしたメモです。
データセットの入手から学習までの流れを実施しています。
手順を紹介します。
Vitis AI Model ZooでPyTorch+YOLOXを動かそうとしたメモ
Vitis AI Model ZooでPyTorch+YOLOXを試そうとしました。
但しサンプルの手順だと学習の所でGPUが必要になりましたので、途中までの記事です。
(筆者のPCがノートでGPUを積んでいないためです)
YOLOXを動かしたいだけならばAventのサンプルで
今回Vitis AIの学習の流れを確認したく、PyTorch+YOLOXの手順を試してみました。
但し、Ultra96-V2でコンパイルされたものがAvnetのプラットフォームで用意されています。
Ultra96-V2での動かし方は下記記事で紹介しています。(リンク先はこちら)
Ultra96-V2とVitis-AIをAventのplatformsで動かすメモ
下記のサンプルフォルダがありました。よろしければ試してみて下さい。
/home/root/Vitis-AI/demo/Vitis-AI-Library/samples/yolovx/
Vitis AIを慣れるために
今回記事を書いた背景としては、下記コンテスト時にVitis AIで苦戦していたためです。
サンプル・デモを弄って、少しずつですが経験を積んでいます。
PyTorch+YOLOXの学習までの流れ(途中)
結果的に途中までになりましたが、公式の手順に従って進めていきます。
実施した環境としては下記です。
- WSL2(Ubuntu-20.04)
- Vitis AI(2.0.0.1103)
https://www.hackster.io/AlbertaBeef/vitis-ai-2-0-flow-for-avnet-vitis-platforms-06cfd6
https://github.com/Xilinx/Vitis-AI
Vitis AIを使えるようにする
まずはVitis AIをクローンします。
1 2 3 4 5 6 7 8 9 10 |
iotengineer22@LAPTOP-NJJLOGKI:/mnt/c/Xilinx$ git clone --recurse-submodules https://github.com/Xilinx/Vitis-AI Cloning into 'Vitis-AI'... remote: Enumerating objects: 72618, done. remote: Counting objects: 100% (264/264), done. remote: Compressing objects: 100% (139/139), done. remote: Total 72618 (delta 89), reused 257 (delta 88), pack-reused 72354 Receiving objects: 100% (72618/72618), 2.07 GiB | 9.20 MiB/s, done. Resolving deltas: 100% (31687/31687), done. Updating files: 100% (35475/35475), done. iotengineer22@LAPTOP-NJJLOGKI:/mnt/c/Xilinx$ cd Vitis-AI/ |
その後dockerを動かそうとしたら、見つからないとエラーが出ました。
WSL2環境でUbuntu-20.04をONにするのを忘れていました。
Docker DesktopからONにしておきます
1 2 3 4 5 6 7 8 |
iotengineer22@LAPTOP-NJJLOGKI:/mnt/c/Xilinx/Vitis-AI$ docker pull xilinx/vitis-ai-cpu:latest The command 'docker' could not be found in this WSL 2 distro. We recommend to activate the WSL integration in Docker Desktop settings. For details about using Docker Desktop with WSL 2, visit: https://docs.docker.com/go/wsl2/ |
AI-Model-Zooからサンプルを入手する
dockerとVitis AIを立ち上げる前に、必要な環境を整えておきます。
今回はPyTorch+YOLOXの画像認識のサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
iotengineer22@LAPTOP-NJJLOGKI:/mnt/c/Xilinx/Vitis-AI/models/AI-Model-Zoo$ cat model-list/pt_yolox_TT100K_640_640_73G_2.0/model.yaml ~~ description: Yolox-m on COCO task: Traffic Sign Detection framework: pytorch prune: 'no' version: 2.0 input size: 3*640*640 float ops: 73G files: - name: pt_yolox_TT100K_640_640_73G_2.0 type: float & quantized board: GPU download link: https://www.xilinx.com/bin/public/openDownload?filename=pt_yolox_TT100K_640_640_73G_2.0.zip checksum: a00e64f7a256ff05fe81a6b2e74b8a32 |
最終的にはUltra96-v2で動かしたいので「type: float & quantized」のものを使っています。
解凍すると、readme.mdがあるので手順に関してはしっかり見た方が良いです。
ここに一番重要なコンパイルまでの流れが記載されています。
学習に使うデータセットを入手する
学習するためのTT100Kのデータセットをダウンロードする必要があります。
(TT100K…道路標識を検出・識別するためのデータセットのようです)
実際のデータの中身は下記のように写真が一杯詰まっています。
ZIPの状態でも約20GBあるのでご注意下さい。
readmeに従い、データセットはZIPの状態でcode→datasetsのフォルダに移動しておきます。
Vitis AIを起動する
Vitis AIを起動して、学習を進めていきます。
pt_yolox_TT100K_640_640_73G_2.0のフォルダに移動して、下記を実行します。
TT100Kのデータセットを学習できるように、変換スクリプトがあるので走らせます。
ダウンロードしたZIPファイルの解凍から実施してくれます。
学習するスクリプトのrun_train.shを実行させるにあたって下記インストールが必要でした。
ExpDeploy?という変な名前が使われていた
ただ必要なものをインストールしても、中のPythonのプログラムでエラーが出ていました。
エラー出しているのは"exps/example/custom/yolox_m_tt100k_float.py"です。
ExpDeployの名前が変ということでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
(vitis-ai-pytorch) Vitis-AI /workspace/models/AI-Model-Zoo/pt_yolox_TT100K_640_640_73G_2.0/code > bash run_train.sh Traceback (most recent call last): File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.6/site-packages/yolox/exp/build.p y", line 13, in get_exp_by_file current_exp = importlib.import_module(os.path.basename(exp_file).split(".")[0]) File "/opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.6/importlib/__init__.py", line 12 6, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 678, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "exps/example/custom/yolox_m_tt100k_float.py", line 20, in <module> from yolox.exp import ExpDeploy as MyExp ImportError: cannot import name 'ExpDeploy' |
yolox_m_tt100k_float.pyの中身を見ると、最初のインポート箇所で間違っている様子?
「ExpDeploy」→「Exp」にすると動作しました
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import os #from yolox.exp import ExpDeploy as MyExp from yolox.exp import Exp as MyExp class Exp(MyExp): def __init__(self): super(Exp, self).__init__() self.depth = 0.67 self.width = 0.75 self.exp_name = os.path.split(os.path.realpath(__file__))[1].split(".")[0] ~~~~~~~~ |
但し、学習するシェルスクリプトがGPU使ってねというエラーが出ました。
筆者のPCがノートなのでGPU(CUDA)を積んでいないためです。
1 2 3 |
(vitis-ai-pytorch) Vitis-AI /workspace/models/AI-Model-Zoo/pt_yolox_TT100K_640_640_73G_2.0/code > bash run_trai /opt/vitis_ai/conda/envs/vitis-ai-pytorch/lib/python3.6/site-packages/torch/cuda/__init__.py:52: UserWarning: Ce check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx (Trigwork/c10/cuda/CUDAFunctions.cpp:100.) return torch._C._cuda_getDeviceCount() > 0 |
ColabでPytorchとYoloxを学習させようとしたメモ
ノートPCにはGPUが無いので、ColabのGPUを使ってPytorchとYoloxの学習を試みました。
但し、デフォルトの設定だと4枚のGPUを使って学習させるスクリプトでした。
またデータセットも約20GBあるので、GPU上のメモリエラーも出てきます。
正常な学習にならないかもしれませんが、お試しなので緩くした条件で実施してみました。
- GPUの使用数を4→1に変更
- エポック(epoch)数を300→10に変更
- バッチサイズ(BATCH_SIZE)を64→16に変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# 残り時間の表示 !cat /proc/uptime | awk '{printf("残り時間 : %.2f", 12-$1/60/60)}' # 作業用フォルダの作成 from google.colab import drive drive.mount('/content/drive') #!mkdir -p '/content/drive/My Drive/work/' %cd '/content/drive/My Drive/work/' #pytroch+yoloxのサンプルをダウンロード #!wget https://www.xilinx.com/bin/public/openDownload?filename=pt_yolox_TT100K_640_640_73G_2.0.zip #!unzip openDownload\?filename\=pt_yolox_TT100K_640_640_73G_2.0.zip #データセットを入れるフォルダに移動 #%cd pt_yolox_TT100K_640_640_73G_2.0/ #!pwd #!ls #%cd code/datasets #tt100kのデータセットをダウンロード(20GB近い容量) #!wget http://cg.cs.tsinghua.edu.cn/traffic-sign/data_model_code/data.zip #Readmeに従って必要なものをインストール %cd '/content/drive/My Drive/work/pt_yolox_TT100K_640_640_73G_2.0/' !pip install --user -r requirements.txt #Readmeに従って変換スクリプト実行 %cd '/content/drive/My Drive/work/pt_yolox_TT100K_640_640_73G_2.0/code/' #!bash datasets/convert_label.sh #学習に必要なライブラリをインストール !ls !pip install yolox !pip install --upgrade numpy !nvidia-smi #Readmeに従って学習スクリプト実行 !bash run_train.sh |
Colab上でも学習スクリプトのrun_train.shは動かせれました。
但し、その次のデモや量子化のスクリプトで下記エラーが出ました。
ModuleNotFoundError: No module named 'pytorch_nndct'
恐らくconda環境など上手く合わせればエラー解消できそうですが、
量子化含めてGPUあるVITIS AIのdocker環境でないと結構厳しそうです。
一旦ここで止めておきたいと思います。
まとめ
Vitis AI Model ZooでPyTorch+YOLOXを動かそうとしたメモです。
よろしければ皆さまも試してみて下さい。
実際にFPGA(KV260)でYOLOを動かした記事が下記となります。
コメント