欢迎光临散文网 会员登陆 & 注册

学习笔记-YOLOV5目标检测初步了解记录

2023-03-21 14:56 作者:Erromana  | 我要投稿

吐槽:无奈,好好的 markdown文本一到b站,啥排版都没了,只能手动再调整。也不知道以后会不会支持md格式。似乎有人开发了转换插件,也不知好不好用。到底还是对口的网站更对口些。

大体上对yolov5模型有了初步了解。模型是类似于应用程序的模板,程序员拿过来改一改就能弄出自己需求功能应用。上手只需要修改需要的几个参数或位置,即可拿来跑出自己的模型权重,来用于后期的部署。以下是使用yolov5前基本的了解与熟悉过程的记录,非教程

tips:不管是前期配置pytorch环境,还是之后git yolo本体或pt文件,都最好备着个代理,不然真是会被网速折磨的够呛。

官方例程运行:

detect.py使用yolov5s.pt权重:

使用了了官方的yolov5s.pt权重,可以识别80类物品:

'person','bicycle','car','motorcycle', 'airplane','bus','train', 'truck','boat', 'traffic light'……

运行起来,看着还不错,蛮有意思的。不过整体置信率都不高。

yolov5m.pt权重:

换成了更大的yolov5m.pt,卡顿了不少,置信率整体上高了一些。连把书识别成laptop都更自信了。

实时识别效果:

train.py使用yolov5s.pt训练

数据集为coco128,虽然只有128张图,但也只浅浅地跑了5轮。毕竟我的小笔记本只是1660ti,还是不要为难它了。得到了best.pt。

使用best.pt效果

乍一看其实也还可以,就是为我们的实验室新添了个TV。


好了,玩了好一阵,确实很有趣,不过接下来要开始干正事了。


项目结构:基本完成

要学习一个项目,项目结构是必须先了解的。一个不错的详解学习文章:

https://blog.csdn.net/weixin_43334693/article/details/129356033

通过此博客,基本了解yolov5项目结构,知道大体上文件及文件夹作用,知道首先需要注意哪几个文件及文件夹。下图显示了我们初学者主要需要关注的文件或文件夹:

tips:听到某个人说数据集本体最好放在根目录下,不要放在data文件夹下。

文件结构基本清楚了,继续下一步吧。读源码,也是根据此人的博客。


源码阅读:

由于源码中存在注释,在记录中只标记代码段功能,不再额外引用代码。有一说一,看代码确实是个令人头秃的活计。

detect.py:基本完成

https://blog.csdn.net/weixin_43334693/article/details/129349094

基本配置:

  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:存疑/未完成

https://blog.csdn.net/weixin_43334693/article/details/129460666

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

  2. 执行main()函数:
    检查分布式训练环境。
    判断是否断点续训。
    判断是否分布式训练。
    判断是否进化训练。

  3. 设置opt参数。

  4. 执行train()函数:
    加载参数和初始化配置信息。
    加载网络模型。
    加载数据集。
    训练过程。
    打印消息释放缓存。

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

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


总结:

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


学习笔记-YOLOV5目标检测初步了解记录的评论 (共 条)

分享到微博请遵守国家法律