手把手带你调参Yolo v5 (v6.2)(一)
如果感觉有帮助的话请点赞支持下👍📖🌟
大家好,我是迪菲赫尔曼😁,我最近将本人硕士阶段所有学习的计算机视觉基础知识进行了一个系统性的整理,编写了《目标检测蓝皮书🍀》,共计10 1010篇内容,涵盖从基础知识到论文改进的整个时间线,包含第1 11篇机器学习基础、第2 22篇深度学习基础、第3 33篇卷积神经网络、第4 44篇经典热门网络结构、第5 55篇目标检测基础、第6 66篇网络搭建及训练、第7 77篇模型优化方法及思路、第8 88篇模型超参数调整策略、第9 99篇模型改进技巧、第10 1010篇模型部署基础等,详细的目录大家可以看我的这篇文章:《目标检测蓝皮书》目录,专栏地址:点击跳转,欢迎大家订阅~
1. 代码获取方式🍀
项目地址:https://github.com/ultralytics/yolov5
进入仓库点击 tags 可以查看项目目前提供的版本
我选择的代码是v6.1版本
2. 准备项目环境✨
在配置Conda环境后就可以进入项目了,可以通过作者提供的requirements.txt文件进行快速安装。
即在终端中键入如下指令:
pip install -r requirements.txt
requirements.txt文件里面有一些包被注释掉了,这些包是做一些额外的操作时候用的,不安装并不会影响训练和测试;但是有些工具是将.pt文件转换成.onnx时必须安装的;以后会介绍pt怎么转换成onnx,这些用的时候安装就可以。
3. YOLOv5命令行预测方式介绍💡
这里介绍一下官方给提供的预测方式,我们平时都是在Pycharm中点击“运行”按钮去预测模型,其实还可以通过命令行的方式去预测,预测后的结果会自动保存到runs/detect路径下;其实在这条指令后面还可以加上一些参数,具体怎么加后面会详细说明。
python detect.py --source 0 # webcam img.jpg # image vid.mp4 # video path/ # directory path/*.jpg # glob 'https://youtu.be/Zgi9g1ksQHc' # YouTube 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
这里说一下 path/*.jpg ,这个意思就是预测path文件夹下以.jpg结尾的文件
4. detect.py文件解读🚀
4.1 检测一下看看效果
我们可以直接运行detect.py文件试试效果,运行后系统会把检测结果保存在runs\detect\exp2路径下
检测效果就是这样子的
这两张是项目自带的图片,我们也可以把自己想测试的图片或者视频放到这个路径下:
4.2 参数详解
打开detect.py直接看217行
4.2.1 “weights”
这个就是指定网络权重的路径,默认是“yolov5s.pt”,官方提供了很多的版本,我们要更换的时候直接按照Model的名字更换就可以了(当然,使用自己的也是完全没问题的);例如“yolov5m.pt”“yolov5l.pt”,他会自动的下载对应的权重,不需要我们去Github手动下载.(如果下载太慢或者失败只能去官网下载了,下载好了直接放到根目录下就可以)
这里说一下“default”: default是默认的参数,即使我们在运行时不指定具体参数,那么系统也会执行默认的值。
4.2.2 “source”
这个参数就是指定网络输入的路径,默认指定的是文件夹,也可以指定具体的文件或者扩展名等
4.2.3 “data”
这个就是配置文件的一个路径,配置文件里面包含了下载路径和一些数据集基本信息,在训练时如果不自己指定数据集,系统会自己下载coco128数据集
数据集有三大功能: 训练、验证和测试
训练最好理解,是拟合模型的过程,模型会通过分析数据、调节内部参数从而得到最优的模型效果。
验证即验证模型效果,效果可以指导我们调整模型中的超参数(在开始训练之前设置参数,而不是通过训练得到参数),通常会使用少量未参与训练的数据对模型进行验证,在训练的间隙中进行。
测试的作用是检查模型是否具有泛化能力(泛化能力是指模型对训练集之外的数据集是否也有很好的拟合能力)。通常会在模型训练完毕之后,选用较多训练集以外的数据进行测试。
4.2.4 “imgsz, img, img-size”
这个意思就是模型在检测图片前会把图片resize成640的size,然后再喂进网络里,并不是说会把们最终得到的结果resize成640大小。
4.2.5 “conf-thres”
这个就是置信度的阈值,置信度这个概念我在我的博文“YOLOv1详细解读”里面详细介绍了一下,感兴趣的小伙伴可以看一下,通俗一点来说就是网络对检测目标相信的程度,如果这里设置“0”的话,那么网络只要认为这他预测的这个目标有一点点的概率是正确的目标,他都会给框出来,我们可以通过这几幅图对比一下。
我这里把conf-thres参数依次设置成“0”, “0.25”,“0.8”
原图: