v5 超参数

文章详细介绍了Yolov5的detect.py和train.py文件中的参数设置,包括模型选择、图像大小、置信度阈值、非极大值抑制等关键参数,并讨论了混淆矩阵、精确率、召回率和F1-score等评估指标。此外,还提到了超参数配置文件(hyp.yaml)以及训练过程中的损失函数和结果文件的解读。
摘要由CSDN通过智能技术生成

yolo v5设置参数以及结果文件简单解析:

detcte.py文件

if name == ‘main’:
parser = argparse.ArgumentParser()
parser.add_argument(‘–weights’, nargs=‘+’, type=str, default=‘yolov5l.pt’, help=‘model.pt path(s)’)#运用的 是哪个模型,x,m,l,s等
parser.add_argument(‘–source’, type=str, default=‘data/images/1.jpg’, help=‘source’) #测试文件加载路径
parser.add_argument(‘–img-size’, type=int, default=640, help=‘inference size (pixels)’)#模型在训练的时候 缩放尺寸(但不会影响最开始的输入最后的输出)
parser.add_argument(‘–conf-thres’, type=float, default=0.25, help=‘object confidence threshold’)#当置信 度大于设定值时才认为他是一个物体否则不认为他是一个物体
parser.add_argument(‘–iou-thres’, type=float, default=0.45, help=‘IOU threshold for NMS’)#非极大值抑制 以及iou,当两个框的iou小于预设值时认为两个框的预测对象不一样,当两个框的iou大于预设值时保留最大 iou的框时保留最大值的框
parser.add_argument(‘–device’, default=‘’, help=‘cuda device, i.e. 0 or 0,1,2,3 or cpu’)#用GPU还是CPU,算 法自动检测
parser.add_argument(‘–view-img’, action=‘store_true’, help=‘display results’)#是否实时显示结果,(具体 操作在下面),当检测视频时开启会有实时监测的效果。
parser.add_argument(‘–save-txt’, action=‘store_true’, help=‘save results to *.txt’)#将最后结果(框的参数, 一个框五个参数)保存为txt文件格式(具体操作和上一个一样)
parser.add_argument(‘–save-conf’, action=‘store_true’, help=‘save confidences in --save-txt labels’)#保存 置信度
parser.add_argument(‘–nosave’, action=‘store_true’, help=‘do not save images/videos’)#是否保存图片后者 视频,默认保存
parser.add_argument(‘–classes’, nargs=‘+’, type=int, help=‘filter by class: --class 0, or --class 0 2 3’)#0,1, 2,3…分别代表一类物体,默认操作检测图片中所有物体,当指定class等于一个具体的数字时最终检测结 果会只显示这一个类的检测结果,为上述保存为txt文件的第一列表示类
parser.add_argument(‘–agnostic-nms’, action=‘store_true’, help=‘class-agnostic NMS’)#增强网络
parser.add_argument(‘–augment’, action=‘store_true’, help=‘augmented inference’)#增强网络
parser.add_argument(‘–project’, default=‘runs/detect’, help=‘save results to project/name’)#保存结果的位 置,run文件夹或者detect文件夹
parser.add_argument(‘–name’, default=‘exp’, help=‘save results to project/name’)#保存文件的名字,默认 为exp
parser.add_argument(‘–exist-ok’, action=‘store_true’, help=‘existing project/name ok, do not increment’) #运行一次程序结果是否保存到一个新建文件夹中去
opt = parser.parse_args()
print(opt)
check_requirements(exclude=(‘pycocotools’, ‘thop’))

​ 以上代码作者设置了默认参数,方便初学者把算法跑起来,如果遇到其他代码没有设置默认参数,可以参照这个代码设置默认参数。

​ 带default是带有默认参数的,最直接的修改参数的方法就是直接修改default后面字符串里面的内容,就可以改变参数。

​ 带action需要在配置文件里设置,也可以在终端输入,配置文件设置步骤如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

​ 设置完成后点击应用就可以了。

train.py文件

