YOLOV5 Pytroch部署(python) 随笔

需要将yolov5s官方权重和模型打包在一起,便于使用,否则就得在项目中放入yolov5 model的源码,实时加载,不建议。

模型打包和查看模型计算量和参数量的代码如下:

import torch
from models.common import DetectMultiBackend
from thop import profile, clever_format   #

# 模型输入
input = torch.empty(size=(1, 3, 640, 640), dtype=torch.float, device="cpu")

# weights
weights = r"E:\Python_C++_Demo\yolov5-master\weights\yolov5s.pt"

# model
model = DetectMultiBackend(weights=weights)

# save model
torch.save(model, "yolov5s_save.pt")

# model test
model = torch.load("yolov5s_save.pt")
# print(model(input))

# 查看模型计算量
flops, parameters = profile(model, inputs=(input,))
print("flops:", flops, "parameters:", parameters)

# 格式化输出计算量和参数量
flops, parameters = clever_format([flops, parameters], "%.3f")
# 打印结果
print(f"Model FLOPs: {flops}")
print(f"Model Params: {parameters}")

模型推理代码如下:

import cv2
import torch
from utils.general import non_max_suppression
from utils.augmentations import letterbox
import numpy as np
import yaml

device = "cuda" if torch.cuda.is_available() else "cpu"
# 获取类别
with open(r"E:\Python_C++_Demo\yolov5-master\data\coco.yaml", "r", encoding='utf-8') as file:
    config = yaml.safe_load(file)
classes = config["names"]


def detect(img_path, weights, show_img=True):
    img = cv2.imread(img_path)
    im, ratio, (dw, dh) = letterbox(img)
    im = im.transpose((2, 0, 1))[::-1]  # HWC to CHW, BGR to RGB
    im = np.ascontiguousarray(im)

    im = torch.from_numpy(im).to(device)
    im = im.float()
    im /= 255
    im = torch.unsqueeze(im, dim=0)
    # print(im.shape)

    model = torch.load(weights).to(device)
    model.eval()  # 开启测试

    pred = model(im)
    pred = non_max_suppression(pred)

    for i, det in enumerate(pred):
        for *xyxy, conf, cls in reversed(det.cpu().numpy()):
            x1 = int((xyxy[0] - dw) / ratio[0])
            y1 = int((xyxy[1] - dh) / ratio[0])
            x2 = int((xyxy[2] - dw) / ratio[0])
            y2 = int((xyxy[3] - dh) / ratio[0])
            cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)

            cls = classes[int(cls)]
            # conf_str = "%.2f" % float(conf)
            conf_str = f"{conf:.2f}"
            # print(conf)
            cv2.putText(img, f"{cls}:{conf_str}", (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)

    if show_img:
        cv2.imshow("img", img)
        cv2.waitKey(0)


if __name__ == '__main__':
    img_path = r"E:\Python_C++_Demo\yolov5-master\data\images\bus.jpg"
    weights = "yolov5s_save.pt"
    detect(img_path, weights, show_img=True)

推理结果如下:

有更好的建议,欢迎指点哈~

要在PyTorch中运行Yolov5,首先需要安装PyTorch和torchvision。可以通过官方网站提供的安装命令进行安装,也可以选择使用离线安装包进行安装。\[2\] 安装完成后,将安装包放置在合适的位置,然后在虚拟环境中使用pip install命令进行安装。确保安装的torch和torchvision版本相匹配。\[3\] 安装完成后,可以打开Python环境进行测试。在代码中导入所需的库和模块,然后使用Yolov5的相关函数和类进行目标检测。在Yolov5中,SPP模块被用在主干特征提取网络中,通过不同池化核大小的最大池化进行特征提取,提高网络的感受野。\[1\] 请注意,具体的代码实现和使用方法可以参考Yolov5的官方文档或相关教程。 #### 引用[.reference_title] - *1* [睿智的目标检测56——Pytorch搭建YoloV5目标检测平台](https://blog.csdn.net/weixin_44791964/article/details/121626848)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [(详细教程) windows系统下部署(Anaconda+pycharm+pytorch)yolov5框架完美运行](https://blog.csdn.net/qq_52852432/article/details/126471375)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

埋头苦干小金哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值