0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【推論#03】環境構築(CPUでONNXモデルを動かす準備)

Last updated at Posted at 2025-03-25

前置き

  • この記事はこちらの記事の続きです
  • 専門家ではないので、誤った情報を書いている可能性があります
  • 本稿は環境構築の作業内容を備忘録として残す目的もあります
  • 環境はWSL上で動いているubuntu24.04.2です

動作環境

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.2 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

今回のゴール

  • ONNX形式のAIモデルをPythonで動かすための環境を作る
    • モデルを読み込んで、推論を実行できるようにする

ゴールまでのロードマップ

  1. Pythonの実行環境(Ubuntuなど)
  2. 仮想環境構築&モデル変換(YOLOv5s.pt → YOLOv5s.onnx)
  3. 画像ファイルを用意(テスト推論に使う)
  4. スクリプトを書いて動作確認

ステップ1:Pythonの実行環境

既にインストール済みの場合は飛ばしてください

python & pip のインストール

sudo apt update
sudo apt install python3 python3-pip

バージョン確認

python3 --version
pip3 --version

実行結果

Python 3.12.3
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)

ステップ2:仮想環境構築&モデル変換

作業用ディレクトリの作成

mkdir ~/yolo_export
cd ~/yolo_export

python仮想環境のインストール

apt install python3.12-venv

仮想環境を作成&有効化

python3 -m venv venv
source venv/bin/activate

YOLOv5をクーロン

git clone https://github.com/ultralytics/yolov5.git
cd yolov5

必要なライブラリをインストール

pip install -r requirements.txt

PyTorchモデルをダウンロード

wget https://github.com/ultralytics/yolov5/releases/download/v6.2/yolov5s.pt

yolov5s.ptは小型の学習済み物体検知モデルで、YOLOv5の中でも最軽量

onnxパッケージのインストール

pip install onnx

ONNX形式に変換!!

python export.py --weights yolov5s.pt --include onnx

出力結果

(venv) user1@pc-hogehoge:~/yolo_export/yolov5$ python export.py --weights yolov5s.pt --include onnx
export: data=data/coco128.yaml, weights=['yolov5s.pt'], imgsz=[640, 640], batch_size=1, device=cpu, half=False, inplace=False, keras=False, optimize=False, int8=False, per_tensor=False, dynamic=False, cache=, simplify=False, mlmodel=False, opset=17, verbose=False, workspace=4, nms=False, agnostic_nms=False, topk_per_class=100, topk_all=100, iou_thres=0.45, conf_thres=0.25, include=['onnx']
YOLOv5 🚀 v7.0-405-g61c22e2d Python-3.12.3 torch-2.6.0+cu124 CPU

Fusing layers...
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients, 16.4 GFLOPs

PyTorch: starting from yolov5s.pt with output shape (1, 25200, 85) (14.1 MB)

ONNX: starting export with onnx 1.17.0...
ONNX: export success ✅ 0.5s, saved as yolov5s.onnx (28.0 MB)

Export complete (0.9s)
Results saved to /home/hogehoge/yolo_export/yolov5
Detect:          python detect.py --weights yolov5s.onnx
Validate:        python val.py --weights yolov5s.onnx
PyTorch Hub:     model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.onnx')
Visualize:       https://netron.app

onnx形式でモデルが出力されたことを確認

(venv) user1@pc-hogehoge:~/yolo_export/yolov5$ ls | grep *.onnx
yolov5s.onnx

補足
仮想環境を終了する場合は以下のコマンドで終了できます

deactivate

ステップ3:画像ファイルを用意

推論用に使用するディレクトリを作成する

mkdir ~/onnx_infer
cp ~/yolo_export/yolov5/yolov5s.onnx ~/onnx_infer/
cd ~/onnx_infer

テスト用画像をダウンロード
YOLOv5の公式テスト画像

wget https://github.com/ultralytics/yolov5/releases/download/v1.0/zidane.jpg -O cat.jpg

ステップ4:スクリプトを書いて動作確認

推論スクリプトを作成

vim infer.py
# infer.py

import onnxruntime
import numpy as np
import cv2

# モデル読み込み
session = onnxruntime.InferenceSession("yolov5s.onnx", providers=['CPUExecutionProvider'])
input_name = session.get_inputs()[0].name

# 画像読み込みと前処理
img = cv2.imread("cat.jpg")
img_resized = cv2.resize(img, (640, 640))
input_tensor = img_resized.transpose(2, 0, 1).astype(np.float32) / 255.0
input_tensor = np.expand_dims(input_tensor, axis=0)

# 推論実行
outputs = session.run(None, {input_name: input_tensor})

# 結果表示
print("推論結果(最初の5件):")
print(outputs[0][0][:5])

推論実行に必要なライブラリをインストールしておく

pip install onnxruntime numpy opencv-python pillow
ライブラリ名 用途
onnxruntime モデルの読み込み・推論
numpy データ処理
opencv-python 画像の読み込み&前処理
pillow 画像操作補助(JPEG/PNG対応など)

ついに推論実行

