Yolo的离线运行

Yolo 的离线运行

运行环境准备

比较简单的办法是通过官方的github获取到对应的yolo运行需要的python环境-requirement.txt.通过如下地址可以获取到对应的文件和相应的说明以及实例。
Yolov5 git地址
为了让程序能本地话运行,我们还需要获取相应的模型权重文件,目前YOLO提供多种权重模型,我们选择的时Yolov5x的权重参数。
下载地址如下:
Yolov5 预训练参数

程序代码

import torch

from yolov5.models.experimental import attempt_load

from yolov5.utils.dataloaders import LoadImages

from yolov5.utils.general import check_img_size, non_max_suppression, scale_boxes

from yolov5.utils.plots import plot_one_box

from yolov5.utils.torch_utils import select_device

import cv2


def detect(weights=r'C:\VM\YOLO\yolov5-master\ultralytics\yolov5\yolov5x.pt', imgsz=640):

    # 初始化设备

    device = select_device('')


    # 加载模型

    model = attempt_load(weights, device='cuda')  # load FP32 model

    stride = int(model.stride.max())  # model stride

    imgsz = check_img_size(imgsz, s=stride)  # check img_size


    # 设置模型为评估模式

    model.to(device).eval()


    # 加载图像

    dataset = LoadImages(r'C:\Users\XPI1CNG\Pictures\Picture1.jpg', img_size=imgsz, stride=stride)


    # 运行推理

    for path, img, im0s, vid_cap, s in dataset:

        img = torch.from_numpy(img).to(device)

        img = img.float()  # uint8 to fp32

        img /= 255.0  # 0 - 255 to 0.0 - 1.0

        if img.ndimension() == 3:

            img = img.unsqueeze(0)


        # 推理

        pred = model(img, augment=False)[0]


        # 应用非最大值抑制

        pred = non_max_suppression(pred, 0.25, 0.45, classes=None, agnostic=False)


        # 处理检测结果

        for i, det in enumerate(pred):  # detections per image

            p, s, im0 = path, '', im0s

            save_path = r'C:\Users\XPI1CNG\Pictures\3333.jpg'

            gn = torch.tensor(im0.shape)[[1, 0, 1, 0]]  # normalization gain whwh

            if len(det):

                # 将坐标缩放回原图大小

                det[:, :4] = scale_boxes(img.shape[2:], det[:, :4], im0.shape).round()


                # 绘制边界框

                for *xyxy, conf, cls in reversed(det):

                    label = f'{model.names[int(cls)]} {conf:.2f}'

                    plot_one_box(xyxy, im0, label=label, color=(0, 255, 0), line_thickness=3)


            # 保存结果

            cv2.imwrite(save_path, im0)


if __name__ == '__main__':

    detect()
错误处理
模块变更

在执行时,会出现如下错误:
ModuleNotFoundError: No module named ‘yolov5.utils.datasets’
原因时由于在新的yolov5中,没有了datasets.py文件,此文件被dataloaders所取代,因此需要修改程序为:
from yolov5.utils.dataloaders import LoadImages

函数变更

在执行时,会出现如下错误:
cannot import name ‘scale_coords’ from ‘yolov5.utils.general’
原因时在新版本的yolov5中,scale_coords已经被scale_boxes取代,因此需要修改程序中所有的scale_coords,变更为scale_boxes。

数据类型错误

在模型执行时,报错如下
RuntimeError: “upsample_nearest2d_channels_last” not implemented for ‘Half’
这个错误是因为PyTorch在处理Half数据类型时,对于某些操作(例如upsample_nearest2d_channels_last)没有实现。为了解决这个问题,你需要确保模型和输入数据都在相同的数据类型上进行操作。这里有一个步骤来解决这个问题:

  1. 首先,确保你的模型是在float32(即torch.float32)的数据类型上训练的。如果你的模型是用Half精度训练的,那么你可能需要重新训练它,因为YoloV5默认使用float32。
  2. 假设model是你加载的模型
model = model.half()  # 将模型转换为Half精度
model = model.float()  # 再次转换回Float32精度
  1. 确保输入数据也是float32。在加载图像数据时,可以使用to()函数将其转换为正确的数据类型
import torch
img_data = img_data.to(device='cuda', dtype=torch.float32)
返回值不匹配

在模型执行时,报错如下
ValueError:too many values to unpack(expected 4)
出现该错误的原因是dataset返回值与实际需要的值不匹配(path, img, im0s, vid_cap),通过查看LoadImages的函数,发现此函数的返回值为5个 - return path, im, im0, self.cap, s。
为解决这个问题,将程序修改为读取5个返回即可。

 for path, img, im0s, vid_cap, s in dataset:

参考文件:
[1]https://www.baidu.com/link?url=cAxksQetEOEubXto-xSNdmLVZHbHjglVBnx__tkaqIwnvAwVabrjpydHpHCErG2B78VVu-pcpBGfKpVuHj-6uruvbwt-eNuCrv_NSCjlyxi&wd=&eqid=a600e45f0055a43a00000006668e2c07
[2]https://blog.csdn.net/m0_58074927/article/details/128032999

相关推荐

  1. Yolo线运行

    2024-07-12 16:04:05       24 阅读
  2. 线运行Oracle Database In-Memory Advisor

    2024-07-12 16:04:05       42 阅读
  3. 解决线运行vLLM 启动报dns.google错

    2024-07-12 16:04:05       41 阅读
  4. 线安装python2MySQLdb

    2024-07-12 16:04:05       47 阅读
  5. HTML5线存储

    2024-07-12 16:04:05       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 16:04:05       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 16:04:05       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 16:04:05       57 阅读
  4. Python语言-面向对象

    2024-07-12 16:04:05       68 阅读

热门阅读

  1. 2024.07.04校招 实习 内推 面经

    2024-07-12 16:04:05       20 阅读
  2. 从零开始学习嵌入式----C语言指针函数

    2024-07-12 16:04:05       18 阅读
  3. springboot把 EXCEL 文件以流的形式返回给前端

    2024-07-12 16:04:05       23 阅读
  4. Github 2024-07-09 Python开源项目日报 Top10

    2024-07-12 16:04:05       19 阅读