前置き
- この記事はこちらの記事の続きです
- 専門家ではないので、誤った情報を書いている可能性があります
- 本稿は環境構築の作業内容を備忘録として残す目的もあります
- 環境は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で動かすための環境を作る
- モデルを読み込んで、推論を実行できるようにする
ゴールまでのロードマップ
- Pythonの実行環境(Ubuntuなど)
- 仮想環境構築&モデル変換(YOLOv5s.pt → YOLOv5s.onnx)
- 画像ファイルを用意(テスト推論に使う)
- スクリプトを書いて動作確認
ステップ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)は推論処理、出力の解釈、使い方の理解について書こうと思います!