ubantu部署yolov5(第四集:模型加速)

參考鏈接:

GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

TFLite,ONNX,CoreML,TensorRT Export -Ultralytics YOLO Docs

使用Neural Magic 的 DeepSparse 部署YOLOv5 -Ultralytics YOLO 文檔

sparseml/integrations/ultralytics-yolov5/tutorials/sparse-transfer-learning.md at main · neuralmagic/sparseml · GitHub

一、轉化格式加速推理

1.YOLOv5 正式支持 12 種格式的推理:

2.導出訓練有素的YOLOv5 模型

將自己訓練好的模型文件如yolov5s.pt導出為torchscript onnx。經過我的測試onnx和openvino是最快的。

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

3.導出后使用示例

二、使用DeepSparse + onnx加速推理

1.安裝 DeepSparse

pip install "deepsparse[server,yolo,onnxruntime]"

2.Python 應用程序接口

將model_path替換為自己的onnx模型所在的位置。

import cv2
import time
from deepsparse import Pipeline# 視頻文件路徑,需替換為你的實際視頻路徑
video_path = "/home/yzh/yolo_v5/yolov5/2.mp4"
cap = cv2.VideoCapture(video_path)# create Pipeline
# 使用自定義 ONNX 模型路徑
# model_path = "/home/yzh/yolo_v5/yolov5/runs/train/exp6/weights/best_1.onnx"
model_path = "/home/yzh/yolo_v5/yolov5/yolov5_runs/train/exp6/DeepSparse_Deployment/model.onnx"yolo_pipeline = Pipeline.create(task="yolo",model_path=model_path,# image_size=(320, 320),  # 輸入圖像大小# batch_size=32,  # 批處理大小
)prev_time = 0
# 初始化總推理時間和總推理次數
total_inference_time = 0
total_inference_count = 0while cap.isOpened():ret, frame = cap.read()if not ret:break# 將 BGR 格式的 OpenCV 圖像轉換為 RGB 格式rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 執行推理start_time = time.time()pipeline_outputs = yolo_pipeline(images=[rgb_frame], iou_thres=0.6, conf_thres=0.2)end_time = time.time()inference_time = (end_time - start_time) * 1000print(f"推理時間: {inference_time:.2f} ms")# 更新總推理時間和總推理次數total_inference_time += inference_timetotal_inference_count += 1# 計算實時平均推理速度average_inference_speed = total_inference_time / total_inference_countprint(f"實時平均推理速度: {average_inference_speed:.2f} ms")# 獲取檢測結果boxes = pipeline_outputs.boxes[0]  # 假設只有一個圖像輸入scores = pipeline_outputs.scores[0]labels = pipeline_outputs.labels[0]# 繪制邊界框和標簽for box, score, label in zip(boxes, scores, labels):x1, y1, x2, y2 = map(int, box)confidence = float(score)class_id = int(label)# 繪制邊界框cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)# 繪制標簽和置信度label_text = f"{class_id}: {confidence:.2f}"cv2.putText(frame, label_text, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)# 計算 FPSfps = 1 / (end_time - start_time)prev_time = end_time# 在幀上繪制 FPScv2.putText(frame, f"FPS: {fps:.2f}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 顯示幀cv2.imshow('Video Inference', frame)# 按 'q' 鍵退出循環if cv2.waitKey(1) & 0xFF == ord('q'):break# 釋放資源
cap.release()
cv2.destroyAllWindows()

之后直接運行這個腳本那文件,就可以使用DeepSparse加速了。加速效果明顯,大概1.5倍。

三、DeepSparse 稀疏性能

文檔上介紹效率很高,但是我實際使用感覺除了模型變小了一點,其他沒有什么太大區別。

1.安裝python庫文件

pip install "sparseml[yolov5]"

2.開始訓練

(1)語法

(2)一個例子

recipe_type 這個是稀疏化的配置直接從官網下,weights這個稀疏化權重也是直接從官網下,你只需要把--data改成自己的數據集的配置文件就可以了。如果太卡,還要改--batchsize。

