YOLO v4 图片批量测试

本文介绍如何使用已训练好的YOLOv4模型进行批量图像检测。首先生成包含待测图片路径的文档,然后利用YOLO进行图像检测并将结果保存在JSON文件中。最后,读取JSON文件并在图片上绘制检测结果。

如果新拿到一批数据,如何利用现有的yolov4 训练好的模型进行批量测试。

1.生成测试图片文档

在如下程序中,将imgs_path更换为自己的文件路径,下边程序将生成一个测试图片路径的txt文档。

import os
imgs_path = 'images'
txt_path = 'batch_test.txt'
img_list = [os.path.join(imgs_path, i) for i in os.listdir(imgs_path)]
save_txt = '\n'.join(img_list)
file_write_obj = open(txt_path, 'a')
file_write_obj.write(save_txt)
file_write_obj.close()

2.检测图像

下边就是利用yolo图像测试进行检测图像,其中将自己生成好的batch_test.txt一行行作为输入,送入网络中进行检测,同时将生成的log保存在text_result.txt中。

./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -ext_output -dont_show -out result.json < batch_test.txt >> text_result.txt

3.利用json画图片

import json
import cv2


def load_json(path):
    with open(path, 'r') as f:
        json_dict = json.load(f)
    return json_dict


results_json = '../result.json'

json_dict = load_json(results_json)
for i in json_dict:
    print(i)
    image_path = i['filename']
    img = cv2.imread(image_path)
    [h, w, c] = img.shape
    objects_info = i['objects']
    for j in objects_info:
        class_id = j['class_id']
        if class_id == 0:
            color = (255, 0, 0)
        else:
            color = (255, 0, 255)
        box_info = j['relative_coordinates']
        center_x = box_info['center_x']
        center_y = box_info['center_y']
        width = box_info['width']
        height = box_info['height']
        confidence = j['confidence']
        x_min = int((center_x - width / 2) * w)
        y_min = int((center_y - height / 2) * h)
        x_max = int((center_x + width / 2) * w)
        y_max = int((center_y + height / 2) * h)
        img = cv2.rectangle(img, (x_min, y_min), (x_max, y_max), color)
    cv2.imshow('img', img)
    cv2.waitKey(500)
### YOLO算法不同版本的特点 #### YOLO v1 YOLO v1 是该系列的第一个版本,奠定了基础架构。它通过单一神经网络直接预测边界框和类别概率[^5]。其核心特点是将输入图像划分为 $S \times S$ 的网格,并为每个网格单元预测多个边框(B 个)。对于每个边框,模型会输出五个变量 $(x, y, w, h)$ 和置信度分数 $C$。此外,还引入了一个固定长度的向量来表示类别的条件概率。 然而,YOLO v1 存在一些局限性,例如定位误差较大、难以处理小物体等问题。尽管如此,它的实时性能非常出色,在当时的速度测试中表现优异。 --- #### YOLO v2 (YOLO9000) YOLO v2 对原始框架进行了多项改进,提升了精度并保持了高速运行的能力。以下是主要特性: - **Batch Normalization**: 引入批量归一化技术以稳定训练过程并提高收敛速度[^4]。 - **Anchor Boxes**: 借鉴自 Faster R-CNN,使用预定义锚点代替手动设置边框位置[^4]。 - **High Resolution Classifier**: 提前适应高分辨率图片以便更好地捕捉细节特征[^4]。 - **Multi-Scale Training**: 动态调整输入尺寸使模型能够泛化到各种尺度下的对象检测任务[^4]。 这些改动使得 YOLO v2 达到了更高的 mAP 而不影响推理效率。 --- #### YOLO v3 相比之前两个版本,YOLO v3 更加注重灵活性与准确性之间的平衡。具体表现为以下几个方面: - **Darknet-53 Backbone**: 使用更深更强大的骨干网 Darknet-53 替代原来的浅层卷积结构[^2]。 - **Feature Pyramid Networks (FPN)**: 结合多级特征图进行目标检测,尤其增强了对小型目标识别的效果[^3]。 - **Separate Logistic Classifiers**: 将分类器改为独立逻辑回归形式而非 softmax 层,从而支持多标签标注场景[^2]。 这种设计让 YOLO v3 成为了一个强大而通用的对象探测工具。 --- #### YOLO v4 YOLO v4 进一步优化了计算资源利用率的同时提高了检测质量。关键创新如下: - **Bag of Freebies & Bag of Specials**: 综合运用多种无成本或低成本技巧提升效果,如 CutMix 数据增强方式;同时也采用了特定组件比如 CSPNet 架构减少内存消耗[^1]。 - **Mish Activation Function**: 新型激活函数替代传统 ReLU,有助于缓解梯度消失现象[^1]。 - **DIoU-NMS**: 改进了非极大抑制策略,减少了冗余预测框数量同时保留更多有效信息。 因此,YOLO v4 不仅适用于高端硬件环境也能很好地适配移动设备端应用需求。 --- #### YOLO v5 作为最新一代产品之一,YOLO v5 主打易用性和扩展性强两大卖点。除了继承前辈们的优秀基因外还有以下亮点功能值得提及: - **PyTorch Framework Support**: 开源项目基于 PyTorch 实现简化部署流程加快开发周期。 - **Auto-Learning Rate Finder**: 自动寻找最佳学习率机制帮助初学者快速找到合适的超参数配置。 - **Dynamic Anchor Generation**: 动态生成适合当前数据集特性的先验框进一步改善匹配精准程度。 以上种种措施共同造就了一款既高效又便捷的新时代目标检测利器 —— YOLO v5。 ```python import torch from models.experimental import attempt_load weights = 'yolov5s.pt' model = attempt_load(weights, map_location=torch.device('cpu')) # 加载模型权重文件 print(model) # 查看模型结构概览 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值