LoginSignup
1
1

RHEL on Power10 で ONNX ランタイム推論とYOLOv4 model による画像の物体検出

Last updated at Posted at 2024-04-07

はじめに

YOLOv4 モデルを使用して IBM Power10 システム上で ONNX ランタイム推論による画像の物体検出を確認したログです。


・Yolo (よーろー)とは?

Yolo は You Only Look Once の略で、畳み込みニューラル ネットワークを介したシングル パスで画像を処理する物体検出モデルです。

・ONNX (オニキス)とは?
https://github.com/onnx/onnx

Open Neural Network Exchange (ONNX) は、AI 開発者がプロ​​ジェクトの進化に合わせて適切なツールを選択できるようにするオープン エコシステム。 ONNX は、ディープ ラーニングと従来の ML の両方の AI モデルのオープンソース形式を提供します。これは、拡張可能な計算グラフ モデルを定義するだけでなく、組み込み演算子と標準データ型の定義も定義します。現在、推論 (スコアリング) に必要な機能に焦点を当てている。


環境

RHEL 9.2 on Power10 (S1022) (CPU 0.25, Memory 4GB)
(GPU ではなくPower10 CPUの環境です)

  • micromamba 導入、RocketCE 設定

以下で作成したサーバーを使用しています。


仮想環境設定

・ base 環境から抜けます。

(base)  # micromamba deactivate

・python3.11 の test_yolo という名前の仮想環境を作成

 # conda create --name test_yolo python=3.11

~ ログは省略 ~

conda コマンドはありますが、activate オプションが実行できず...

 # conda activate test_yolo
usage: conda [-h] [-v] [--no-plugins] [-V] COMMAND ...
conda: error: argument COMMAND: invalid choice: 'activate' (choose from 'clean', 'compare', 'config', 'create', 'info', 'init', 'install', 'list', 'notices', 'package', 'remove', 'uninstall', 'rename', 'run', 'search', 'update', 'upgrade', 'doctor', 'env')

原因究明はひとまず置いておいて、micromamba コマンドを使用して環境作成します。

 # micromamba activate test_yolo

~ ログは省略 ~

rocketce チャネルからそれぞれモジュールを導入します。

・onnx のインストール

(test_yolo) # conda install onnx -c rocketce

~ ログは省略 ~

onnx 1.14 が導入されました。

(test_yolo) # conda list | grep onnx
onnx                      1.14.0          h3cbdf76_py311_pb4.21.12_1    rocketce

・onnxruntimeのインストール

(test_yolo) # conda install onnxruntime -c rocketce

~ ログは省略 ~

・scipy のインストール

(test_yolo) # conda install scipy -c rocketce

~ ログは省略 ~

・opencv のインストール

(test_yolo) # conda install opencv -c rocketce

~ ログは省略 ~

・pillow のインストール

(test_yolo) # conda install pillow -c rocketce

~ ログは省略 ~

・matplotlib のインストール

(test_yolo) # conda install matplotlib

~ ログは省略 ~

モジュール導入はここまで。


YOLO設定

onnx model zoo から yolo4 モデル、ラベル、アンカーをダウンロードします。

・work ディレクトリ作成

(test_yolo) # mkdir /work
(test_yolo) # cd /work

・yolo4.onnx のダウンロード

(test_yolo) # wget https://github.com/onnx/models/raw/main/validated/vision/

・coco.names のダウンロード

(test_yolo) # wget https://github.com/onnx/models/raw/main/validated/vision/object_detection_segmentation/yolov4/dependencies/coco.names

・yolov4_anchors.txt のダウンロード

(test_yolo) # wget https://github.com/onnx/models/raw/main/validated/vision/object_detection_segmentation/yolov4/dependencies/yolov4_anchors.txt

・onnx_yolo.py を作成します。
 中身はブログ記事 にあるスクリプトそのままの内容です。

(test_yolo) # touch onnx_yolo.py
(test_yolo) # vi onnx_yolo.py

・使用する image.jpg を同じフォルダにアップロードします。

(test_yolo) # ls -ltr
total 254260
-rw-r--r--. 1 root root 257470589 Apr  7 04:08 yolov4.onnx
-rw-r--r--. 1 root root       627 Apr  7 04:08 coco.names
-rw-r--r--. 1 root root        69 Apr  7 04:09 yolov4_anchors.txt
-rw-r--r--. 1 root root      9555 Apr  7 04:10 onnx_yolo.py
-rw-r--r--. 1 root root   2866017 Apr  7 04:18 image.jpg

image.jpg は手元にあった頂き物の個人撮影の写真を使用しています。(写真使用許諾済みです)

中米に生息する ケツァール (Quetzal, 最も美しいと言われている幻の鳥) の写真です。

こちらをサンプルの python script を実行します。

(test_yolo) # time python3 onnx_yolo.py -i ./image.jpg

real	0m5.477s
user	0m2.632s
sys	0m0.100s

わずかな時間で検出が完了しています。

onnx_yolo.py 実行後、output.jpg が作成されました。

(test_yolo) # ls -ltr
total 255480
-rw-r--r--. 1 root root 257470589 Apr  7 04:08 yolov4.onnx
-rw-r--r--. 1 root root       627 Apr  7 04:08 coco.names
-rw-r--r--. 1 root root        69 Apr  7 04:09 yolov4_anchors.txt
-rw-r--r--. 1 root root      9555 Apr  7 04:10 onnx_yolo.py
-rw-r--r--. 1 root root   2866017 Apr  7 04:18 image.jpg
-rw-r--r--. 1 root root   1247093 Apr  7 04:30 output.jpg
(test_yolo) #

結果確認

output.jpg ではケツァールの身体部分が赤い四角に囲まれて認識されています。(尾は途中まで...)


上記はトレーニング済みモデルを使用して推論(inference)のみを実行した確認でした。
(推論は Power10 が得意とするところです! )

以上です。

1
1
4

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
1
1