YoLoV5学习(4)--detect.py程序(预测图片、视频、网络流)逐段讲解~

本章博客主要分析YoloV5代码中的detect程序代码,按照程序运行步骤顺序主要分为3大部分。

1、包与库的导入

1.1 导入安装好的python库、torch库等等

库的导入
其中:argparse模块、os模块、sys模块都是Python内置模块。
argparse模块:它是一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息;
os模块:它提供了多种操作系统的接口。通过os模块提供的操作系统接口,我们可以对操作系统里文件、终端、进程等进行操作;
sys模块:它是与python解释器交互的一个接口,该模块提供对解释器使用或维护的一些变量的访问和获取,它提供了许多函数和变量来处理 Python 运行时环境的不同部分。

from pathlib import Path

该段代码意思是指从External Libraries->pathlib->path 导入Path库,具体说明如下:
Path表示文件系统路径,但与PurePath不同,它还提供方法对路径对象进行系统调用。根据您的系统,实例化路径将返回PosixPath或WindowsPath对象也可以直接实例化PosixPath或WindowsPath,但不能在POSIX系统上实例化WindowsPath,反之亦然。

import torch
import torch.backends.cudnn as cudnn

添加torch库,CUDNN 是英伟达专门为深度神经网络所开发出来的 GPU 加速库,针对卷积、池化等常见操作做了非常多的底层优化,比一般的 GPU 程序要快很多。在使用 GPU 的时候,PyTorch 会默认使用 CUDNN 加速。

1.2 导入相对路径下的库

相对路径下的库
导入、添加项目文件下相对应的文件夹中的库文件。

1.3 定义一些文件路径

文件路径
_ _ file _ _表示当前detect.py的文件路径,第一行代码获取其绝对路径,第二行代码获取其根目录,sys.path表示模块的查询路径列表。

2、执行函数

执行函数
if name == ‘main’:的作用,一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if name == ‘main’: 的作用就是控制这两种情况执行代码的过程,在 if name == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。
(1)解析命令行传进的参数;opt = parse_opt()
该段代码分为三部分,第一部分定义了一些可以传导的参数类型,第二部分对于imgsize部分进行了额外的判断(640*640),第三部分打印所有参数信息,opt变量存储所有的参数信息,并返回。
(2)执行命令行参数; main(opt)
该段代码分为两部分,第一部分首先完成对于requirements.txt的检查,检测这些依赖包有没有安装;第二部分,将opt变量参数传入,执行run函数。

3、Run函数

run函数
run函数的整体运行部分可以概括为6个部分。

3.1 对source传入的东西进行额外判断

source判断
此处的source对应run函数中的source,代表图片路径;第三行代码判断是否传入为文件地址,IMG_FORMATS表示各种图片类型,VID_FORMATS表示各种视频类型;第四行代码判断是否为网络流传入;第五行代码source.isnumeric判断是否传入为数字,–source 0,数字0表示打开电脑的第一个摄像头;如果是一个网络流且是一个文件,就会进行下载操作。

3.2 新建了一个保存结果的文件夹

文件夹
代码中的 project 指 run 函数中的 project,对应的是 runs/detect 的目录,name 对应 run 函数中的“name=exp”,然后进行拼接操作;increment_path 表示增量路径;判断 save_txt 是否为 true,save_txt 在 run 函数以及 parse_opt() 函数中都有相应操作,如果传入save_txt,新建 “labels” 文件夹存储结果。

3.3 加载模型权重

加载模型
首先根据代码环境选择加载设备,GPU/CPU。选择多后端框架,判断你的深度学习框架,本次是pytorch,加载模型,
读取模型参数,判断 imgsz,步长 stride 一般是32。

3.4 DataLoad模块,加载待预测的图片

DataLoad模块
首先是判断 webcam 是否为 true,前面已经定义,不为True,因此执行 datasets.py下的LoadImages函数,完成输入数据的加载过程。

3.5 模型的推理过程

模型推理过程
执行模型推理过程,把图片或者视频输入模型,产生一个预测结果,并用检测框标记出来。
首先,让模型进行一个预热,然后定义 dt,seen 两个变量,遍历 dataset ,整理图片信息;进行预测,根据 run 函数里面的置信度以及IOU参数,进行信息过滤;对检测框进行后续处理,画框选择,坐标映射(640*640坐标映射为原图坐标),是否保存绘画结果。

3.6 打印出一些输出信息信息打印

打印结果,记录了一些总共的耗时,以及信息保存。

本次进行了一些简短的分析,如果有帮助的话,点赞支持一下,后续有需要在进行其他文件程序。交流学习,互相进步~

猜你喜欢

转载自blog.csdn.net/qq_43499961/article/details/125714657