LoginSignup
3
2

More than 1 year has passed since last update.

Jetson Xavier AGXでYOLOXを動かす ちょっとだけベンチマーク

Last updated at Posted at 2022-11-20

はじめに

Yolov4を使って野鳥の検出をしていたのですが、Yoloxがどんなものかと試したくなって動かすことにしました。
動かそうとしたらpythonのバージョンかえるところから始まってたので、せっかくならばと、Jetpack5.02に入れ替えてDocker上でGPU使ってYOLOXを動かしました。

やったこと

Jetson Xavier AGX上のDockerでGPUがイネーブルの状態でYOLOXを動かしました

前提

Jetpack5.02
XavierAGX たぶん XavierNXでも行ける
l4t-pytorch:r35.1.0-pth1.13-py3 をベースにして使う

いじったところ

onnx関連でエラーが出まくるのと、もともとのコンテナにtorchvision, opencv, pytorchが入っていてバッティングしてエラーが出まくるのでこれらを全部放置して動かしてます。

Dockerfile

FROM nvcr.io/nvidia/l4t-pytorch:r35.1.0-pth1.13-py3
RUN apt update
RUN apt install sudo
RUN apt-get install -y zip
RUN apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
RUN apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
RUN apt-get install -y libv4l-dev v4l-utils qv4l2
RUN apt-get install -y curl
RUN apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
RUN python3 -m pip install -U pip
RUN python3 -m pip install loguru tqdm thop ninja tabulate
RUN python3 -m pip install pycocotools
RUN cd /root && git clone https://github.com/Megvii-BaseDetection/YOLOX.git
RUN cd /root/YOLOX && \
    sed -i '/torchvision/d' requirements.txt && \
    sed -i '/numpy/d' requirements.txt && \
    sed -i '/torch/d' requirements.txt && \
    sed -i '/opencv/d' requirements.txt && \
    sed -i '/pycocotools/d' requirements.txt && \
    sed -i '/onnx/d' requirements.txt && \
    sed -i '/onnx/d' requirements.txt && \
    sed -i '/onnx/d' requirements.txt
RUN cd /root/YOLOX && python3 -m pip install -v -e .
RUN cd /root/YOLOX && wget https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth

コマンド並べただけですが、とりあえず動くはず
余計なv4l2がらみがいっぱい入ってますが、これは個人的に必要なためです。カメラを遠隔で使う都合があるので。

実行

docker build -t yolox:100 .
とかしてBUILDして
sudo docker run -it --rm --net=host --runtime nvidia -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix yolox:100
とかしてコンテナを実行
コンテナ上で
cd /root/YOLOX して
python3 tools/demo.py image -n yolox-s -c ./yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu
で実行
結果は、

2022-11-20 04:35:42.994 | INFO     | __main__:main:259 - Args: Namespace(camid=0, ckpt='./yolox_s.pth', conf=0.25, demo='image', device='gpu', exp_file=None, experiment_name='yolox_s', fp16=False, fuse=False, legacy=False, name='yolox-s', nms=0.45, path='assets/dog.jpg', save_result=True, trt=False, tsize=640)
2022-11-20 04:35:44.345 | INFO     | __main__:main:269 - Model Summary: Params: 8.97M, Gflops: 26.93
2022-11-20 04:35:47.383 | INFO     | __main__:main:282 - loading checkpoint
2022-11-20 04:35:47.811 | INFO     | __main__:main:286 - loaded checkpoint done.
2022-11-20 04:35:51.695 | INFO     | __main__:inference:165 - Infer time: 3.7249s
2022-11-20 04:35:51.701 | INFO     | __main__:image_demo:202 - Saving detection result in ./YOLOX_outputs/yolox_s/vis_res/2022_11_20_04_35_47/dog.jpg

とかでてきてJPGの形でセーブされます。

おまけとちょっとだけベンチマーク

ビデオだったら
python3 tools/demo.py video -n yolox-s -c ./yolox_s.pth --path [VIDEOFILE] --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu
とかやるとビデオのファイル、もしくは[VIDEOFILE] のとこに0とか指定するとリアルタイムに0番のカメラからデータをキャプチャして推論します。
ちなみにGPUをイネーブルにしてやるとこんな感じ

2022-11-20 04:49:44.112 | INFO     | __main__:inference:165 - Infer time: 0.0631s
2022-11-20 04:49:44.224 | INFO     | __main__:inference:165 - Infer time: 0.0597s
2022-11-20 04:49:44.340 | INFO     | __main__:inference:165 - Infer time: 0.0501s
2022-11-20 04:49:44.438 | INFO     | __main__:inference:165 - Infer time: 0.0455s
2022-11-20 04:49:44.532 | INFO     | __main__:inference:165 - Infer time: 0.0430s
2022-11-20 04:49:44.631 | INFO     | __main__:inference:165 - Infer time: 0.0436s

一方でCPUでやると同じファイルが
python3 tools/demo.py video -n yolox-s -c ./yolox_s.pth --path [VIDEOFILE] --conf 0.25 --nms 0.45 --tsize 640 --save_result --device cpu

2022-11-20 04:52:50.873 | INFO     | __main__:inference:165 - Infer time: 1.4069s
2022-11-20 04:52:52.088 | INFO     | __main__:inference:165 - Infer time: 1.1500s
2022-11-20 04:52:53.281 | INFO     | __main__:inference:165 - Infer time: 1.1185s
2022-11-20 04:52:54.350 | INFO     | __main__:inference:165 - Infer time: 0.9998s
2022-11-20 04:52:55.453 | INFO     | __main__:inference:165 - Infer time: 1.0002s

こんな感じ

参考
Jetson(NX)でPyTorchとYOLOv5を動かす(Dockerを使用)

How to Run Object Detection YOLOX on PyTorch with Docker on NVIDIA® Jetson™ Modules?
こっちは、やりはじめたトリガで、結局ここからはなれちゃったんですが、これでGPU使えるんでしょうか。。。
末尾の数字はCPUでやったときの時間になってるとおもうんですが。。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2