Vitis AI Model ZooでPyTorch+YOLOXを動かそうとしたメモ

本サイトはアフィリエイト広告を利用しています。
AI

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で動かすメモ

Ultra96-V2とVitis-AIをAventのplatformsで動かすメモ
Ultra96-V2でVitis-AI 2.0を動かしてみました。 Aventが提供しているimgファイルを使えばデモ程度は簡単に動作できます。 手順を紹介します。

 

下記のサンプルフォルダがありました。よろしければ試してみて下さい。

/home/root/Vitis-AI/demo/Vitis-AI-Library/samples/yolovx/

Vitis AIを慣れるために

今回記事を書いた背景としては、下記コンテスト時にVitis AIで苦戦していたためです。

サンプル・デモを弄って、少しずつですが経験を積んでいます。

AIエッジコンテストが勉強になった(難しかった)件

AIエッジコンテストが勉強になった(難しかった)件
第5回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をクローンします。

git clone --recurse-submodules https://github.com/Xilinx/Vitis-AI
cd Vitis-AI/
export VITIS_AI_HOME=$PWD
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にしておきます

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:


Docker Desktop WSL 2 backend on Windows
Turn on the Docker WSL 2 backend and get to work using best practices, GPU support, and more in this thorough guide.

 

AI-Model-Zooからサンプルを入手する

dockerとVitis AIを立ち上げる前に、必要な環境を整えておきます。

今回はPyTorch+YOLOXの画像認識のサンプルです。

cd /mnt/c/Xilinx/Vitis-AI/models/AI-Model-Zoo
cat model-list/pt_yolox_TT100K_640_640_73G_2.0/model.yaml
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」のものを使っています。

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

 

解凍すると、readme.mdがあるので手順に関してはしっかり見た方が良いです。

ここに一番重要なコンパイルまでの流れが記載されています。

 

学習に使うデータセットを入手する

学習するためのTT100Kのデータセットをダウンロードする必要があります。

(TT100K…道路標識を検出・識別するためのデータセットのようです)

Tsinghua-Tencent 100K Tutorial

 

実際のデータの中身は下記のように写真が一杯詰まっています。

 

ZIPの状態でも約20GBあるのでご注意下さい。

readmeに従い、データセットはZIPの状態でcode→datasetsのフォルダに移動しておきます。

wget http://cg.cs.tsinghua.edu.cn/traffic-sign/data_model_code/data.zip

 

Vitis AIを起動する

Vitis AIを起動して、学習を進めていきます。

cd $VITIS_AI_HOME
sudo ./docker_run.sh xilinx/vitis-ai-cpu:latest
conda activate vitis-ai-pytorch

 

pt_yolox_TT100K_640_640_73G_2.0のフォルダに移動して、下記を実行します。

pip install --user -r requirements.txt
pip install --user -v -e

 

TT100Kのデータセットを学習できるように、変換スクリプトがあるので走らせます。

ダウンロードしたZIPファイルの解凍から実施してくれます。

bash datasets/convert_label.sh

 

学習するスクリプトのrun_train.shを実行させるにあたって下記インストールが必要でした。

bash run_train.sh
pip install loguru
pip install yolox

 

ExpDeploy?という変な名前が使われていた

ただ必要なものをインストールしても、中のPythonのプログラムでエラーが出ていました。

エラー出しているのは"exps/example/custom/yolox_m_tt100k_float.py"です。

ExpDeployの名前が変ということでした。

(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」にすると動作しました

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)を積んでいないためです。

(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に変更
# 残り時間の表示
!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を動かした記事が下記となります。

KV260でYOLOX+DPUの物体検出をしてみたメモ

KV260でYOLOX+DPUの物体検出をしてみたメモ
FPGAでYOLOXの物体検出をしてみました。 使用したFPGAの評価ボードはKV260です。 Vitis AIのサンプルを使って簡単にテストした内容を紹介します。

コメント