if name == ‘main’:
parser = argparse.ArgumentParser()
parser.add_argument(‘–weights’, type=str, default=‘yolov5s.pt’, help=‘initial weights path’)#网络预设模 型,如果没有设置程序就自动设置(填的是.pt文件),训练模型初始化,设置为yolov5s就是导入5s的模型参数 作为模型初始参数,设置为空就是随机初始参数
parser.add_argument(‘–cfg’, type=str, default=‘’, help=‘model.yaml path’)#模型配置和网络结构的yaml文件 路径,包括类别,模型宽度深度因子,anchors,backbone,head等。
parser.add_argument(‘–data’, type=str, default=‘data/coco128.yaml’, help=‘data.yaml path’)#数据集配置 文。yaml件的位置,yaml文件中包括类别以及训练数据集和测试数据集的路径
parser.add_argument(‘–hyp’, type=str, default=‘data/hyp.scratch.yaml’, help=‘hyperparameters path’) #超参数配置文件.yaml的位置,scratch是从头开始的位置,finetune在其他参数上优化
parser.add_argument(‘–epochs’, type=int, default=300)#训练多少轮,默认300轮
parser.add_argument(‘–batch-size’, type=int, default=16, help=‘total batch size for all GPUs’)#多少个图片 打包一个batch
parser.add_argument(‘–img-size’, nargs=‘+’, type=int, default=[640, 640], help=‘[train, test] image sizes’) #训练集和测试集的图片大小
parser.add_argument(‘–rect’, action=‘store_true’, help=‘rectangular training’)#是否采用rectangle图像处理 方式
parser.add_argument(‘–resume’, nargs=‘?’, const=True, default=False, help=‘resume most recen training’) #是否在一个训练过的基础上继续训练,(不能用类似Yolo5s.pt这样的单独训练好的文件,要有附带的其他文件) 默认为flase,如果为空,则从最近保存的path/last.pt恢复训练’)
parser.add_argument(‘–nosave’, action=‘store_true’, help=‘only save final checkpoint’)#只保存最后检查点 的模型参数,默认为flase
parser.add_argument(‘–notest’, action=‘store_true’, help=‘only test final epoch’)#只测试最后一个轮次默认 为flase,
parser.add_argument(‘–noautoanchor’, action=‘store_true’, help=‘disable autoanchor check’) #自动调整锚框大小,best possible recall<0.98时,才会重新计算anchor。不自动调整anchor,默认flase
parser.add_argument(‘–evolve’, action=‘store_true’, help=‘evolve hyperparameters’)#是否进行超参数进 化,默认flase
parser.add_argument(‘–bucket’, type=str, default=‘’, help=‘gsutil bucket’)#谷歌云盘,默认没有开启
parser.add_argument(‘–cache-images’, action=‘store_true’, help=‘cache images for faster training’)#是否 缓存以加快训练速度,默认flase
parser.add_argument(‘–image-weights’, action=‘store_true’, help=‘use weighted image selection for training’) #使用加权图像进行训练,当某个图片在上一轮的测试中效果不太好时,在下一轮的测试中应用相 应的权重处理
parser.add_argument(‘–device’, default=‘’, help=‘cuda device, i.e. 0 or 0,1,2,3 or cpu’)
parser.add_argument(‘–multi-scale’, action=‘store_true’, help=‘vary img-size +/- 50%%’)#是否不进行多尺度 计算,图像会加减50%,默认为flase,进行多维度训练
parser.add_argument(‘–single-cls’, action=‘store_true’, help=‘train multi-class data as single-class’)
parser.add_argument(‘–adam’, action=‘store_true’, help=‘use torch.optim.Adam() optimizer’)#是否使用 torch.optim.Adam() 优化器,默认是False’
parser.add_argument(‘–sync-bn’, action=‘store_true’, help=‘use SyncBatchNorm, only available in DDP mode’) #DDp和多GPU相关,单个GPU不用看
parser.add_argument(‘–local_rank’, type=int, default=-1, help=‘DDP parameter, do not modify’)
parser.add_argument(‘–workers’, type=int, default=0, help=‘maximum number of dataloader workers’) #指数据装载时cpu所使用的线程数,默认为8
parser.add_argument(‘–project’, default=‘runs/train’, help=‘save to project/name’)#保存文件路径
parser.add_argument(‘–entity’, default=None, help=‘W&B entity’)
parser.add_argument(‘–name’, default=‘exp’, help=‘save to project/name’)#保存文件名字
parser.add_argument(‘–exist-ok’, action=‘store_true’, help=‘existing project/name ok, do not increment’)
parser.add_argument(‘–quad’, action=‘store_true’, help=‘quad dataloader’)#当测试数据大于640时开启结 果可能会更好
parser.add_argument(‘–linear-lr’, action=‘store_true’, help=‘linear LR’)#是否以线性减小学习率,默认是余弦 退火
parser.add_argument(‘–label-smoothing’, type=float, default=0.0, help=‘Label smoothing epsilon’)#是否使 用标签平滑
parser.add_argument(‘–upload_dataset’, action=‘store_true’, help=‘Upload dataset as W&B artifact table’)
parser.add_argument(‘–bbox_interval’, type=int, default=-1, help=‘Set bounding-box image logging interval for W&B’)
parser.add_argument(‘–save_period’, type=int, default=-1, help=‘Log model after every “save_period” epoch’)#保存每一轮的工作日志
parser.add_argument(‘–artifact_alias’, type=str, default=“latest”, help=‘version of dataset artifact to be used’) #还没有实现
opt = parser.parse_args()

