YOLOV5 (2): pt を onnx モデルに変換し、opencv でデプロイする

デプロイのためにモデルを onnx、RT などに変換します

Yolov5s 6.0には、.ptを.onnxなどに変換できるexport.pyプログラムが付属しています。必要な環境を設定するだけで済みます。

1. 設置環境

activate pytorch
pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime openvino-dev tensorflow-cpu  # CPU
pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime-gpu openvino-dev tensorflow  # GPU

エラー: NVIDIA-tensorrt のインストールに失敗しました。
解決策: ソース コードから TensorRt をインストールします:
① CUDNN や CudaToolKit などの GPU 構成をインストールします。
② 公式 Web サイトから必要な rt バージョンをダウンロードします: https://developer.nvidia.com/nvidia-tensorrt-8x-download
ここに画像の説明を挿入しますここに画像の説明を挿入します
③ 解凍後、lib フォルダーを追加します環境変数のパスに移動します。
ここに画像の説明を挿入します
④ lib 内のすべてのファイルを CUDA の lib\x64 フォルダーにコピーし、x64 フォルダーのパスを環境変数のパスに追加します。
ここに画像の説明を挿入します
⑤ RT の依存関係をインストールします。

activate pytorch
pip install E:\Anaconda3.5\TensorRT-8.6.1.6.Windows10.x86_64.cuda-11.8\TensorRT-8.6.1.6\python\tensorrt-8.6.1-cp39-none-win_amd64.whl

インストールが完了すると「成功しました」という文字が表示されますので、この時点でtensorrtのインストールは完了です。

2. pt から onnx

yolov5に付属しているexport.pyは変換可能です。Yolov5 v6.0 以降のバージョンは opencv をサポートしており、ネットワーク層を変更する必要はありません。
コマンドライン起動:

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

プログラム起動時の変更:
ここに画像の説明を挿入します
*** opset パラメータは protobuf に関連しており、現在使用されている opencv470 は、対応する onnx ファイルを認識するために opset パラメータを 12 に設定する必要があります。F5 を押してプログラムを起動すると、元の pt フォルダーに同じ名前の onnx ファイルが生成されます。***
テスト①:
yolov5 に付属の detect.py を使用して、生成された onnx ファイルを検出します。エラーが報告された場合: 「onnxruntime::Model::Model 不明なモデル ファイル形式のバージョン」 解決策: onnxruntime のバージョンを減らします

pip install onnxruntime-gpu==1.14 -i  https://pypi.tuna.tsinghua.edu.cn/simple

テスト②:
C++ と opencv4.7 環境を再構成し、opencv の dnn インターフェイスを使用して onnx を読み取り、ターゲットを検出します。
: 1. ブレークポイント デバッグを使用して、ネット読み取りモデル (net = readNet(netPath)) が成功できるかどうかをテストします。readNetFromONNX などもあります。
2. 描画するときは境界の問題に注意してください。
3. カテゴリ、画像パス、およびウェイト パスを変更します。

//主要:

#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <highgui/highgui_c.h>
#include <iostream>
#include "yolov5.h"
using namespace cv;
using namespace cv::dnn;
using namespace std;
int main()
{
    string img_path = "F:/vscode/006.jpg";
    string model_path = "F:/Object Detec

おすすめ

転載: blog.csdn.net/abandononeself/article/details/131976832