Link to this section机器学习最佳实践与模型训练技巧#
Link to this section简介#
在进行计算机视觉项目时,模型训练是最重要的步骤之一。在进入这一步之前,你需要先定义目标并收集和标注数据。在预处理数据以确保其干净且一致后,你就可以继续进行模型训练了。
Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision
那么,什么是模型训练呢?模型训练是一个教导模型识别视觉模式并根据数据做出预测的过程。它直接影响应用程序的性能和准确性。在本指南中,我们将介绍最佳实践、优化技术和故障排除技巧,帮助你有效地训练计算机视觉模型。
Link to this section如何训练机器学习模型#
计算机视觉模型的训练过程是通过调整其内部参数来最小化误差。最初,模型会被输入大量标注过的图像集。它会对这些图像的内容做出预测,并将预测结果与实际标签或内容进行比较,从而计算出误差。这些误差反映了模型的预测值与真实值之间的差距。
在训练过程中,模型会不断重复进行预测、计算误差,并通过反向传播过程更新参数。在此过程中,模型会调整其内部参数(权重和偏置)以减小误差。通过多次重复此循环,模型的准确性会逐渐提高。随着时间的推移,它学会了识别复杂的模式,如形状、颜色和纹理。
这种学习过程使计算机视觉模型能够执行各种任务,包括目标检测、实例分割、语义分割和图像分类。最终目标是创建一个能够将其所学推广到新的、未见过的图像中的模型,以便在现实应用中准确理解视觉数据。
现在我们了解了训练模型时的幕后过程,接下来让我们探讨一下训练模型时需要考虑的要点。
Link to this section在大数据集上进行训练#
当你计划使用大型数据集训练模型时,有几个不同的方面需要考虑。例如,你可以调整批次大小(batch size)、控制 GPU 利用率、选择使用多尺度训练等。让我们详细讲解每一个选项。
Link to this section批次大小与 GPU 利用率#
在大型数据集上训练模型时,高效利用 GPU 是关键。批次大小是一个重要因素。它指的是机器学习模型在单次训练迭代中处理的数据样本数量。使用 GPU 支持的最大批次大小,可以充分发挥其性能并缩短模型训练时间。不过,你需要避免耗尽 GPU 内存。如果遇到内存错误,请逐步减小批次大小,直到模型能够顺利训练。
Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉
With respect to YOLO26, you can set the batch parameter in the training configuration to match your GPU capacity. Also, setting batch=-1 in your training script will automatically determine the batch size that can be efficiently processed based on your device's capabilities. By fine-tuning the batch size, you can make the most of your GPU resources and improve the overall training process.
Link to this section子集训练#
子集训练是一种明智的策略,即在代表整个大型数据集的较小数据子集上进行模型训练。这可以节省时间和资源,特别是在初步模型开发和测试阶段。如果你时间紧迫或正在尝试不同的模型配置,子集训练是一个不错的选择。
在 YOLO26 中,你可以通过使用 fraction 参数轻松实现子集训练。此参数允许你指定用于训练的数据集比例。例如,设置 fraction=0.1 将使用 10% 的数据来训练模型。你可以在正式使用完整数据集训练模型之前,利用此技术进行快速迭代和模型调优。子集训练有助于你快速取得进展并及早发现潜在问题。
Link to this section多尺度训练#
多尺度训练是一种通过在不同大小的图像上进行训练来提高模型泛化能力的技术。你的模型可以学会检测不同尺度和距离下的物体,从而变得更加稳健。
例如,当你训练 YOLO26 时,可以通过设置 scale 参数来启用多尺度训练。此参数会按指定系数调整训练图像的大小,模拟不同距离下的物体。例如,设置 scale=0.5 会在训练过程中随机将训练图像缩放 0.5 到 1.5 之间。配置此参数可以让你的模型接触到各种图像尺度,并提高其在不同物体大小和场景下的检测能力。
Ultralytics 还支持通过 multi_scale 参数进行图像尺寸多尺度训练。与 scale(它先缩放图像然后填充/裁剪回 imgsz)不同,multi_scale 会在每个批次中改变 imgsz 本身(舍入到模型步长)。例如,当 imgsz=640 且 multi_scale=0.25 时,训练尺寸将以步长增量在 480 到 800 之间采样(例如:480, 512, 544, ..., 800),而 multi_scale=0.0 则保持固定尺寸。
Link to this section缓存#
缓存是提高机器学习模型训练效率的一项重要技术。通过将预处理后的图像存储在内存中,缓存减少了 GPU 等待从磁盘加载数据的时间。模型可以持续接收数据,而不会因磁盘 I/O 操作而产生延迟。
在使用 YOLO26 进行训练时,可以通过 cache 参数控制缓存:
cache=True:将数据集图像存储在 RAM 中,提供最快的访问速度,但会增加内存占用。cache='disk':将图像存储在磁盘上,速度比 RAM 慢,但比每次都重新加载新鲜数据要快。cache=False:禁用缓存,完全依赖磁盘 I/O,这是最慢的选项。
Link to this section混合精度训练#
混合精度训练同时使用 16 位 (FP16) 和 32 位 (FP32) 浮点类型。通过使用 FP16 加快计算速度,并在需要时使用 FP32 保持精度,从而发挥两者的优势。神经网络的大多数操作都以 FP16 执行,以利用更快的计算速度和更低的内存占用。然而,模型权重的副本会保留在 FP32 中,以确保权重更新步骤中的准确性。你可以在相同的硬件限制下处理更大的模型或更大的批次。
要实现混合精度训练,你需要修改训练脚本并确保你的硬件(如 GPU)支持它。许多现代深度学习框架(如 PyTorch 和 TensorFlow)都内置了对混合精度的支持。
在使用 YOLO26 时,混合精度训练非常简单。你可以在训练配置中使用 amp 标志。设置 amp=True 将启用自动混合精度 (AMP) 训练。混合精度训练是优化模型训练过程的一种简单而有效的方法。
Link to this section预训练权重#
使用预训练权重是加快模型训练过程的明智之举。预训练权重来自已经在大型数据集上训练过的模型,能让你的模型获得“先发优势”。迁移学习将预训练模型适配到新的相关任务中。对预训练模型进行微调,就是从这些权重开始,然后在你的特定数据集上继续训练。这种训练方法可以缩短训练时间,且往往能获得更好的性能,因为模型从基础特征的扎实理解开始。
在 YOLO26 中,pretrained 参数让迁移学习变得简单。设置 pretrained=True 将使用默认的预训练权重,或者你可以指定一个指向自定义预训练模型的路径。有效利用预训练权重和迁移学习可以极大提升你的模型能力并降低训练成本。
Link to this section处理大数据集时需要考虑的其他技术#
在处理大数据集时,还有其他几种技术值得考虑:
- 学习率调度器:实现学习率调度器可以在训练过程中动态调整学习率。优化良好的学习率可以防止模型越过最小值点并提高稳定性。训练 YOLO26 时,
lrf参数通过将最终学习率设置为初始学习率的一定比例来帮助管理学习率调度。 - 分布式训练:对于处理大型数据集,分布式训练可能是一个转折点。你可以通过将训练工作负载分配到多个 GPU 或机器上来缩短训练时间。这种方法对于拥有大量计算资源的企业级项目特别有价值。
Link to this section训练的 Epoch 数量#
训练模型时,epoch 指的是对整个训练数据集进行一次完整遍历。在一个 epoch 期间,模型会处理训练集中的每个样本一次,并根据学习算法更新其参数。通常需要多个 epoch 才能让模型随着时间的推移学习并完善其参数。
一个常见的问题是如何确定模型训练的 epoch 数量。一个好的起点是 300 个 epoch。如果模型过早过拟合,你可以减少 epoch 数量。如果在 300 个 epoch 后没有发生过拟合,你可以将训练延长至 600、1200 或更多 epoch。
然而,理想的 epoch 数量取决于你的数据集大小和项目目标。较大的数据集可能需要更多的 epoch 才能让模型有效学习,而较小的数据集可能需要较少的 epoch 以避免过拟合。对于 YOLO26,你可以在训练脚本中设置 epochs 参数。
Link to this section早停(Early Stopping)#
早停是优化模型训练的一项有价值的技术。通过监控验证性能,你可以在模型停止改进时中止训练。这样可以节省计算资源并防止过拟合。
该过程涉及设置一个 patience 参数,用于决定在停止训练前等待验证指标改善的 epoch 次数。如果模型性能在这些 epoch 内没有提升,训练就会停止,以免浪费时间和资源。
对于 YOLO26,你可以通过在训练配置中设置 patience 参数来启用早停。例如,patience=5 意味着如果验证指标在 5 个连续 epoch 内没有改进,训练将停止。使用这种方法可以确保训练过程保持高效,并在不进行过度计算的情况下达到最佳性能。
Link to this section选择云端训练还是本地训练#
训练模型有两种选择:云端训练和本地训练。
云端训练提供了可扩展性和强大的硬件,非常适合处理大数据集和复杂模型。像 Google Cloud、AWS 和 Azure 这样的平台提供按需使用的高性能 GPU 和 TPU,可以加快训练时间并支持更大模型的实验。然而,云端训练可能很昂贵,尤其是长期使用时,而且数据传输会增加成本和延迟。
本地训练提供了更好的控制力和定制化能力,让你能够根据特定需求调整环境,并避免持续的云端费用。对于长期项目来说,它可能更经济,而且由于数据保留在本地,安全性更高。然而,本地硬件可能存在资源限制且需要维护,这可能导致大型模型的训练时间更长。
Link to this section选择优化器#
优化器是一种通过最小化损失函数来调整神经网络权重的算法,损失函数用于衡量模型的表现如何。简单来说,优化器通过微调参数以减小误差来帮助模型学习。选择合适的优化器直接影响模型学习的速度和准确性。
你还可以微调优化器参数以提高模型性能。调整学习率决定了更新参数时步长的大小。为了保持稳定,你可能从适中的学习率开始,并随时间推移逐渐降低它,以改善长期学习效果。此外,设置动量(momentum)可以决定过去更新对当前更新的影响程度。动量的常见取值约为 0.9,这通常能提供良好的平衡。
Link to this section常用优化器#
不同的优化器各有优缺点。让我们一瞥几种常见的优化器。
-
SGD(随机梯度下降):
- 利用损失函数相对于参数的梯度来更新模型参数。
- 简单且高效,但收敛速度可能较慢,且可能会陷入局部最小值。
-
Adam(自适应矩估计):
- 结合了带有动量的 SGD 和 RMSProp 的优点。
- 根据梯度的第一矩和第二矩的估计值,为每个参数调整学习率。
- 非常适合处理噪声数据和稀疏梯度。
- 高效且通常需要的调优较少,是推荐用于 YOLO26 的优化器。
-
RMSProp(均方根传播):
- 通过将梯度除以最近梯度幅值的移动平均值,为每个参数调整学习率。
- 有助于解决梯度消失问题,对循环神经网络非常有效。
-
MuSGD(Muon + SGD 混合):
- 将 SGD 式更新与受 Muon 启发的方法相结合,提高了在大规模训练中的稳定性。
- 当你想获得类 SGD 的泛化能力,但需要比标准 SGD 更平滑的收敛时,这是一个不错的选择。
- 这对 YOLO26 训练配方尤为相关;如果不确定,请从
optimizer=auto开始,并与 MuSGD 在你的数据集上进行比较。
对于 YOLO26,optimizer 参数让你能够从多种优化器中进行选择,包括 SGD、MuSGD、Adam、AdamW、NAdam、RAdam 和 RMSProp,或者你可以将其设置为 auto,以便根据模型配置进行自动选择。
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDLink to this section与社区建立联系#
成为计算机视觉爱好者社区的一员可以帮助你解决问题并更快地学习。以下是一些建立联系、获取帮助和分享想法的方法。
Link to this section社区资源#
- GitHub Issues:访问 YOLO26 GitHub 仓库,使用 Issues 选项卡来提出问题、报告 Bug 并建议新功能。社区和维护者非常活跃,随时准备提供帮助。
- Ultralytics Discord 服务器:加入 Ultralytics Discord 服务器与其他用户和开发者交流、获取支持并分享你的经验。
Link to this section官方文档#
- Ultralytics YOLO26 文档:查看 官方 YOLO26 文档,了解关于各种计算机视觉项目的详细指南和实用技巧。
利用这些资源将帮助你克服挑战,并紧跟计算机视觉社区的最新趋势和实践。
Link to this section关键要点#
训练计算机视觉模型需要遵循良好的实践、优化策略并解决出现的各种问题。调整批次大小、混合精度训练以及从预训练权重开始等技术,可以使你的模型工作得更好、训练得更快。子集训练和早停等方法有助于你节省时间和资源。与社区保持联系并跟进新趋势,将帮助你不断提升模型训练技能。
Link to this section常见问题解答#
Link to this section使用 Ultralytics YOLO 训练大数据集时,如何提高 GPU 利用率?#
为了提高 GPU 利用率,请在训练配置中将 batch 参数设置为 GPU 支持的最大尺寸。这能确保你充分发挥 GPU 的性能,从而缩短训练时间。如果遇到内存错误,请逐步减小批次大小,直到训练能够顺利运行。对于 YOLO26,在训练脚本中设置 batch=-1 将自动为你确定高效处理的最佳批次大小。有关更多信息,请参考训练配置。
Link to this section什么是混合精度训练,如何在 YOLO26 中启用它?#
混合精度训练同时使用 16 位 (FP16) 和 32 位 (FP32) 浮点类型,以平衡计算速度和精度。这种方法可以在不牺牲模型准确性的情况下加速训练并减少内存占用。要在 YOLO26 中启用混合精度训练,请在训练配置中将 amp 参数设置为 True。这将激活自动混合精度 (AMP) 训练。有关此优化技术的更多详细信息,请参阅训练配置。
Link to this section多尺度训练如何增强 YOLO26 模型性能?#
多尺度训练通过在不同大小的图像上进行训练来增强模型性能,使模型能够更好地泛化不同尺度和距离下的情况。在 YOLO26 中,你可以通过在训练配置中设置 scale 参数来启用多尺度训练。例如,scale=0.5 会采样一个 0.5 到 1.5 之间的缩放因子,然后补齐/裁剪回 imgsz。此技术模拟了不同距离下的物体,使得模型在各种场景下更加稳健。有关设置和更多详情,请查看训练配置。
Link to this section如何使用预训练权重来加快 YOLO26 的训练?#
使用预训练权重可以通过利用已经熟悉基础视觉特征的模型,显著加速训练并增强模型准确性。在 YOLO26 中,只需在训练配置中将 pretrained 参数设置为 True,或提供指向你自定义预训练权重的路径即可。这种方法被称为迁移学习,允许在大型数据集上训练的模型有效地适配到你的特定应用程序中。了解更多关于如何使用预训练权重及其益处的信息,请查看训练配置指南。
Link to this section训练模型建议的 epoch 数量是多少,如何在 YOLO26 中进行设置?#
Epoch 数量是指模型训练期间对整个训练数据集完成的完整遍历次数。一个典型的起点是 300 个 epoch。如果你的模型过早过拟合,你可以减少数量。或者,如果没有观察到过拟合,你可能将训练延长到 600、1200 或更多个 epoch。要在 YOLO26 中进行设置,请在你的训练脚本中使用 epochs 参数。如需关于确定理想 epoch 数量的进一步建议,请参考此部分:epoch 数量。