yolov5代码解读之​detect.py文件【超详细的好吗!点进来看阿很用心的!】

news2025/2/21 4:09:06

yolov5的代码一直在更新,所以你们代码有些部分可能不太一样,但大差不差。

先给大家看一下项目结构:(最好有这个项目,且跑通过)

detect.py文件:它可以预测视频、图片文件夹、网络流等等。

如何执行这个项目前面已经讲过了:从零开始yolov5模型训练【绝对能学会】

执行这个代码首先就是运行前面的这一部分:

对于第三部分的话,看一下这个就很明了:

对于第二部分:

什么是模块的查询路径列表:(sys.path)

就比如我们刚刚导入的models.common的那一行,我们执行的是detect.py文件,那么这个文件是如何知道这个模块在哪呢?其实就是因为我们在sys.path路径中存在了yolov5-master这个文件夹的路径,所以导包的时候,它就能知道要在yolov5-master这个文件夹里面去找models文件夹里面的common。如果sys.path里面没有yolov5-master这个文件夹里面的路径的话,导包就会出现错误。第三行的代码也是为了确保ROOT路径是存在于yolov5-master这个文件夹下的。

当把包导完之后,它就会跳到文件的最下面去执行if __name__当中的代码:

先聊聊命令行参数的意思:

再聊聊if __name__中的第一行代码的内容:(来到parse_opt函数)

参数信息打印出来大概就是这样:

然后来看看run函数吧:

run函数第一部分代码:

第三行is_file = Path(source).suffix[1:] in (IMG_FORMATS + VID_FORMATS)的意思:

is_file呢就是表示我们传入的地址是不是一个文件地址;

suffix表示的就是后缀的意思,就是“.jpg”;[1:]表示从“j”开头,所以Path(source).suffix[1:]表示的就是“jpg"。

然后判断jpg是不是在IMG_FORMATS +和VID_FORMATS这两个格式中。

那么这两个格式又是啥呢,点进来看(按住crtl,然后鼠标点击这两个美丽的单词):

所以我们可以看到jpg是位于这两个格式中的,因此is_file也是表示的true。

(webcam是false哦,这个能推出来吧,不能推出来建议了解一下or和and)

然后到我们的run函数中的第二部分代码(94和95行)

第94行的含义:

save_dir就是新建一个保存结果的文件夹;

project代表:ROOT / 'runs/detect', name代表'exp', 用“/”把他们两个拼接起来;

increment代表增量,increment_path表示增量路径,啥叫增量路径呢:

95行:

run函数的第三部分(模型加载部分):

这一部分的话,先看一下多后端:

具体就是第99句的参数含义:model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half)

weights是run函数开头参数定义的:(可以看到他用的是yolov5的s这个模型,yolov5还有其他的比如m、x、n、l等,这里默认用的s):

weights=ROOT / 'yolov5s.pt',  # model path or triton URL

device就是使用gpu还是cpu;

dnn默认的false(run函数开头定义,点进多后端可以k看到dnn代表的就是onnx opencv dnn模型);

data是“ROOT / 'data/coco128.yaml'”这个文件,点进去看一下:

half表示半精度推理过程,默认为false,也就是没用到,不管他~

多后端点进去(模型选择):

再看看多后端是如何创建的:

然后这是第三部分的其他代码:

run函数的第四部分(dataloader部分):

(batch_size=1,每次输入一张图片)

(vid_path,vid_writer列表长度都是1,后面有用)

LoadImages点进去看看是个啥:

run函数的第五部分(推理部分):

(先看dataloders.py下面几段代码)

这里再具体讲一下letterbox是如何把一张图片转换过来的:(314行)

im = letterbox(im0, self.img_size, stride=self.stride, auto=self.auto)[0]  # padded resize

im0:就是指原图片大小810×1080,然后三通道的图片;

img_size就是一直提到的640×640的这样一个尺寸大小;

stride表示模型的步长,32;auto是true。

