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。

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

相关推荐
AI浩6 小时前
Mamba YOLO: 基于状态空间模型的目标检测简单基线
人工智能·yolo·目标检测
AI棒棒牛13 小时前
SCI精读:基于计算机视觉改进光伏热点和积尘检测:基于现场航拍图像的YOLO模型系统比较
yolo·目标检测·计算机视觉·目标跟踪·sci
王哈哈^_^19 小时前
【完整源码+数据集】车牌数据集,yolov8车牌检测数据集 7811 张,汽车车牌识别数据集,智慧交通汽车车牌识别系统实战教程
人工智能·深度学习·yolo·目标检测·计算机视觉·毕业设计·智慧城市
FL16238631291 天前
芸豆叶子病害检测数据集VOC+YOLO格式1762张3类别
yolo
王哈哈^_^1 天前
【完整源码+数据集】课堂行为数据集,yolo课堂行为检测数据集 2090 张,学生课堂行为识别数据集,目标检测课堂行为识别系统实战教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
Sunhen_Qiletian1 天前
YOLOv2算法详解(下篇):细节打磨与性能突破的终极密码
算法·yolo
Dev7z2 天前
YOLOv8改进实战:自研MSAM多尺度注意力机制,通道注意力全面升级,CBAM再进化!
yolo
Hcoco_me2 天前
YOLOv5(三):Jupyter
ide·yolo·jupyter
计算机毕业设计指导2 天前
YOLOv5+DeepSORT目标检测
人工智能·yolo·目标检测
沉默媛3 天前
如何下载安装以及使用labelme,一个可以打标签的工具,实现数据集处理,详细教程
图像处理·人工智能·python·yolo·计算机视觉