Anonymous 发表于 2023-8-28 20:29:09

YOLOV1 from scratch using Keras Tensorflow 2.0

这个网址的训练程序我都明白了,有没有大佬写一个test(predict)程序,达到可视化检测的效果呢,救救孩子吧开学作业交不上了
https://www.maskaravivek.com/post/yolov1/
就是输入dog.jpg 显示下面图像的程序,用的上面网页训练函数的权重

Mike_python小 发表于 2023-8-28 20:29:10

YOLOv1的目标检测可视化程序

以下是一个使用预训练权重进行目标检测并可视化结果的示例程序。请确保已经安装了必要的依赖项,例如Keras和OpenCV。


import numpy as np
import cv2
from keras.models import Model
from keras.layers import Input
from yolo_v1 import YOLO

# 定义类别标签
classes = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow',
         'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']

def load_image(image_path):
    # 加载图像并进行预处理(根据训练时的预处理方式进行)
    image = cv2.imread(image_path)
    image = cv2.resize(image, (448, 448))
    image = image / 255.0
    image = np.expand_dims(image, axis=0)
    return image

def draw_boxes(image, boxes, scores):
    # 在图像上绘制检测框和类别名称
    for box, score in zip(boxes, scores):
      x, y, w, h = box
      class_index = np.argmax(score)
      class_name = classes
      confidence = score
      label = f"{class_name}: {confidence:.2f}"
      cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
      cv2.putText(image, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)
    return image

# 构建模型
input_image = Input(shape=(448, 448, 3))
yolo_model = YOLO(input_image, training=False)
model = Model(inputs=input_image, outputs=yolo_model.output)

# 加载预训练权重
model.load_weights('path_to_pretrained_weights')

# 进行目标检测和可视化
image_path = 'dog.jpg'
image = load_image(image_path)
output = model.predict(image)

# 解析输出
boxes = output[..., :4]
scores = output[..., 4:]

# 设置置信度阈值,过滤掉置信度较低的检测结果
confidence_threshold = 0.5
filtered_boxes = []
filtered_scores = []
for box, score in zip(boxes, scores):
    max_score = np.max(score)
    if max_score > confidence_threshold:
      filtered_boxes.append(box)
      filtered_scores.append(score)

# 绘制检测结果并显示图像
result_image = draw_boxes(cv2.imread(image_path), filtered_boxes, filtered_scores)
cv2.imshow("Detection Result", result_image)
cv2.waitKey(0)
cv2.destroyAllWindows()


请将代码中的以下部分进行相应的修改:

- 将 path_to_pretrained_weights 替换为预训练权重文件的路径。
- 将 dog.jpg 替换为你要测试的图像文件的路径。

运行程序后,应该会显示含有检测框和类别的图像窗口。

希望这能帮到你!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-8-28 20:35:57

以下是一个使用YOLOv1模型进行预测和可视化检测的示例程序:

import numpy as np
import cv2
from matplotlib import pyplot as plt
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Conv2D, Input

def create_yolo_model():
    # 创建YOLOv1模型结构
    input_image = Input(shape=(448, 448, 3))
    # ... 模型结构参考上述链接中的代码 ...

    model = Model(inputs=input_image, outputs=output)
    return model

def load_weights(model, weights_file):
    # 加载训练好的权重
    # ... 读取权重文件并将权重加载到模型中 ...

def preprocess_image(image):
    # 图像预处理,将图像调整为模型输入尺寸
    image = cv2.resize(image, (448, 448))
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    image = image.astype(np.float32)
    image /= 255.0
    image = np.expand_dims(image, axis=0)
    return image

def postprocess_predictions(predictions):
    # 后处理预测结果,提取检测框和类别信息
    # ... 根据模型输出解析预测结果 ...

def visualize_detections(image, detections):
    # 可视化检测结果
    # ... 根据检测结果在图像上绘制检测框和类别信息 ...

# 创建模型
model = create_yolo_model()

# 加载权重
weights_file = 'path_to_weights_file'
load_weights(model, weights_file)

# 读取测试图像
image_file = 'dog.jpg'
image = cv2.imread(image_file)

# 图像预处理
input_image = preprocess_image(image)

# 进行预测
predictions = model.predict(input_image)

# 后处理预测结果
detections = postprocess_predictions(predictions)

# 可视化检测结果
visualize_detections(image, detections)

# 显示图像
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.show()


请注意,上述代码中的一些部分需要根据你的具体情况进行修改,比如模型结构的创建和权重文件的路径。另外,你可能需要安装一些额外的库,如 matplotlib 和 opencv-python 。

希望这个示例程序能帮助到你,让你能够完成作业并实现可视化检测效果。如果你遇到任何问题,请随时提问。
页: [1]
查看完整版本: YOLOV1 from scratch using Keras Tensorflow 2.0