在 YOLOv 系列模型的实际训练中,有很多参数可以根据需求调整,这些参数直接影响模型的训练效率、精度和泛化能力。下面用通俗易懂的方式介绍最常用的可修改参数,包括它们的作用、影响以及调整方法:

一、基础训练控制参数

1. 批次大小(batch size)
  • 是什么:每次送入模型训练的图片数量(比如一次送 16 张图)。
  • 影响
    • 太大:需要更多 GPU 显存,可能导致 “显存不足” 报错;但训练更稳定(噪声小)。
    • 太小:显存压力小,但训练波动大(每次更新参数受单张图影响大),可能不收敛。
  • 怎么改
    • 看 GPU 显存:显存大(如 24G 以上)可以调大(16→32);显存小(如 8G)调小(8→4)。
    • 原则:在不爆显存的前提下,尽量选能稳定训练的最大值。
2. 训练轮数(epochs)
  • 是什么:整个数据集被模型 “学” 几遍(比如 300 epochs 就是把所有数据重复学 300 次)。
  • 影响
    • 太少:模型没 “学透”,欠拟合(训练集和测试集精度都低)。
    • 太多:模型 “死记硬背” 了训练数据,过拟合(训练集精度高,测试集精度低)。
  • 怎么改
    • 先从常用值(如 300、500)开始,观察 “验证集精度”:当精度不再提升时,及时停止(早停策略)。
    • 数据量少(如几千张图):epochs 可以小些(200-300);数据量大(几万张):可以大些(500-1000)。
3. 学习率(learning rate)
  • 是什么:模型 “更新参数” 的 “步长”(类似人走路的步子大小)。
  • 影响
    • 太大:步子太大,模型参数 “震荡”,不收敛(精度忽高忽低)。
    • 太小:步子太小,训练慢,迟迟达不到最优精度。
  • 怎么改
    • 初始值:YOLOv 常用 0.001(0.0001-0.01 之间试)。
    • 训练中调整:用 “学习率衰减”(比如每 100 epochs 缩小 10 倍),后期步子小一点,精细调整。
    • 看损失曲线:如果损失波动大,调小;如果损失下降慢,适当调大。

二、数据与输入相关参数

1. 输入图像尺寸(image size)
  • 是什么:输入模型的图片大小(比如 640x640,YOLOv 默认值)。
  • 影响
    • 太大(如 800x800):细节更多,小目标检测更准,但计算变慢(训练和推理都慢),显存需求增加。
    • 太小(如 416x416):速度快,但可能丢失细节(大目标边缘模糊,小目标直接 “看不清”)。
  • 怎么改
    • 检测小目标(如蚂蚁、远处的人脸):调大(640→800)。
    • 追求实时性(如视频监控):调小(640→416)。
    • 注意:尺寸需是 32 的倍数(YOLOv 网络结构要求,比如 416、640、832)。
2. 数据增强参数(如翻转、缩放、裁剪等)
  • 是什么:训练时对图片做随机处理(比如左右翻转、放大缩小、加噪声),让模型见更多 “变种” 数据。
  • 影响
    • 增强太弱:模型容易 “认死理”(只认识训练集中的图片样式),过拟合。
    • 增强太强:图片被改得 “不像样”(比如过度裁剪导致目标消失),模型学不到有效特征。
  • 怎么改
    • 数据多样性少(如只有白天的图):增加增强(加亮度 / 对比度调整、模拟阴天)。
    • 目标方向固定(如都是正面的车):加随机旋转(±15 度)。
    • 小目标多:少用 “缩小裁剪”(避免小目标被裁掉)。
3. 类别数量(num_classes)
  • 是什么:模型需要检测的目标类别数(比如检测 “人、车、狗” 就是 3 类)。
  • 影响:必须和数据集的类别数一致!否则训练会报错,或检测结果混乱(把 “车” 识别成 “人”)。
  • 怎么改:直接在配置文件(如 yolov5 的.yaml 文件)中修改,比如nc: 3(表示 3 类)。

三、目标检测核心参数

1. 锚框(anchors)
  • 是什么:YOLOv 预设的 “目标框模板”(比如几个不同大小的矩形框),模型基于这些模板预测目标位置。
  • 影响:预设锚框和你的数据中目标大小不匹配时,检测精度会下降(比如用大锚框检测小蚂蚁,很难对准)。
  • 怎么改
    • 用工具对自己的数据集 “聚类”(统计所有目标的宽高,算出最匹配的锚框尺寸)。
    • 替换配置文件中的anchors参数(比如原来的大锚框换成小的,适合小目标)。
2. 置信度阈值(confidence threshold)
  • 是什么:过滤 “不靠谱” 的预测框(比如模型认为 “这是车” 的概率低于 0.5,就删掉这个框)。
  • 影响
    • 太高(如 0.8):会漏掉很多 “不太确定” 的目标(漏检)。
    • 太低(如 0.2):会多出很多错误框(误检,比如把石头当成车)。
  • 怎么改
    • 训练时:影响损失计算(过滤低置信度框的损失),一般设 0.5。
    • 推理时(实际使用时):根据需求调,比如安防场景怕漏检就调低(0.3),精确计数场景就调高(0.7)。
3. IoU 阈值(Intersection over Union)
  • 是什么:判断两个框 “重叠程度” 的指标(值 0-1,越大重叠越多),用于 “非极大值抑制(NMS)”(去掉重复框)。
  • 影响
    • 太高(如 0.8):允许更多重叠框存在(比如密集人群中,可能保留多个框)。
    • 太低(如 0.4):会误删有用的框(比如两个挨得近的车,可能只留一个)。
  • 怎么改
    • 目标密集(如人群、鱼群):调高点(0.6-0.7)。
    • 目标稀疏(如空旷马路上的车):调低些(0.5)。

四、正则化参数(防过拟合)

1. 权重衰减(weight decay)
  • 是什么:给模型参数 “加惩罚”,不让参数值太大(避免模型 “死记硬背” 训练数据)。
  • 影响
    • 太大:惩罚太重,模型 “不敢学”,欠拟合(精度低)。
    • 太小:惩罚太轻,容易过拟合(训练好测试差)。
  • 怎么改:常用 0.0005,过拟合时调大(0.001),欠拟合时调小(0.0001)。
2. dropout(随机失活)
  • 是什么:训练时随机 “关掉” 一部分网络节点,强迫模型用不同节点组合学习(避免依赖某几个节点)。
  • 影响
    • 开启(如 dropout=0.2):增强泛化能力,防过拟合,但训练变慢。
    • 关闭:训练快,但可能过拟合。
  • 怎么改:数据少、容易过拟合时开启(0.1-0.3);数据多、训练稳定时可以关闭。

总结:根据问题调参数

  • 精度低、欠拟合:增加 epochs、调大学习率、调大输入尺寸、减弱权重衰减、减少 dropout。
  • 过拟合(训练好测试差):增加数据增强、调大权重衰减、开启 dropout、减少 epochs。
  • 速度慢:调小输入尺寸、调小 batch size、减少 epochs。
  • 小目标检测差:调大输入尺寸、重新聚类小锚框、减弱 “缩小裁剪” 的数据增强。

实际训练中,建议一次只改 1-2 个参数,观察效果,逐步优化~

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