python infer.py
クリックして推論結果を展開
推論結果(最初の5件):
[[4.60047150e+00 4.16389656e+00 9.39333057e+00 1.04818144e+01
  3.80575657e-05 2.94646651e-01 5.80260158e-03 9.09625590e-02
  3.10921669e-03 3.17320228e-03 4.71746922e-03 3.38616967e-03
  1.15715861e-02 4.38219309e-03 8.84476006e-02 1.73011422e-03
  1.14671290e-02 1.02069676e-02 7.45278597e-03 1.20970905e-02
  1.51357055e-03 1.18538737e-03 1.57317519e-03 2.07108259e-03
  1.73816085e-03 7.73370266e-04 3.62813473e-04 1.13889575e-03
  1.09535456e-03 6.70602918e-03 2.99057961e-02 1.07992589e-02
  9.39661264e-03 4.48149443e-03 1.31395459e-03 2.16788054e-03
  1.12858415e-03 6.69628382e-03 4.31805849e-03 2.22900510e-03
  9.47833061e-04 2.60114670e-03 2.82427669e-03 2.29215622e-03
  2.07547545e-02 5.39946556e-03 1.93217397e-02 2.54511833e-03
  5.43254614e-03 3.68407369e-03 2.92974710e-03 2.45100260e-03
  1.41710043e-03 3.10927629e-04 2.31024623e-03 9.79930162e-04
  1.69652700e-03 5.28514385e-04 1.04814768e-03 1.20350718e-03
  1.04835629e-03 5.90691864e-02 1.41942501e-03 1.45716667e-02
  1.17054582e-03 8.23852420e-03 2.06834078e-03 5.76671958e-03
  1.69667602e-03 1.48096681e-03 3.93342972e-03 1.31231546e-03
  8.27994943e-03 1.48966908e-03 1.60786510e-03 4.50164080e-04
  3.60700488e-03 1.62482262e-03 1.34252310e-02 1.22582614e-02
  5.00935316e-03 1.83251500e-03 1.05044246e-03 1.01250410e-03
  1.98215246e-03]
 [1.29365435e+01 5.19810963e+00 2.63305187e+01 1.04390993e+01
  4.15444374e-05 2.17057437e-01 7.19624758e-03 1.40852004e-01
  3.50877643e-03 4.56395745e-03 7.08630681e-03 4.58362699e-03
  1.70014203e-02 6.98190928e-03 8.04540515e-02 1.38911605e-03
  1.17300451e-02 9.19440389e-03 1.23658478e-02 1.24607980e-02
  1.58196688e-03 1.34202838e-03 1.71381235e-03 2.42108107e-03
  2.04387307e-03 1.09437108e-03 4.57972288e-04 1.48898363e-03
  1.32241845e-03 6.72015548e-03 3.94449830e-02 9.41750407e-03
  6.99025393e-03 4.30676341e-03 2.19982862e-03 2.78499722e-03
  1.39001012e-03 6.12443686e-03 5.45051694e-03 2.81038880e-03
  1.04600191e-03 3.69468331e-03 3.97974253e-03 2.89049745e-03
  1.43159926e-02 4.62719798e-03 1.58945620e-02 2.67139077e-03
  4.52718139e-03 3.97631526e-03 4.33894992e-03 3.06382775e-03
  1.73145533e-03 4.54545021e-04 2.31999159e-03 1.18583441e-03
  1.99425220e-03 7.71105289e-04 1.58351660e-03 1.65829062e-03
  1.33273005e-03 6.08043969e-02 1.75139308e-03 1.07770562e-02
  1.73026323e-03 1.41476691e-02 2.77146697e-03 5.55872917e-03
  2.08368897e-03 2.03418732e-03 4.48283553e-03 1.75869465e-03
  1.12851262e-02 1.77353621e-03 2.24003196e-03 6.51448965e-04
  5.82313538e-03 2.02193856e-03 1.36656165e-02 1.33423805e-02
  2.93031335e-03 2.37888098e-03 1.16834044e-03 1.45864487e-03
  2.40692496e-03]
 [1.76604614e+01 5.09148788e+00 3.21387100e+01 1.04772749e+01
  2.27093697e-05 2.33969063e-01 5.61708212e-03 1.04411274e-01
  2.48956680e-03 3.61949205e-03 5.16298413e-03 3.13171744e-03
  1.33068562e-02 4.70572710e-03 7.36366212e-02 1.16786361e-03
  1.20503306e-02 5.90404868e-03 1.02835894e-02 9.59694386e-03
  1.31893158e-03 1.08939409e-03 1.69149041e-03 1.89021230e-03
  1.60312653e-03 7.20083714e-04 4.22447920e-04 8.49962234e-04
  1.00180507e-03 9.33247805e-03 3.54160368e-02 1.45792961e-02
  1.53104663e-02 4.59718704e-03 2.41011381e-03 3.08990479e-03
  1.27604604e-03 7.81571865e-03 5.90571761e-03 2.72104144e-03
  1.15668774e-03 3.21307778e-03 4.43127751e-03 3.46618891e-03
  1.17841065e-02 3.95533442e-03 1.35654211e-02 2.32464075e-03
  3.61999869e-03 2.52887607e-03 2.75796652e-03 2.89514661e-03
  1.74629688e-03 4.06622887e-04 2.52327323e-03 1.12643838e-03
  1.92564726e-03 6.55174255e-04 1.34199858e-03 1.54021382e-03
  1.13773346e-03 4.80687022e-02 1.48087740e-03 8.11588764e-03
  1.49470568e-03 1.02317333e-02 1.88371539e-03 4.33853269e-03
  1.91241503e-03 1.68550014e-03 4.42802906e-03 1.47724152e-03
  9.27144289e-03 1.14497542e-03 1.56822801e-03 5.32716513e-04
  4.33540344e-03 1.62771344e-03 1.28421187e-02 1.26112998e-02
  2.65741348e-03 1.83093548e-03 1.02338195e-03 1.08516216e-03
  2.55885720e-03]
 [2.72238884e+01 4.48930836e+00 2.94944496e+01 9.27263260e+00
  1.80304050e-05 2.83492923e-01 5.01766801e-03 7.84921646e-02
  2.48715281e-03 2.98362970e-03 4.10968065e-03 2.70104408e-03
  8.72173905e-03 3.63764167e-03 8.25126469e-02 1.07309222e-03
  8.88195634e-03 5.86298108e-03 8.03929567e-03 1.05574131e-02
  1.32068992e-03 1.01014972e-03 1.59677863e-03 1.87456608e-03
  1.52018666e-03 7.35491514e-04 4.14073467e-04 8.44627619e-04
  9.91374254e-04 1.03796721e-02 3.83321345e-02 1.69503689e-02
  2.26030648e-02 5.06106019e-03 2.09498405e-03 3.45471501e-03
  1.20970607e-03 1.08503699e-02 4.51272726e-03 3.49348783e-03
  1.27181411e-03 3.64288688e-03 4.11465764e-03 3.93858552e-03
  1.55347884e-02 4.52876091e-03 1.47328377e-02 3.02320719e-03
  4.89920378e-03 3.38208675e-03 2.28077173e-03 3.14998627e-03
  1.86228752e-03 3.93629074e-04 3.22023034e-03 1.23989582e-03
  2.05507874e-03 6.77198172e-04 1.43018365e-03 1.53753161e-03
  1.14315748e-03 3.79902720e-02 1.22106075e-03 7.96484947e-03
  1.25697255e-03 7.65931606e-03 1.54733658e-03 3.76150012e-03
  1.71059370e-03 1.74024701e-03 5.48851490e-03 1.45325065e-03
  1.15481019e-02 1.08850002e-03 1.46964192e-03 5.11646271e-04
  3.87257338e-03 1.47700310e-03 1.17338896e-02 1.51303709e-02
  2.99164653e-03 1.93822384e-03 1.04582310e-03 1.02144480e-03
  2.92631984e-03]
 [3.66491852e+01 4.00580788e+00 2.44058037e+01 8.47877884e+00
  1.65104866e-05 3.46155941e-01 5.56650758e-03 8.32470059e-02
  2.66841054e-03 1.98441744e-03 3.22920084e-03 1.42431259e-03
  7.66795874e-03 3.09702754e-03 8.70836079e-02 1.21712685e-03
  9.56043601e-03 8.86088610e-03 6.31219149e-03 1.29967630e-02
  1.04621053e-03 1.08695030e-03 1.52519345e-03 2.12588906e-03
  1.43560767e-03 8.20666552e-04 4.18543816e-04 8.93741846e-04
  9.94920731e-04 1.70823634e-02 3.86014879e-02 1.87908411e-02
  2.23011672e-02 4.29788232e-03 2.69007683e-03 2.86480784e-03
  1.33240223e-03 1.41561627e-02 5.33625484e-03 3.27405334e-03
  1.71196461e-03 2.65967846e-03 3.80074978e-03 3.60423326e-03
  1.40313804e-02 3.90371680e-03 1.18571222e-02 2.85723805e-03
  3.40411067e-03 2.96461582e-03 1.79082155e-03 3.34951282e-03
  1.70764327e-03 4.01854515e-04 3.54576111e-03 1.37251616e-03
  2.36696005e-03 7.91639090e-04 1.04457140e-03 1.56757236e-03
  1.03133917e-03 3.75977755e-02 7.74264336e-04 6.36377931e-03
  7.19457865e-04 3.18562984e-03 1.07103586e-03 2.23308802e-03
  9.39399004e-04 1.60571933e-03 5.06418943e-03 9.01013613e-04
  1.37810409e-02 5.78880310e-04 6.50137663e-04 3.72320414e-04
  1.55135989e-03 8.23557377e-04 8.80804658e-03 1.41242743e-02
  2.42707133e-03 1.48320198e-03 1.05234981e-03 8.93354416e-04
  2.14985013e-03]]

推論できていそう!!!
今回のゴール「ONNX形式のAIモデルをPythonで動かすための環境を作る」は達成できた!


次回(推論#04)は推論処理、出力の解釈、使い方の理解について書こうと思います!

0
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?