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。

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

相关推荐
nice-wyh5 小时前
yolov7-3d算法原理
yolo
Tianwen_Burning7 小时前
yolov5训练自己数据集的全流程+踩过的坑
pytorch·yolo
卧式纯绿12 小时前
每天一篇《目标检测》文献(一)
人工智能·yolo·目标检测·计算机视觉·cnn
那年一路北1 天前
YOLOv8 自定义目标检测
人工智能·深度学习·yolo·机器学习
陈辛chenxin2 天前
【论文带读(3)】《Real-Time Flying Object Detection with YOLOv8》带读笔记翻译
人工智能·笔记·yolo·目标检测·计算机视觉
paradoxjun3 天前
RK3588部署YOLOv8(2):OpenCV和RGA实现模型前处理对比
人工智能·opencv·算法·yolo·目标检测·计算机视觉
量子-Alex3 天前
【目标检测】【NeuralPS 2023】Gold-YOLO:通过收集与分发机制实现的高效目标检测器
yolo·目标检测·目标跟踪
zy_destiny4 天前
【YOLOv12改进trick】三重注意力TripletAttention引入YOLOv12中,实现遮挡目标检测涨点,含创新点Python代码,方便发论文
网络·人工智能·python·深度学习·yolo·计算机视觉·三重注意力
国家级退堂鼓4 天前
YOLOv8改进SPFF-LSKA大核可分离核注意力机制
人工智能·python·深度学习·yolo·目标检测·yolov8
MF_AI4 天前
颈椎X光数据集(cervical spine X-ray dataset)
图像处理·人工智能·深度学习·yolo·计算机视觉·spine