YOLOV8替换Lion优化器

YOLOV8替换Lion优化器

1 优化器介绍博客

参考bilibili讲解视频

论文地址:https://arxiv.org/abs/2302.06675

代码地址:https://github.com/google/automl/blob/master/lion/lion_pytorch.py

python 复制代码
"""PyTorch implementation of the Lion optimizer."""
import torch
from torch.optim.optimizer import Optimizer
 
 
class Lion(Optimizer):
  r"""Implements Lion algorithm."""
 
  def __init__(self, params, lr=1e-4, betas=(0.9, 0.99), weight_decay=0.0):
    """Initialize the hyperparameters.
    Args:
      params (iterable): iterable of parameters to optimize or dicts defining
        parameter groups
      lr (float, optional): learning rate (default: 1e-4)
      betas (Tuple[float, float], optional): coefficients used for computing
        running averages of gradient and its square (default: (0.9, 0.99))
      weight_decay (float, optional): weight decay coefficient (default: 0)
    """
 
    if not 0.0 <= lr:
      raise ValueError('Invalid learning rate: {}'.format(lr))
    if not 0.0 <= betas[0] < 1.0:
      raise ValueError('Invalid beta parameter at index 0: {}'.format(betas[0]))
    if not 0.0 <= betas[1] < 1.0:
      raise ValueError('Invalid beta parameter at index 1: {}'.format(betas[1]))
    defaults = dict(lr=lr, betas=betas, weight_decay=weight_decay)
    super().__init__(params, defaults)
 
  @torch.no_grad()
  def step(self, closure=None):
    """Performs a single optimization step.
    Args:
      closure (callable, optional): A closure that reevaluates the model
        and returns the loss.
    Returns:
      the loss.
    """
    loss = None
    if closure is not None:
      with torch.enable_grad():
        loss = closure()
 
    for group in self.param_groups:
      for p in group['params']:
        if p.grad is None:
          continue
 
        # Perform stepweight decay
        p.data.mul_(1 - group['lr'] * group['weight_decay'])
 
        grad = p.grad
        state = self.state[p]
        # State initialization
        if len(state) == 0:
          # Exponential moving average of gradient values
          state['exp_avg'] = torch.zeros_like(p)
 
        exp_avg = state['exp_avg']
        beta1, beta2 = group['betas']
 
        # Weight update
        update = exp_avg * beta1 + grad * (1 - beta1)
        p.add_(torch.sign(update), alpha=-group['lr'])
        # Decay the momentum running average coefficient
        exp_avg.mul_(beta2).add_(grad, alpha=1 - beta2)
 
    return loss

2 在相应的文件夹内新建lion_pytorch.py文件

3 在trianer.py中添加Lion优化器

python 复制代码
from ultralytics.engine.lion_pytorch import Lion    #Lion optimizer

然后在末尾build_optimizer函数中添加判断是否使用Lion优化器:

python 复制代码
def build_optimizer(self, model, name="auto", lr=0.001, momentum=0.9, decay=1e-5, iterations=1e5):
·······


    elif name == "Lion":
        optimizer = Lion(g[2], lr=lr, betas=(momentum, 0.99), weight_decay=0.0)
·······

4 设置Lion优化器并训练查看

方法1:defalut.yaml中修改默认设置:

方法2:训练文件中自定义设置:
Lion优化器默认的学习率改为为1e-4,不然就是yolov8中默认的0.01。

运行训练文件后可以看到如下提示则修改成功:

相关推荐
Coding茶水间5 小时前
基于深度学习的木薯病害检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
图像处理·人工智能·深度学习·yolo·目标检测·计算机视觉
极智视界8 小时前
目标检测数据集 - 穿着服饰检测数据集下载
yolo·目标检测·数据集·voc·coco·算法训练·穿着服饰检测数据集
音沐mu.9 小时前
【34】犬类品种数据集(有v5/v8模型)/YOLO犬类品种检测
人工智能·yolo·目标检测·犬类品种数据集·犬类品种检测
辛勤的程序猿10 小时前
改进的mamba核心块—Hybrid SS2D Block(适用于视觉)
人工智能·深度学习·yolo
一勺汤12 小时前
YOLO 双 Backbone 双模态融合:以 LLVIP 数据集为例的红外 - 可见光目标检测实践
yolo·双backbone·yolo 双backbone·双模态·yolo双模态·llvip
零小陈上(shouhou6668889)17 小时前
水稻病害检测(YOLO数据集,多分类,稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫)
yolo·分类·数据挖掘
youcans_17 小时前
【跟我学YOLO】Mamba-YOLO-World:YOLO-World与Mamba 融合的开放词汇目标检测
论文阅读·人工智能·yolo·计算机视觉·mamba
牙牙要健康18 小时前
【YOLOv8-Ultralytics】 【目标检测】【v8.3.235版本】 模型专用验证器代码val.py解析
人工智能·yolo·目标检测
F_D_Z1 天前
简明 | Yolo-v3结构理解摘要
深度学习·神经网络·yolo·计算机视觉·resnet