【目标检测】YOLOv5算法实现(九):模型预测

news2024/11/24 1:17:36

  本系列文章记录本人硕士阶段YOLO系列目标检测算法自学及其代码实现的过程。其中算法具体实现借鉴于ultralytics YOLO源码Github,删减了源码中部分内容,满足个人科研需求。
  本系列文章主要以YOLOv5为例完成算法的实现,后续修改、增加相关模块即可实现其他版本的YOLO算法。

文章地址:
YOLOv5算法实现(一):算法框架概述
YOLOv5算法实现(二):模型加载
YOLOv5算法实现(三):数据集加载
YOLOv5算法实现(四):正样本匹配与损失计算
YOLOv5算法实现(五):预测结果后处理
YOLOv5算法实现(六):评价指标及实现
YOLOv5算法实现(七):模型训练
YOLOv5算法实现(八):模型验证
YOLOv5算法实现(九):模型预测

本文目录

  • 引言
  • 模型预测(predict.py)

引言

  本篇文章综合之前文章中的功能,实现模型的预测。模型预测的逻辑如图1所示。

在这里插入图片描述

图1 模型预测流程

模型预测(predict.py)

def predice():
    img_size = 640  # 必须是32的整数倍 [416, 512, 608]
    file = "yolov5s"
    cfg = f"cfg/models/{file}.yaml"  # 改成生成的.cfg文件
    weights_path = f"weights/{file}/{file}.pt"  # 改成自己训练好的权重文件
    json_path = "data/dataset.json"  # json标签文件
    img_path = "test.jpg"
    save_path = f"results/{file}/test_result8.jpg"
    assert os.path.exists(cfg), "cfg file {} dose not exist.".format(cfg)
    assert os.path.exists(weights_path), "weights file {} dose not exist.".format(weights_path)
    assert os.path.exists(json_path), "json file {} dose not exist.".format(json_path)
    assert os.path.exists(img_path), "image file {} dose not exist.".format(img_path)

    with open(json_path, 'r') as f:
        class_dict = json.load(f)

    category_index = {str(v): str(k) for k, v in class_dict.items()}

    input_size = (img_size, img_size)

    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    device = torch.device("cpu")
    model = Model(cfg, ch=3, nc=3)
    weights_dict = torch.load(weights_path, map_location='cpu')
    weights_dict = weights_dict["model"] if "model" in weights_dict else weights_dict
    model.load_state_dict(weights_dict, strict=False)
    model.to(device)

    model.eval()
    with torch.no_grad():
        # init
        img = torch.zeros((1, 3, img_size, img_size), device=device)
        model(img)

        img_o = cv2.imread(img_path)  # BGR
        assert img_o is not None, "Image Not Found " + img_path

        img = letterbox(img_o, new_shape=input_size, auto=True, color=(0, 0, 0))[0]

        # Convert
        img = img[:, :, ::-1].transpose(2, 0, 1)  # BGR to RGB, to 3x416x416
        img = np.ascontiguousarray(img)

        img = torch.from_numpy(img).to(device).float()
        img /= 255.0  # scale (0, 255) to (0, 1)
        img = img.unsqueeze(0)  # add batch dimension

        t1 = torch_utils.time_synchronized()
        pred = model(img)[0]  # only get inference result
        t2 = torch_utils.time_synchronized()
        print("inference time: {}s".format(t2 - t1))
        print('model: {}'.format(file))



        pred = utils.non_max_suppression(pred, conf_thres=0.1, iou_thres=0.6, multi_label=True)[0]
        t3 = time.time()
        print("post-processing time: {}s".format(t3 - t2))



        # process detections
        pred[:, :4] = utils.scale_coords(img.shape[2:], pred[:, :4], img_o.shape).round()


        bboxes = pred[:, :4].detach().cpu().numpy()
        scores = pred[:, 4].detach().cpu().numpy()
        classes = pred[:, 5].detach().cpu().numpy().astype(np.int) + 1

        pil_img = Image.fromarray(img_o[:, :, ::-1])
        plot_img = draw_objs(pil_img,
                             bboxes,
                             classes,
                             scores,
                             category_index=category_index,
                             box_thresh=0.2,
                             line_thickness=3,
                             font='arial.ttf',
                             font_size=30)
        plt.imshow(plot_img)
        plt.show()
        # 保存预测的图片结果

        plot_img.save(save_path)


if __name__ == "__main__":
    predict()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1400778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RHCE上课笔记(前半部分)

第一部分 网络服务 第一章 例行性工作 1.单一执行的例行性工作 单一执行的例行性工作(就像某一个时间点 的闹钟):仅处理执行一次 1.1 at命令:定时任务信息 [rhellocalhost ~]$ rpm -qa |grep -w at at-spi2-core-2.40.3-1.el9.x…

SDCMS靶场通过

考察核心:MIME类型检测文件内容敏感语句检测 这个挺搞的,一开始一直以为检查文件后缀名的,每次上传都失败,上传的多了才发现某些后缀名改成php也可通过,png图片文件只把后缀名改成php也可以通过,之前不成功…

最全机器学习预测全家桶,持续更新!看这一篇绝对够了!MATLAB代码

全家桶一直在持续更新中,截止到本期,一共发了7篇关于机器学习预测全家桶的文章。且后续还会继续更新。参考文章如下: 1.五花八门的机器学习预测?一篇搞定不行吗? 2.机器学习预测全家桶,多步预测之BiGRU、Bi…

阿里云国外服务器多少钱一个月?24元/月

阿里云国外服务器优惠活动「全球云服务器精选特惠」,国外服务器租用价格24元一个月起,免备案适合搭建网站,部署独立站等业务场景,阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动: 全球云服务器精选特惠…

代码随想录刷题题Day38

刷题的第三十八天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C Day38 任务 ● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组 1 最长递增子序列 300.最长递增子序列 …

运筹说 第107期 | 排队论创始人——阿格纳·克拉鲁普·爱尔朗

前面我们已经了解了非线性规划的相关内容,相信大家一定也有所收获,下面我们将带着大家继续了解排队论的相关内容,在本次文章中我们将一起走近排队论的奠基人——阿格纳克拉鲁普爱尔朗(Agner Krarup Erlang)&#xff0c…

x-cmd pkg | jieba - 中文结巴分词工具

目录 简介首次用户功能特点竞品分析进一步阅读 简介 结巴中文分词(jieba)是一款在 Python 环境下使用的开源中文文本分词工具。它支持多种分词模式,包括精确模式、全模式和搜索引擎模式,同时支持繁体分词和自定义词典。因其易用性…

【JavaEE】_基于UDP实现网络通信

目录 1. 服务器 1.1 实现逻辑 1.2 代码 1.3 部分代码解释 2. 客户端 2.1 实现逻辑 2.2 代码 2.3 客户端部分代码解释 3. 程序运行结果 4. 服务器客户端交互逻辑 此篇内容为实现UDP版本的回显服务器echo server; 普通服务器:收到请求&#xff…

Unity中ShaderGraph下获取主灯

文章目录 前言一、ShaderGraph获取主灯1、创建ShaderGraph2、创建一个自定义方法(Custom Function)节点3、新建两个 Vector3 类型的输出变量4、选择自定义节点程序体为 string 类型5、编写程序体6、我们输出主光方向看看效果7、我们输出主光颜色看看效果…

ios适配虚拟home键

在H5开发过程中遇到一个兼容性问题。iphone手机的虚拟home键会对屏幕底部的内容造成遮挡。要处理此问题,需要清楚安全区域这个概念。 安全区域 根据刘海和虚拟Home键,Apple为其设备提供了屏幕安全区域的视觉规范 竖屏:竖屏的时候&#xff…

「优选算法刷题」:查找总价格为目标值的两个商品

一、题目 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。 示例 1: 输入:price [3, 9, 12, 15], target 18 输出:[3,15] 或者 [15,3]示例…

OpenCV-Python(49):图像去噪

目标 学习使用非局部平均值去噪算法去除图像中的噪音学习函数cv2.fastNlMeansDenoising()、cv2.fastNlMeansDenoisingColored等 原理 在前面的章节中我们已经学习了很多图像平滑技术,比如高斯平滑、中值平滑等。当噪声比较小时,这些技术的效果都是很好…

【Qt之模型视图】1. 模型和视图架构

1. 模型/视图架构是什么及有什么用 MVC(Model-View-Control)是一种源自Smalltalk的设计模式,通常用于构建用户界面。 MVC由三种类型的对象组成。模型是应用对象,用来表示数据;视图是模型的用户界面,用来显…

Miracast无线投屏的操作步骤

家里有台老爷机,估计在10年以上了。内核屏显还是HD 4400。今天原本在尝试挂蓝牙音箱,没整成。意外地激活了无线投屏。Miracast是一个wifi本身的功能包,可以让台式机通过wifi与屏幕互联,不必通过hdmi线。 Step1.确认无线投屏能力&…

【大数据分析与挖掘技术】Mahout推荐算法

目录 一、推荐的定义与评估 (一)推荐的定义 (二)推荐的评估 二、Mahout中的常见推荐算法 (一)基于用户的推荐算法 (二)基于物品的推荐算法 (三)基于S…

【C++干货铺】C++异常处理机制

个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 C语言传统的处理错误的方式 C处理异常方式 异常的使用 异常的抛出和捕获 异常的重新抛出 异常安全 异常规范 自定义异常体系 C标准库中的异常体系 ​编辑…

【Linux系统编程二十八】基于条件变量的阻塞队列(生产消费模型)

【Linux系统编程二十八】基于条件变量的阻塞队列(生产消费模型) 一.同步问题二.条件变量1.实现原理2.等待的前提3.使用接口①.【定义条件变量】②.【初始化条件变量】③.【让线程去条件变量下等待】④.【为什么第二个参数是锁?】条件变量和锁的关系是什么…

swift基础语法

swift学习笔记 参考教程 https://www.runoob.com/swift/swift-data-types.html swift代码规范 https://juejin.cn/post/7129465308376465422 1 环境搭建 必须要有苹果电脑且安装Xcode 2 基本语法 Swift是类型安全的语言,编译时会进行类型检查 import Cocoa var m…

从方法论到最佳实践,深度解析企业云原生 DevSecOps 体系构建

作者:匡大虎 引言 安全一直是企业上云关注的核心问题。随着云原生对云计算基础设施和企业应用架构的重定义,传统的企业安全防护架构已经不能够满足新时期下的安全防护要求。为此企业安全人员需要针对云原生时代的安全挑战重新进行系统性的威胁分析并构…

5G_射频测试_测试模式解读(三)

Downlink test models FR1 test model 1.1 (NR-FR1-TM1.1)(满PRB,QPSK)FR1 test model 1.2 (NR-FR1-TM1.2)( QPSK/boosted/40% QPSK)FR1 test model 2 (NR-FR1-TM2)(64QAM 只有1个PRB 功率最低)FR1 test model 2a (NR-FR1-TM2a) )(256QAM 只…