通过PyTorch Hub加载YOLOv5

这篇博客介绍了如何使用PyTorch库加载和运行YOLOv5s模型进行对象检测。从简单的图片检测到详细参数设置,包括置信度阈值、NMS IoU阈值和分类筛选器。此外,还涵盖了调整输入通道、自定义分类数、训练模型、获取Base64和JSON结果的方法。示例代码详尽展示了各种用法。
摘要由CSDN通过智能技术生成

一、准备

PyTorch安装请点这里

二、简单示例

这里使用轻量级yolov5s模型。

import torch

# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# Image
img = 'https://ultralytics.com/images/zidane.jpg'

# Inference
results = model(img)

三、详细示例

代码中同时使用PIL和OpenCV,识别结果保存在runs/hub目录下。

import cv2
import torch
from PIL import Image

# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# Images
for f in ['zidane.jpg', 'bus.jpg']:
    torch.hub.download_url_to_file('https://ultralytics.com/images/' + f, f)  # download 2 images
img1 = Image.open('zidane.jpg')  # PIL image
img2 = cv2.imread('bus.jpg')[:, :, ::-1]  # OpenCV image (BGR to RGB)
imgs = [img1, img2]  # batch of images

# Inference
results = model(imgs, size=640)  # includes NMS

# Results
results.print()  
results.save()  # or .show()

results.xyxy[0]  # img1 predictions (tensor)
results.pandas().xyxy[0]  # img1 predictions (pandas)
#      xmin    ymin    xmax   ymax  confidence  class    name
# 0  749.50   43.50  1148.0  704.5    0.874023      0  person
# 1  433.50  433.50   517.5  714.5    0.687988     27     tie
# 2  114.75  195.75  1095.0  708.0    0.624512      0  person
# 3  986.00  304.00  1028.0  420.0    0.286865     27     tie

请添加图片描述
请添加图片描述

四、参数设置

这里参数主要是指置信度阈值,NMS loU阈值,分类筛选器等模型属性参数。

model.conf = 0.25  # confidence threshold (0-1)
model.iou = 0.45  # NMS IoU threshold (0-1)
model.classes = None  # (optional list) filter by class, i.e. = [0, 15, 16] for persons, cats and dogs

results = model(imgs, size=320)  # custom inference size

五、输入通道设置

加载YOLOv5s模型输入通道数默认值为3,可以通过以下方式修改。

# 这里将通道数设置为4
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', channels=4)

六、分类设置

YOLOv5模型默认分类数为80,可以通过以下方式修改。

model = torch.hub.load('ultralytics/yolov5', 'yolov5s', classes=10)

七、强制重新加载

使用force_reload=True可以帮助清理缓存并且强制更新下载最新YOLOv5版本。

model = torch.hub.load('ultralytics/yolov5', 'yolov5s', force_reload=True)  # force reload

八、训练

加载YOLOv5模型如果是为了训练,可以设置autoshape=False。
加载模型并随机初始化权值可以设置pretrained=False。

model = torch.hub.load('ultralytics/yolov5', 'yolov5s', autoshape=False)  # load pretrained
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', autoshape=False, pretrained=False)  # load scratch

九、Base64结果

示例如下:

results = model(imgs)  # inference

results.imgs # array of original images (as np array) passed to model for inference
results.render()  # updates results.imgs with boxes and labels
for img in results.imgs:
    buffered = BytesIO()
    img_base64 = Image.fromarray(img)
    img_base64.save(buffered, format="JPEG")
    print(base64.b64encode(buffered.getvalue()).decode('utf-8'))  # base64 encoded image with results

十、JSON结果

示例如下:

results = model(imgs)  # inference

results.pandas().xyxy[0].to_json(orient="records")  # JSON img1 predictions

json [ {“xmin”:749.5,“ymin”:43.5,“xmax”:1148.0,“ymax”:704.5,“confidence”:0.8740234375,“class”:0,“name”:“person”}, {“xmin”:433.5,“ymin”:433.5,“xmax”:517.5,“ymax”:714.5,“confidence”:0.6879882812,“class”:27,“name”:“tie”}, {“xmin”:115.25,“ymin”:195.75,“xmax”:1096.0,“ymax”:708.0,“confidence”:0.6254882812,“class”:0,“name”:“person”}, {“xmin”:986.0,“ymin”:304.0,“xmax”:1028.0,“ymax”:420.0,“confidence”:0.2873535156,“class”:27,“name”:“tie”} ]

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
以下是在 PyTorch 下使用 YOLOv5 进行车牌识别的示例代码: 首先,下载 YOLOv5 模型,并安装必要的依赖项: ``` !git clone https://github.com/ultralytics/yolov5.git !pip install -qr yolov5/requirements.txt ``` 然后,下载车牌识别数据集,并将其放在 `data` 目录下: ``` !curl -L -o data/plate_detection.zip https://github.com/sergiomsilva/alpr-unconstrained/raw/master/data/plate_detection/sets.zip !unzip -q data/plate_detection.zip -d data/plate_detection ``` 接下来,编写识别代码: ```python import torch import cv2 # 加载 YOLOv5 模型 model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True) # 加载车牌识别数据集 dataset = torch.utils.data.ConcatDataset([ torch.utils.data.Dataset(torch.utils.data.ConcatDataset([ torch.utils.data.Dataset.from_folder('data/plate_detection/sets/north'), torch.utils.data.Dataset.from_folder('data/plate_detection/sets/south'), torch.utils.data.Dataset.from_folder('data/plate_detection/sets/west'), torch.utils.data.Dataset.from_folder('data/plate_detection/sets/east'), ])), torch.utils.data.Dataset.from_folder('data/plate_detection/sets/more') ]) # 获取车牌识别标签 labels = dataset.classes # 对图像进行车牌识别 def recognize_plate(image_path): # 加载图像 image = cv2.imread(image_path) # 检测车牌 results = model(image) # 提取车牌区域 bboxes = results.xyxy[0] plates = [] for bbox in bboxes: if labels[int(bbox[-1])] == 'plate': plate = image[int(bbox[1]):int(bbox[3]), int(bbox[0]):int(bbox[2])] plates.append(plate) # 识别车牌 for plate in plates: # TODO: 车牌识别代码 pass return plates # 测试代码 plates = recognize_plate('example.jpg') for plate in plates: cv2.imshow('Plate', plate) cv2.waitKey() cv2.destroyAllWindows() ``` 在上面的代码中,我们使用 YOLOv5 对输入图像进行车牌检测,并提取出车牌区域。然后,我们可以使用车牌识别算法对车牌进行识别。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

icodekang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值