sparseml.yolov5.train \--weights zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned75_quant-none?recipe_type=transfer_learn \--recipe zoo:cv/detection/yolov5-s/pytorch/ultralytics/coco/pruned75_quant-none?recipe_type=transfer_learn \--data VOC.yaml \--patience 0 \--cfg yolov5s.yaml \--hyp hyps/hyp.finetune.yaml

3.導出模型

sparseml.yolov5.export_onnx \--weights yolov5_runs/train/exp/weights/last.pt \--dynamic

模型導出后,將onnx的路徑加到上述二的腳本文件里面,直接運行。但是確實效率沒提升多少,onnx的規模確實是下降了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78833.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78833.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78833.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

flutter 專題 五十六 Google 2020開發者大會Flutter專題

由于疫情的原因,今年的Google 開發者大會 (Google Developer Summit) 在線上舉行,本次大會以“代碼不止”為主題,全面介紹了產品更新以及一系列面向本地開發者的技術支持內容。我比較關注的是移動開發,在本次大會上,關…

開源模型應用落地-qwen模型小試-Qwen3-8B-快速體驗-pipeline方式(二)

一、前言 阿里云最新推出的 Qwen3-8B 大語言模型,作為國內首個集成“快思考”與“慢思考”能力的混合推理模型,憑借其 80 億參數規模及 128K 超長上下文支持,正在重塑 AI 應用邊界。該模型既可通過輕量化“快思考”實現低算力秒級響應,也能在復雜任務中激活深度推理模式,以…

「動態規劃::背包」01背包 / AcWing 2(C++)

概述 AcWing 2: 有 N 件物品和一個容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的體積是 v[i],價值是 w[i]。 求解將哪些物品裝入背包,可使這些物品的總體積不超過背包容量,且總價值最大。 輸出最大價值。 輸入格式 第一…

Java 中的 設計模式詳解

一:設計模式概述 (1)概述 (2)分類 創建型 行為型 結構型 二:軟件設計模式 2.1 開閉原則 (1)定義 在程序需要進行拓展的時候,不能修改原有代碼 使用到接口和抽象類&#x…

阿里qiankun微服務搭建

主服務 chat vue3 ts vite 子服務 ppt react 18 vite 子服務 agent 主服務 npm i vite-plugin-qiankun mian.ts import ./style/base.scss import virtual:svg-icons-register import { createApp } from vue import { createPinia } from piniaimport App from ./App.vue im…

安裝WSL2,配置Ubuntu圖像化界面

目錄 一、前言二、安裝WSL三、安裝圖像化界面四、參考 一、前言 Windows 子系統下的 Linux 子系統(WSL,Windows Subsystem for Linux)是微軟推出的一項功能,允許用戶在 Windows 系統中原生運行 Linux 環境,無需安裝虛…

圖像畸變-徑向切向畸變實時圖像RTSP推流

實驗環境 注意:ffmpeg進程stdin寫入兩張圖片的時間間隔不能太長,否則mediamtx會出現對應的推流session超時退出。 實驗效果 全部代碼 my_util.py #進度條 import os import sys import time import shutil import logging import time from datetime i…

Redis Sentinel 和 Redis Cluster 各自的原理、優缺點及適用場景是什么?

我們來詳細分析下 Redis Sentinel (哨兵) 和 Redis Cluster (集群) 這兩種方案的原理和使用場景。 Redis Sentinel (哨兵) 原理: Sentinel 本身是一個或一組獨立于 Redis 數據節點的進程。它的核心職責是監控一個 Redis 主從復制 (Master-Slave) 架構。多個 Sentinel 進程協同…

基于機器學習的電影票房預測

目錄 摘 要(完整下載鏈接附在文末) Abstract 1 緒 論 1.1 研究背景概述 1.2 國內外相關領域研究進展 1.3 電影票房預測技術概覽 1.3.1 利用人口統計學特征的方法 1.3.2 基于機器學習的預測模型 2 機器學習相關理論介紹與分析 2.1 機器學習算法理論 2.1.1卷積…

SVMSPro平臺獲取HTTP-FLV規則