我们点进这个函数(letterbox)看:

上面的介绍完了,

然后看detect.py的第五部分代码解读:

首先是第116行:

    model.warmup(imgsz=(1 if pt or model.triton else bs, 3, *imgsz))  # warmup

warmup就是一个热身环节,它内部就是初始化了一张空白的图片传入到模型中,让模型执行了一次前馈传播,相当于随便给了gpu一张图片,让gpu跑了一遍,让gpu有一个“热身”环节哈哈,完了之后再把自己的数据集给它让他预测。

再具体一下这行代码:

pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det)

通过这一步处理之后会得到torch.Size([1,5,6])。

5表示从18900个检测框降低到了5个;(18900是通过权重文件算出来的)

6:前四个值表示坐标点的信息,就是一个框框它的左上角和右下角xy坐标;以及它判断这个框的置信度信息;最后一个是这个框的类别信息。

这里展示一下预测结果显示:

继续往后面看代码(139行):

具体看一下Annotator是如何实现的:

ok,再往下看第五部分的剩余代码:

第六部分的代码(打印结果部分):

结果图展示:

 

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

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

相关文章

重磅!百度再放大招,文心大模型3.5三大维度、20项指标遥遥领先

近日,清华大学新闻与传播学院沈阳团队发布《大语言模型综合性能评估报告》(下文简称“报告”),报告显示百度文心一言在三大维度20项指标中综合评分国内第一,超越ChatGPT,其中中文语义理解排名第一&#xff…

Crond和sudo

目录 前言 一、Crond (一)、一次性任务 (二)、周期性任务 1./etc/crontab中加入 2.使用crontab命令编辑计划任务 二、sudo 1.sudo概念 2.sudo提权 总结 前言 crond是linux下用来周期性的执行某种任务或等待处理某些事件的…

[CKA]考试之Sidecar代理

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Context 将一个现有的 Pod 集成到 Kubernetes 的内置日志记录体系结构中&#xff…

关于多媒体视频翻译,你了解多少?

近年来,随着多媒体视频行业的快速发展,观看中外视频已成为数千万人的日常习惯,进而促进了视频翻译需求量的不断增加。那么,如何做好多媒体视频翻译服务,关于多媒体视频翻译,你了解多少? 据了解&…

浅谈智能低压电动机保护控制器的研发及其应用

安科瑞 华楠 摘 要:低压电动机保护控制器是整套工业生产自动化电动机拖动系统中的重要的核心器件,可以实现工业自动化生产过程中电动机远程系统监控与控制的智能化管理,帮助用户及 时了解电动机的运行状况,为电动机设备状态分析…

【算法系列 | 7】深入解析查找算法之—布隆过滤器

序言 心若有阳光,你便会看见这个世界有那么多美好值得期待和向往。 决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。 我们一起努力,成为更好的自己! 今天第3讲,讲一…

计算机网络—TCP和UDP、输入url之后显示主页过程、TCP三次握手和四次挥手

TCP基本认识 TCP是面向连接的、可靠的,基于字节流的传输层通信协议。 图片来源小林coding 序号:传输方向上字节流的字节编号。初始时序号会被设置一个随机的初始值(ISN),之后每次发送数据时,序号值 ISN…

合规管理,企业生存之本!这4大方法,助你规避风险

当下,合规管理已成为企业必修的一门学问。无论是上市公司还是民营企业,都面临着日益严苛的监管合规要求。然而,许多企业在在应对频繁更新的合规要求时,仍然手忙脚乱,合规工作参差不齐。 专家分析认为,企业合规困境的主要症结在于,业务运转过程中产生了大量证明文件,但企业对其…

全链路仿真压测系统

目录 1.项目背景 2.仿真压测系统成型之路 3. 818台网实战开始 4. 总结 1.项目背景 目前常用的压测工具一般都是针对QPS这一个单一指标进行考量。即使支持编写脚本的工具也只是通过参数化模拟用户。但是实际用户是使用单独设备请求服务器,即一个用户就是一个tc…