设置方式和detect.py的设置方式一样,注意名称时train。

Confusion Matrix(混淆矩阵)
混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。
其中矩阵的行表示真实值,矩阵的列表示预测值,下面我们先以二分类为例,看下矩阵表现形式,如下
TP(True Positive):将正类预测为正类数,真实为0,预测也为0
FN(False Negative):将正类预测为负类数,真实为0,预测为1
FP(False Positive):将负类预测为正类数, 真实为1,预测为0
TN(True Negative):将负类预测为负类数,真实为1,预测也为1

在这里插入图片描述

与二分类混淆矩阵一样,矩阵行数据相加是真实值类别数,列数据相加是分类后的类别数,那么相应的就有以下计算公式;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

精确率类别1=a/(a+d+g)
召回率类别1=a/(a+b+c)

F1-score:是精准率和召回率的调和平均值,它定义为:

在这里插入图片描述

hyp.yaml :与训练相关的超参数,与在训练开始设定的–hyp一样。

label.jpg:里面一共四张图,第一张,每个类别的数据量,第二张labels的bounding_box,第三章label中心点坐标,第四章label矩阵宽高

labels_correlogram

label的中心点x,y和矩阵宽高w,h
顶端对角线上:各自分布直方图
其余位置:相互之间分布情况

opt.yaml
保存了模型在训练过程中预设的所有参数,包括超参数,train.py中设定的参数,文件保存路径,数据集下载情况等等。

P_curve
准确度与置信度的关系

PR_curve
PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。PR曲线下围成的面积即AP,所有类别AP平均值即Map.
如果PR图的其中的一个曲线A完全包住另一个学习器的曲线B,则可断言A的性能优于B,当A和B发生交叉时,可以根据曲线下方的面积大小来进行比较。一般训练结果主要观察精度和召回率波动情况(波动不是很大则训练效果较好)
召回率和准确度一般称反比关系,召回率增大准确度通常会减小,准确率上升会影响召回率。

R_curve
召回率和置信度之间的关系

results.csv
每一次迭代对应的
train/box_loss, train/obj_loss, train/cls_loss 训练过程中每一轮的三种损失
metrics/precision,metrics/recall,metrics/mAP_0.5,metrics/mAP_0.5:0.95 精确度 召回率 map
val/box_loss, val/obj_loss,val/cls_loss,x/lr0, x/lr1, x/lr2

results.png
val Box_loss: 验证集bounding box损失;
val Objectness_loss:验证集目标检测loss均值;
val classification_loss:验证集分类loss均值;
mAP@.5:.95(mAP@[.5:.95]): 表示在不同IoU阈值从0.5到0.95,步长0.05(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP。mAP@0.5:表示标注框与预测框iou大于0.5时才算预测为正样本时的平均mAP。mAP是用Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值,@0.5:0.95表示阈值取0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95后计算出各自的map,在取均值。

anchors:

  • [10,13, 16,30, 33,23] # P3/8
  • [30,61, 62,45, 59,119] # P4/16
  • [116,90, 156,198, 373,326] # P5/32
    每一行代表在某一层的anchor一行的三组数字分别代表三个anchor的宽和高

参考知乎:https://zhuanlan.zhihu.com/p/111234566

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值