调用yolov3模型进行目标检测

要调用已经训练好的YOLOv3模型对图片进行检测,需要完成以下几个步骤:

  1. 加载预训练模型:从预训练的权重文件中加载模型。
  2. 准备输入图片:将图片转换为模型所需的格式。
  3. 进行推理:使用模型对图片进行推理,得到检测结果。
  4. 处理输出结果:解析模型的输出,得到检测框、类别和置信度。

以下是一个使用PyTorch和OpenCV的示例代码,展示如何调用已经训练好的YOLOv3模型对图片进行检测:

1. 安装必要的库

确保已经安装了以下库:

bash 复制代码
pip install torch torchvision opencv-python

2. 加载预训练模型

假设已经有一个预训练的YOLOv3模型权重文件 yolov3.weights 和对应的配置文件 yolov3.cfg

python 复制代码
import torch
import cv2
import numpy as np

# 加载预训练模型
model = cv2.dnn.readNetFromDarknet("yolov3.cfg", "yolov3.weights")
model.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
model.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)

3. 准备输入图片

读取图片并将其转换为模型所需的格式。

python 复制代码
# 读取图片
image = cv2.imread("test.jpg")
blob = cv2.dnn.blobFromImage(image, 1/255.0, (416, 416), swapRB=True, crop=False)
model.setInput(blob)

4. 进行推理

使用模型对图片进行推理,得到检测结果。

python 复制代码
# 获取输出层的名称
layer_names = model.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in model.getUnconnectedOutLayers()]

# 进行推理
outputs = model.forward(output_layers)

5. 处理输出结果

解析模型的输出,得到检测框、类别和置信度,并绘制检测结果。

python 复制代码
class_ids = []
confidences = []
boxes = []
conf_threshold = 0.5
nms_threshold = 0.4

# 解析输出
for output in outputs:
    for detection in output:
        scores = detection[5:]
        class_id = np.argmax(scores)
        confidence = scores[class_id]
        if confidence > conf_threshold:
            center_x = int(detection[0] * image.shape[1])
            center_y = int(detection[1] * image.shape[0])
            width = int(detection[2] * image.shape[1])
            height = int(detection[3] * image.shape[0])
            left = int(center_x - width / 2)
            top = int(center_y - height / 2)
            class_ids.append(class_id)
            confidences.append(float(confidence))
            boxes.append([left, top, width, height])

# 非极大值抑制
indices = cv2.dnn.NMSBoxes(boxes, confidences, conf_threshold, nms_threshold)

# 绘制检测结果
for i in indices:
    i = i[0]
    box = boxes[i]
    left = box[0]
    top = box[1]
    width = box[2]
    height = box[3]
    cv2.rectangle(image, (left, top), (left + width, top + height), (0, 255, 0), 2)
    label = f"{class_ids[i]} {confidences[i]:.2f}"
    cv2.putText(image, label, (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

# 显示结果图片
cv2.imshow("Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

相关推荐
riri19192 分钟前
机器学习:支持向量机(SVM)原理解析及垃圾邮件过滤实战
人工智能·机器学习·支持向量机
从零开始学习人工智能8 分钟前
深入解析支撑向量机(SVM):原理、推导与实现
人工智能·机器学习·支持向量机
小猪猪_113 分钟前
神经网络与深度学习(第一章)
人工智能·深度学习·神经网络
土豆宝16 分钟前
AI玩游戏的一点尝试(5)—— 多样化的数字识别
人工智能·游戏
deephub18 分钟前
BayesFlow:基于神经网络的摊销贝叶斯推断框架
人工智能·python·深度学习·神经网络·机器学习·贝叶斯
DFminer34 分钟前
【仿生机器人】机器人情绪系统的深度解析
人工智能·机器人
superior tigre36 分钟前
神经网络基础:从单个神经元到多层网络(superior哥AI系列第3期)
网络·人工智能·神经网络
IT_陈寒37 分钟前
开发者必看!5个VSCode隐藏技巧让你的编码效率提升200% 🚀
前端·人工智能·后端
老司机的新赛道43 分钟前
吴恩达:构建自动化评估并不需要大量投入,从一些简单快速的示例入手,然后逐步迭代!
人工智能·ai·agent·智能体
东临碣石8244 分钟前
【AI论文】论文转海报:迈向从科学论文到多模态海报的自动化生成
运维·人工智能·自动化