SVMSPro平臺獲取HTTP-FLV規則 HTTP-FLV的服務端口為:53372,如需要公網訪問需要開啟這個端口 這里講的是如何獲取長效URL,短效(時效性)URL也支持,下回講 一、如何獲取HTTP-FLV實時流視頻 http://host:po…

ARM架構的微控制器總線矩陣

在 ARM 架構的微控制器(MCU)中,總線矩陣(Bus Matrix) 是總線系統的核心互連結構,負責協調多個主設備(如 CPU、DMA、以太網控制器等)對多個從設備(如 Flash、SRAM、外設等…

AI賦能金融:智能投顧、風控與反欺詐的未來

AI賦能金融:智能投顧、風控與反欺詐的未來 系統化學習人工智能網站(收藏):https://www.captainbed.cn/flu 文章目錄 AI賦能金融:智能投顧、風控與反欺詐的未來摘要引言一、智能投顧:從經驗驅動到人機協同…

【機器學習】樸素貝葉斯

目錄 一、樸素貝葉斯的算法原理 1.1 定義 1.2 貝葉斯定理 1.3 條件獨立性假設 二、樸素貝葉斯算法的幾種常見類型 2.1 高斯樸素貝葉斯 (Gaussian Naive Bayes) 【訓練階段】 - 從數據中學習模型參數 【預測階段】 - 對新樣本 Xnew? 進行分類 2. 2 多項式樸素貝葉斯 (…

鴻蒙 ArkTS 組件 通用事件 通用屬性 速查表

ArkTS 組件 組件 通用事件 速查表 通用事件事件名稱簡要說明點擊事件onClick(event: Callback<ClickEvent>, distanceThreshold: number): T相較于原有 onClick 接口&#xff0c;新增 distanceThreshold 參數作為點擊事件移動閾值&#xff0c;當手指的移動距離超出所設…

Java云原生+quarkus

一、Java如何實現云原生應用&#xff1f; 傳統的 Java 框架&#xff08;如 Spring Boot&#xff09;雖然功能強大&#xff0c;但在云原生場景下可能顯得笨重。以下是一些更適合云原生的輕量級框架&#xff1a; Quarkus(推薦) 專為云原生和 Kubernetes 設計的 Java 框架。支持…

C語言教程(二十三):C 語言強制類型轉換詳解

一、強制類型轉換的概念 強制類型轉換是指在程序中手動將一個數據類型的值轉換為另一種數據類型。在某些情況下,編譯器可能不會自動進行類型轉換,或者自動轉換的結果不符合我們的預期,這時就需要使用強制類型轉換來明確指定要進行的類型轉換。 二、強制類型轉換的語法 強制類…

Spring Boot × K8s 監控實戰-集成 Prometheus 與 Grafana

在微服務架構中&#xff0c;應用的可觀測性至關重要。Kubernetes 已成為容器化部署的標準&#xff0c;但其自身的監控能力有限&#xff0c;需要與其他工具集成才能實現詳細的運行數據采集與分析。 本文將通過 Spring Boot Kubernetes Prometheus Grafana 實戰&#xff0c;打…

phpstudy修改Apache端口號

1. 修改Listen.conf文件 本地phpstudy安裝目錄&#xff1a; 2.其他問題 ① 修改httpd.conf不起作用 ② 直接通過控制面板配置好像有延遲緩存

(done) 吳恩達版提示詞工程 6. 轉換 (翻譯,通用翻譯,語氣風格變換,文本格式轉換,拼寫檢查和語法檢查)

視頻&#xff1a;https://www.bilibili.com/video/BV1Z14y1Z7LJ/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 別人的筆記&#xff1a;https://zhuanlan.zhihu.com/p/626966526 6. 轉換任務&#xff08;Transforming&#xff0…

什么是靜態住宅ip,跨境電商為什么要用靜態住宅ip

在數字時代&#xff0c;IP地址不僅是設備聯網的“ID”&#xff0c;更是跨境電商運營中的關鍵工具。尤其對于需要長期穩定、安全操作的場景&#xff0c;靜態住宅IP逐漸成為行業首選。 一、什么是靜態住宅IP&#xff1f; 靜態住宅IP&#xff08;Static Residential IP&#xff0…