调用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()

相关推荐
九亿AI算法优化工作室&23 分钟前
GWO优化LSBooST回归预测matlab
人工智能·python·算法·机器学习·matlab·数据挖掘·回归
东锋1.31 小时前
Ollama 安装教程:轻松开启本地大语言模型之旅
人工智能
一只昀1 小时前
【产品经理学习案例——AI翻译棒出海业务】
人工智能·ai·产品经理
蓝染k9z2 小时前
在Ubuntu上使用Docker部署DeepSeek
linux·人工智能·ubuntu·docker·deepseek+
小李学AI3 小时前
基于YOLO11的遥感影像山体滑坡检测系统
人工智能·深度学习·yolo·目标检测·机器学习·计算机视觉·yolo11
笨小古3 小时前
保姆级教程:利用Ollama与Open-WebUI本地部署 DeedSeek-R1大模型
人工智能·deepseek
AI浩3 小时前
【Block总结】CPCA,通道优先卷积注意力|即插即用
人工智能·深度学习·目标检测·计算机视觉
HaiLang_IT3 小时前
毕业设计:基于卷积神经网络的鲜花花卉种类检测算法研究
目标检测·机器学习·毕业设计
IT果果日记4 小时前
Ollama+OpenWebUI部署本地大模型
人工智能·ai编程·ollama·openwebui
说私域4 小时前
基于开源2 + 1链动模式AI智能名片S2B2C商城小程序的内容创作与传播效能探究
人工智能·小程序·开源