1. 安装PySide6
# 安装pyqt5
pip install PySide6
2. 具体实现
2.1 设计界面
使用PySide6中自带的工具设计UI界面,并通过插件将.ui文件转换为.py文件(这样才可以进行顺利展示)。
2.2 YOLOv8权重预测
编写交互文件,绑定检测事件,通过使用YOLOv8模型权重进行预测,得到结果并渲染到UI界面。
3. 使用gradio部署
3.1 在本地安装gradio
pip install gradio
3.2 在项目中创建app.py
# 1.案例
import gradio as gr
def greet(name):
return "Hello" + name + "!"
iface = gr.Interface(dn=greet, inputs="text", outputs="text")
iface.launch()
# 2. import gradio as gr
from PIL import Image
from ultralytics import YOLO
def predict_image(img):
# 转换PIL图像为RGB
if img.mode != "RGB":
img = img.convert('RGB')
# 使用YOLOv8模型进行预测
model = YOLO('runs/detect/train853/weights/best.pt')
results = model.predict(source=img, conf=0.25)
im_array = results[0].plot()
# 转换结果为PIL图像并返回
pil_img = Image.fromarray(im_array[..., ::-1])
return pil_img
# 创建Gradio界面
iface = gr.Interface(
fn=predict_image,
inputs=gr.Image(type='pil'),
outputs='image',
examples=["./image/T0001_XM_20110807100242_01.jpg"],
title="Real-Time Object Detection with YOLOv8",
description="Upload an image to detect objects using Yolov8"
)
# 启动界面
iface.launch()
3.3 解决:ImportError: cannot import name 'soft_unicode' from 'markupsafe' (C:\ProgramData\Anaconda3\lib\site-packages\markupsafe\__init__.py)
# 原来
Name: MarkupSafe
Version: 2.1.3
# 降低MarkupSafe版本
python -m pip install markupsafe==2.0.1
3.4 ImportError: Pandas requires version '3.0.0' or newer of 'jinja2' (version '2.11.2' currently installed).
# 升级pandas版本
原有版本:2.0.3
升级版本:2.1.4
# 升级jinjia2版本
原有版本:2.11.2
升级最新版本:3.1.2
python -m pip install jinja2==3.1.2
3.5 注意:需要将训练好的模型部署为中间格式,因此安装onnx
pip install onnxruntime-gpu
# 验证安装成功
import onnxruntime
print(onnxruntime.get_device())
3.6 pytroch转onnx模型
yolo export model=./yolov8n.pt format=onnx
# 或者
from ultralytics import YOLO
# 载入模型
model = YOLO("./yolov8n.pt")
# 导出模型
model.export(format='onnx')
3.7 验证onnx模型导出成功
import onnx
# 读取onnx模型
onnx_model = onnx.load('./yolov8n.onnx')
# 检查模型格式是否正确
onnx.checker.check_model(onnx_model)
print("无报错,转换成功")
3.8 使用Netron可视化onnx模型结构
3.9 使用onnxsim优化onnx模型
3.10 onnx模型推理预测:和.pth原生模型预测完全相同,只需要把model参数换成.onnx模型即可。
# 单张图像
yolo predict pose model=./yolov8n.onnx source=image/train01.jpg
# 视频
yolo predict pose model=./yolov8n.onnx source=videos/train02.mp4
# 摄像头
yolo predict pose model=./yolov8n.onnx source=0 show verbose=False
# 或者使用Python API
from ultralytics import YOLO
model = YOLO('./yolov8n.onnx', task='pose')
# 预测图像
results = model.predict('images/train01.jpg', task='pose', save=True)
3.11 ONNX Runtime推理预测-单张图像
import cv2
import numpy as np
from PTL import Image
import onnxruntime
import torch
# 有GPU
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
# 创建onnx runtime的InferenceSession
session = onnxruntime.InferenceSession("./yolov8n.onnx", None)
3.12 在实际应用中,可能涉及到对模型的调参优化,找到最优的超参数
yolov8提供了两种不同方式的超参数调优方式(两种方式都存在错误,在github上也有相应的解决,但是并不能帮助到我,后续会进行修改)
1. 使用原有的方法tune()
注意:目前遇到的问题是:UnboundLocalError: local variable 'ckpt_file' referenced before assignment
2. 使用ray tune的方式
注意:目前遇到的问题是:core_worker.cc:201: Failed to register worker 01000000ffffffffffffffffffffffffffffffffffffffffffffffff to Raylet. IOError: [RayletClient] Unable to register worker with raylet. Unknown error