YOLO-YOLOV5目标检测初步了解记录

文章介绍了Yolov5模型的基本使用,包括运行官方的yolov5s.pt和yolov5m.pt权重文件进行物体检测,以及对项目结构、Detect.py和Train.py源码的初步理解。主要涉及数据集配置、模型加载、命令行参数解析和训练过程。虽然训练源码阅读难度较高,但已明确了关键函数的作用。
摘要由CSDN通过智能技术生成

大体上对yolov5模型有了初步了解。模型类似于应用程序模板,程序员拿过来改一改就能弄出自己需求功能的应用程序。上手只需要修改需要的几个参数或位置,即可拿来跑出自己的模型权重。用于后期的部署。以下是使用前基本的了解与熟悉过程记录,非教程
tips:不管是前期配置pytorch环境,还是之后down yolo本体或pt文件,都最好备着个代理,不然真是会被网速折磨的够呛。

官方例程运行:

yolov5s.pt权重

使用了了官方的yolov5s.pt权重,可以识别80类物品:
‘person’,‘bicycle’,‘car’,‘motorcycle’, ‘airplane’,‘bus’,‘train’, ‘truck’,‘boat’……
运行起来,看着还不错,蛮有意思的。不过整体置信率都不高。
在这里插入图片描述
在这里插入图片描述

yolov5m.pt权重

换成了更大的yolov5m.pt,卡顿了不少,置信率整体上高了一些。连把书识别成laptop都更自信了。
在这里插入图片描述
在这里插入图片描述
实时识别效果gif
在这里插入图片描述
玩起来确实很有趣,不过要开始干正事了。

项目结构:

一个不错的详解学习文章:
文件结构解释
通过此博客,基本了解yolov5项目结构,知道大体上文件及文件夹作用,知道首先需要注意哪几个文件及文件夹。下图显示了我们初学者主要需要关注的文件或文件夹:
在这里插入图片描述
tips:听到某个人说数据集本体最好放在根目录下,不要放在data文件夹下。
文件结构基本清楚了,继续下一步吧。源码阅读的学习也是根据此人的博客。

源码阅读:

由于源码中存在注释,在记录中只分隔标记代码段用处,不再额外引用代码。

Detect.py:

代码讲解学习对象链接

基本配置:

  1. 首先导入包,不必多提
  2. 获取文件路径,将当前.py文件所在项目文件夹添加到python环境中,使得其可以调用同一个文件夹下的其他模块。
  3. 加载自定义模块中的类,由于有第2步,所以这一步可以导入。

执行main函数:

在命令行中中进入对用根目录,输入:>python detect.py --source 0,即可运行detect.py去采集摄像头视频帧进行识别并输出结果。
detect.py最后,
if name == “main”:
opt = parse_opt() # 接收命令行传来的参数到opt中
main(opt) # 用opt参数去执行主函数
if行只有命令行调用时执行,与作为模块调用执行相比,多了个接受命令行参数的步骤。

设置opt参数:

这段代码是一个 Python 脚本中的一个函数,用于解析命令行参数并返回这些参数的值。

  1. –data:yolov5官方模板指向data/coco128.yaml文件。此yaml文件包括coco128数据集路径;该路径下的train、val以及test集的划分路径。还有coco128数据集的标签总数类别。还有数据集下载url 。有人说可以不用管。
  2. –weights: 训练的权重路径,可以使用自己训练的权重,也可以使用官网提供的权重。默认官网的权重yolov5s.pt(yolov5n.pt/yolov5s.pt/yolov5m.pt/yolov5l.pt/yolov5x.pt/区别在于网络的宽度和深度以此增加)
  3. –source: 测试数据,可以是图片/视频路径,也可以是’0’(电脑自带摄像头),也可以是rtsp等视频流, 默认data/images
  4. –imgsz: 预测时网络输入图片的尺寸,默认值为 [640]
  5. –conf-thres: 置信度阈值,默认为 0.50
  6. ……

执行run函数:

  1. 载入参数。
  2. 初始化配置。这段代码主要用于处理输入来源。定义了一些布尔值区分输入是图片、视频、网络流还是摄像头。
  3. 保存结果。这段代码主要是用于创建保存输出结果的目录。创建一个新的文件夹exp(在runs文件夹下)来保存运行的结果。
  4. 加载模型。这段代码主要是用于选择设备、初始化模型和检查图像大小。
  5. 加载数据。这段代码是根据输入的 source 参数来判断是否是通过 webcam 摄像头捕捉视频流。
  6. 推理部分
    热身部分,对每张图片/视频进行前向推理,NMS除去多余的框(这段代码是执行非最大值抑制(NMS)的步骤,用于筛选预测结果,预测过程(这段代码使用了一个循环来遍历检测结果列表中的每个物体,并对每个物体进行处理),打印目标检测结果,在窗口中实时查看检测结果,设置保存结果
  7. 在终端里打印出运行的结果

Train.py:

代码讲解学习对象链接

导包和基本配置,分布式训练初始化(如果具有多GPU)。大体同detect.py。

undefined 执行main()函数:

检查分布式训练环境。
判断是否断点续训。
判断是否分布式训练。
判断是否进化训练。

设置opt参数。

执行train()函数:

加载参数和初始化配置信息。
加载网络模型。
加载数据集。
训练过程。
打印消息释放缓存。

执行run()函数。

类似于命令行支持函数,可以使得别的模块导入train.py后,通过run调用执行训练过程。

有一说一,train.py的阅读过程极其艰难与痛苦,大部分的原因还是积累缺失导致的各类专有名词与python基础代码实现的不认识/不熟练,以至于能不能说读完了读完源码都得打个大大的问号。不过,基本的功能对应的代码位置确定了,至于别的更细的,说到底是个水磨工夫,慢慢来吧。

总结:

到目前为止,yolov5的初步使用所需的应该具备了,准备开始尝试训练自己的小玩意吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值