Python> 正文

使用YOLOv5检测图片:本地加载与GitHub加载方式比较

2024-05-30T12:21:33+08:00

介绍了如何使用 YOLOv5 模型进行图片中的物体检测,并对结果进行后续处理。

1. 从本地加载YOLOv5代码和模型

  1. 下载代码和模型文件:首先需要将YOLOv5的代码和预训练模型下载到本地。可以通过GitHub或其他方式获取代码和模型文件。

  2. 加载模型:使用PyTorch的torch.hub.load方法加载本地模型。指定模型文件的路径,通过source="local"参数告知加载器模型来源。

  3. 读取图片:使用OpenCV等工具读取待检测的图片。

  4. 进行检测:将读取的图片传入模型,获取检测结果。

  5. 处理检测结果:根据需要对检测结果进行后续处理,比如绘制边界框、保存结果等。

2. 从GitHub加载YOLOv5代码

  1. 安装YOLOv5代码:通过Git从YOLOv5的GitHub仓库克隆代码到本地。

  2. 加载模型:与本地加载方式相同,使用torch.hub.load方法加载模型,但是需要指定模型名称而不是模型文件的路径。此时,加载器将自动从GitHub仓库下载模型文件。

  3. 其余步骤同上

3. results.pred 与 results.xyxy 的区别

  • results.pred:
  • results.pred 是一个PyTorch张量的列表,每个元素对应一张图片的检测结果。
  • 每个张量是一个二维张量,包含了检测到的物体的详细信息。每一行代表一个检测到的物体,包括了物体的类别索引、置信度以及边界框的坐标。
  • 这种表示方式更加详细和全面,可以直接获取每个物体的类别、置信度和边界框信息。

  • results.xyxy:

  • results.xyxy 也是一个PyTorch张量的列表,每个元素对应一张图片的检测结果。
  • 每个张量是一个二维张量,只包含了检测到的物体的边界框坐标信息,每一行包含了一个物体的左上角和右下角的坐标值,以及物体的类别索引和置信度。
  • 这种表示方式更加简化,只提供了边界框的坐标信息,不包含类别和置信度信息。
import torch, cv2

# 联网加载模型
# model = torch.hub.load("ultralytics/yolov5", "yolov5s")
# 加载本地模型
model = torch.hub.load(
    "/home/ranvane/WorkSpace/yolov4_opencv/yolov5",
    "custom",
    "/home/ranvane/WorkSpace/yolov4_opencv/yolov5/pt/yolov5s.pt",
    source="local",
)


# 读取图片
img_path = "1.jpg"
img = cv2.imread(img_path)

# 进行人体检测
results = model(img)


#  results.pred 中包含的是一个包含所有检测结果的 PyTorch 张量,一般一张图片检测结果为1个
for info in results.pred[0]:

    x1, y1, x2, y2, label, confidence = info  # 获取边界框的坐标
    print(x1, y1, x2, y2, label, confidence)
print("-----------")
for info in results.xyxy[0]:

    x1, y1, x2, y2, label, confidence = info  # 获取边界框的坐标
    print(x1, y1, x2, y2, label, confidence)

humans = [x for x in results.xyxy[0] if x[-1] == 0]

# 显示检测结果
for human in humans:
    x1, y1, x2, y2, conf, cls = human
    cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)

cv2.imshow("Humans", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
分享到:

Ranvane的日常记录

关于我们 客服中心 广告服务 法律声明