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

  • Post author:
  • Post category:其他


本章博客主要分析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 打印出一些输出信息
信息打印

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

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



版权声明:本文为qq_43499961原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。