学习资源:
手把手教你搭建自己的yolov5目标检测平台_哔哩哔哩_bilibili
yolo v5 解读,训练,复现_哔哩哔哩_bilibili
Yolo原理
Yolo首先会将图片分成n*n个网格,每个网格负责干两件事,预测目标框与目标类别。预测目标框时,每个网格会预测3个目标框,通过置信值筛去。如果目标中心没在预测目标框内,直接为0,如果在的话在计算iou最后得到置信值,可借鉴公式
Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruth
IoU,为预测框与真实框(打标签弄地)相交面积和相并面积的比值,最后获取真实目标框
Yolo跑自己的数据集
制作数据集:
1、使用labelimg打标签,注意该软件是否有标签缓存,有的话要删去。
2、将制作的数据集存放进yolo第一层目录下分为imgs,labels,里面又要写入test,train
3、在data目录下写yaml文件,内容为一些数据参数(类型要与打的标签相匹配)
4、在model目录下写yaml文件,内容为模型的参数
训练数据集
- 配置参数:train.py文件中Weight使用官方自带的
Cfg使用自己制作的模型参数文件yaml
Data使用自己制作的数据参数文件yaml
- 开始训练,如果虚拟内存不够,则需要yolov5-5.0/utils/datasets.py第81行nw=0
- 训练完成后会出现best.py与last.py。可以通过tensorboard看结果
- 然后可以将训练好的pt文件在test里面测试
opt模型主要参数解析:
--weights:初始化的权重文件的路径地址
--cfg:模型yaml文件的路径地址
--data:数据yaml文件的路径地址
--hyp:超参数文件路径地址
--epochs:训练轮次
--batch-size:喂入批次文件的多少
--img-size:输入图片尺寸
--rect:是否采用矩形训练,默认False
--resume:接着打断训练上次的结果接着训练
--nosave:不保存模型,默认False
--notest:不进行test,默认False
--noautoanchor:不自动调整anchor,默认False
--evolve:是否进行超参数进化,默认False
--bucket:谷歌云盘bucket,一般不会用到
--cache-images:是否提前缓存图片到内存,以加快训练速度,默认False
--image-weights:使用加权图像选择进行训练
--device:训练的设备,cpu;0(表示一个gpu设备cuda:0);0,1,2,3(多个gpu设备)
--multi-scale:是否进行多尺度训练,默认False
--single-cls:数据集是否只有一个类别,默认False
--adam:是否使用adam优化器
--sync-bn:是否使用跨卡同步BN,在DDP模式使用
--local_rank:DDP参数,请勿修改
--workers:最大工作核心数
--project:训练模型的保存位置
--name:模型保存的目录名称
--exist-ok:模型目录是否存在,不存在就创建
── data:主要是存放一些超参数的配置文件(这些文件(yaml文件)是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称);还有一些官方提供测试的图片。如果是训练自己的数据集的话,那么就需要修改其中的yaml文件。但是自己的数据集不建议放在这个路径下面,而是建议把数据集放到yolov5项目的同级目录下面。
── models:里面主要是一些网络构建的配置文件和函数,其中包含了该项目的四个不同的版本,分别为是s、m、l、x。从名字就可以看出,这几个版本的大小。他们的检测测度分别都是从快到慢,但是精确度分别是从低到高。这就是所谓的鱼和熊掌不可兼得。如果训练自己的数据集的话,就需要修改这里面相对应的yaml文件来训练自己模型。
── utils:存放的是工具类的函数,里面有loss函数,metrics函数,plots函数等等。
── weights:放置训练好的权重参数。
── detect.py:利用训练好的权重参数进行目标检测,可以进行图像、视频和摄像头的检测。
── train.py:训练自己的数据集的函数。
── test.py:测试训练的结果的函数。