什么是重定向,怎么解决重定向问题

目录 引言 什么是重定向 为什么会发生重定向 常用的重定向方法 解决重定向问题的方法 代码示例 注意事项 总结 引言 在网络应用中,重定向是一种常见的技术,用于在浏览器请求页面时将用户重定向到另一个页面。本文将介绍重定向的概念&#xff0c…

Nginx反向代理配置+负载均衡集群部署

文章目录 负载均衡反向代理基础环境部署:什么是代理实验环境图流量过程 环境部署准备两台Web服务器安装Nginx准备页面内容添加主机名 代理服务器配置 修改windos hosts文件测试:终端浏览器 负载均衡反向代理基础环境部署: 什么是代理 正向代…

16-3_Qt 5.9 C++开发指南_使用QStyle 设置界面外观_实现不同系统下的界面效果的匹配

文章目录 1. QStyle的作用(实现不同系统下的界面效果的匹配)2. Qt内置样式的使用3. 源码3.1 可视化UI设计3.2 mainwindow.cpp 1. QStyle的作用(实现不同系统下的界面效果的匹配) Qt 是一个跨平台的类库,相同的界面组件…

D455+VINS-Fusion+surfelmapping 稠密建图(三)

继续,由surfelmapping建立的点云生成octomap八叉树栅格地图 一、安装OctomapServer 建图包 安装插件 sudo apt-get install ros-melodic-octomap-ros sudo apt-get install ros-melodic-octomap-msgs sudo apt-get install ros-melodic-octomap-server sudo apt-…

js-1:JavaScript中的数据类型?存储上有啥差别

1、在JavaScript中,共有两种数据类型。 基本类型 复杂类型 区别在于:存储位置不同 2、基本类型 主要分为以下6种: Number String Boolean Undefined null Symbol Number : 数值最常见的证书类型格式则为十进制,还可以设置八进制&…

K8s中的PV和PVC和监控

1.PV和PVC PV:持久化存储,对存储资源进行抽象,对外提供可以调用的地方(类似:生产者) PVC:用于调用,不需要关心内部实现细节(类似:消费者) 2.实…

【Gitee的使用】Gitee的简单使用,查看/创建SSH公匙、创建版本库、拉取代码、提交代码

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 本篇文章简单介绍,如何在Gitee上面创建版本库、拉取…

搭建企业级BI系统有多快?奥威BI表现惊人

搭建BI系统需要建立一个可靠的数据仓库和针对分析工具/UI的数据结构。同时,这个过程需要不断地迭代优化与维护。主要有搭建环境、建设数仓和分析模型、设计数据可视化报表。 不难看出,从零开始搭建企业级BI系统是一个工作量大、程序繁琐的工程&#xff…

Jenkins 使用

Jenkins 使用 文章目录 Jenkins 使用一、jenkins 任务执行二、 Jenkins 连接gitee三、Jenkins 部署静态网站 一、jenkins 任务执行 jenkins 创建 job job的名字最好是有意义的 restart_web_backend restart_web_mysql[rootjenkins ~]# ls /var/lib/jenkins/ config.xml …

AIGC+低代码:征途漫漫,道阻且长

人们总是高估一项科技所带来的短期效益,却又低估它的长期影响。 一、低代码与 AI 深度融合是未来发展趋势 2023 年上半年,随着 Chat GPT 的爆火,AI 在自然语言对话和代码领域的能力引发全世界的关注,现阶段的 AI 真的能将大家带入…

网络编程——MAC地址、IP地址和子网掩码

MAC地址、IP地址和子网掩码 一、MAC地址:硬件身份证 1、MAC地址的概念 MAC地址,即媒体访问控制地址(Media Access Control Address),是一个用于唯一标识网络设备的物理地址。每个网络接口卡(NIC&#xf…