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

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,再往下看第五部分的剩余代码:

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

结果图展示:

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django实现音乐网站 ⑺

使用Python Django框架制作一个音乐网站, 本篇主要是后台对歌手原有实现功能的基础上进行优化处理。 目录 新增编辑 表字段名称修改 隐藏单曲、专辑数 姓名首字母 安装xpinyin 获取姓名首字母 重写保存方法 列表显示 图片显示处理 引入函数 路径改为显示…

EP4CE6E22C8 FPGA最小系统电路原理图+PCB源文件

资料下载地址:EP4CE6E22C8 FPGA最小系统电路原理图PCB源文件 一、原理图 二、PCB

HTTP——八、确认访问用户身份的认证

HTTP 一、何为认证二、BASIC认证BASIC认证的认证步骤 三、DIGEST认证DIGEST认证的认证步骤 四、SSL客户端认证1、SSL 客户端认证的认证步骤2、SSL 客户端认证采用双因素认证3、SSL 客户端认证必要的费用 五、基于表单认证1、认证多半为基于表单认证2、Session 管理及 Cookie 应…

mysql二进制方式升级8.0.34

一、概述 mysql8.0.33 存在如下高危漏洞&#xff0c;需要通过升级版本修复漏洞 Oracle MySQL Cluster 安全漏洞(CVE-2023-0361) mysql/8.0.33 Apache Skywalking <8.3 SQL注入漏洞 二、查看mysql版本及安装包信息 [rootlocalhost mysql]# mysql -V mysql Ver 8.0.33 fo…

class version 61 java version 17.0.4

class version (javap -verbose xxxx.class)_spencer_tseng的博客-CSDN博客

Demystifying Prompts in Language Models via Perplexity Estimation

Demystifying Prompts in Language Models via Perplexity Estimation 原文链接 Gonen H, Iyer S, Blevins T, et al. Demystifying prompts in language models via perplexity estimation[J]. arXiv preprint arXiv:2212.04037, 2022. 简单来说就是作者通过在不同LLM和不同…

程序框架-事件中心模块-观察者模式

一、观察者模式 1.1 观察者模式定义 意图&#xff1a; 定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变是&#xff0c;所有依赖于它的对象都能得到通知并自动更新。 适用性&#xff1a; 当一个对象状态的改变需要改变其他对象&#xff0c; 或实际对…

Python自动化实战之使用Pytest进行API测试详解

概要 每次手动测试API都需要重复输入相同的数据&#xff0c;而且还需要跑多个测试用例&#xff0c;十分繁琐和无聊。那么&#xff0c;有没有一种方法可以让你更高效地测试API呢&#xff1f;Pytest自动化测试&#xff01;今天&#xff0c;小编将向你介绍如何使用Pytest进行API自…

8.3day04git+数据结构

文章目录 git版本控制学习高性能的单机管理主机的心跳服务算法题 git版本控制学习 一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 安装g…

设计模式--策略模式(由简单工厂到策略模式到两者结合图文详解+总结提升)

目录 概述概念组成应用场景注意事项类图 衍化过程需求简单工厂实现图代码 策略模式图代码 策略模式简单工厂图代码 总结升华版本迭代的优化点及意义什么样的思路进行衍化的扩展思考--如何理解策略与算法 概述 概念 策略模式是一种行为型设计模式&#xff0c;它定义了算法家族&…

【Linux】总结1-命令工具

文章目录 基础指令shell命令以及运行原理Linux权限粘滞位工具 基础指令 ls、pwd、touch、mkdir、netstat、cp、mv、cd、tar、zip、unzip、grep、pstack、ps、rm、cat、more、less、head、tail、find、ulimit -a、clear、whoami、man touch&#xff1a;创建文件&#xff0c;也包…

浏览器同源策略

浏览器同源策略 同源策略&#xff1a;是一个重要的浏览器的安全策略&#xff0c;用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互 它能帮助阻隔恶意文档&#xff0c;减少可能被攻击的媒介 例如&#xff1a;被钓鱼网站收集信息&#xff0c;使用ajax发起…

【云原生K8s】初识Kubernetes的理论基础

K8S由google的Borg系统(博格系统&#xff0c;google内部使用的大规模容器编排工具)作为原型&#xff0c;后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。 云原生基金会&#xff08;CNCF&#xff09;于2015年12月成立&#xff0c;隶属于Linux基金会。CNCF孵化的第一个项目…

8.物联网操作系统之事件标志组

。事件标志组定义 FreeRTOS事件标志组介绍 FreeRTOS事件标志组工作原理 一。事件标志组定义 信号量信号量只能实现任务与单个事件或任务间的同步。但是某些任务可能会需要与多个事件或任务进行同步&#xff0c;此时就可以使用事件标志组来解决。事件标志组能够实现某个任务与…

IotGateway 网关后台设置

**硬件支持型号 点击 查看 硬件支持 详情** DTU701 产品详情 DTU702 产品详情 DTU801 产品详情 DTU802 产品详情 DTU902 产品详情 G5501 产品详情 ARM dotnet 编程 工业物联网网关&#xff08;IIoTGateway&#xff09;是一种硬件设备或软件程序&#xff0c;作为本地设备…

Git推送代码报错403

前言 最近接了一个新的项目&#xff0c;需要将项目创建好&#xff0c;后端基本框架已经搭建好了&#xff0c;就是需要将代码推送到公司的仓库中了&#xff0c;克隆的时候一切顺利&#xff0c;拉取也没有一点点问题&#xff0c;但是在推送的时候报403了&#xff0c;我 … &…

SpringCloud(32):Nacos配置管理应用于分布式系统

1 从单体架构到微服务 1.1 单体架构 Web应用程序发展的早期&#xff0c;大部分web工程师将所有的功能模块打包到一起并放在一个web容器中运行&#xff0c;所有功能 模块使用同一个数据库&#xff0c;同时&#xff0c;它还提供API或者UI访问的web模块等。 尽管也是模块化逻辑…

阿里云官方关于数据安全保护的声明

“阿里云监控用户的数据流量&#xff1f;”“真的假的&#xff1f;”随着近日早晨 朱峰肥鹅旅行 对阿里云的一条朋友圈截图传遍了整个IT圈。 对于网络上的各种传播&#xff0c;以下是阿里云的官方答复&#xff0c;原文如下&#xff1a; 关于数据安全保护的声明 今天有客户反映…

抓包神器-burp

Burp Suite是一款信息安全从业人员必备的集成型的渗透测试工具&#xff0c;它采用自动测试和半自动测试的方式&#xff0c;包含了 Proxy,Spider,Scanner,Intruder,Repeater,Sequencer,Decoder,Comparer等工具模块。通过拦截HTTP/HTTPS的web数据包&#xff0c;充当浏览器和相关应…

electron+vue3全家桶+vite项目搭建【13.1】ipc通信的使用,主进程与渲染进程之间的交互

文章目录 引入IPC通信[主/渲染]进程对应渲染进程>主进程代码测试测试效果 主进程>渲染进程代码测试测试效果 双向通信代码测试测试效果 引入 electron项目常常由一个主进程和多个渲染进程构成&#xff0c;渲染进程之间是隔离的&#xff0c;而所有渲染进程都和主进程共享…