浏览代码

use cosine lr decay for RT-DETR-R50

yjh0410 1 年之前
父节点
当前提交
203a97785e
共有 3 个文件被更改,包括 5 次插入4 次删除
  1. 3 2
      engine.py
  2. 1 1
      models/detectors/yolov5/yolov5.py
  3. 1 1
      utils/solver/optimizer.py

+ 3 - 2
engine.py

@@ -1147,7 +1147,7 @@ class RTDetrTrainer(object):
 
 
         # ---------------------------- Hyperparameters refer to RTMDet ----------------------------
         # ---------------------------- Hyperparameters refer to RTMDet ----------------------------
         self.optimizer_dict = {'optimizer': 'adamw', 'momentum': None, 'weight_decay': 0.0001, 'lr0': 0.0001, 'backbone_lr_ratio': 0.1}
         self.optimizer_dict = {'optimizer': 'adamw', 'momentum': None, 'weight_decay': 0.0001, 'lr0': 0.0001, 'backbone_lr_ratio': 0.1}
-        self.lr_schedule_dict = {'scheduler': 'cosine', 'lrf': 1.0, 'warmup_iters': 2000} # no lr decay (because lrf is set 1.0)
+        self.lr_schedule_dict = {'scheduler': 'cosine', 'lrf': 0.1, 'warmup_iters': 2000} # no lr decay (because lrf is set 1.0)
         self.ema_dict = {'ema_decay': 0.9999, 'ema_tau': 2000}
         self.ema_dict = {'ema_decay': 0.9999, 'ema_tau': 2000}
 
 
         # ---------------------------- Build Dataset & Model & Trans. Config ----------------------------
         # ---------------------------- Build Dataset & Model & Trans. Config ----------------------------
@@ -1297,6 +1297,7 @@ class RTDetrTrainer(object):
                 xi = [0, nw]  # x interp
                 xi = [0, nw]  # x interp
                 for x in self.optimizer.param_groups:
                 for x in self.optimizer.param_groups:
                     x['lr'] = np.interp(ni, xi, [0.0, x['initial_lr'] * self.lf(self.epoch)])
                     x['lr'] = np.interp(ni, xi, [0.0, x['initial_lr'] * self.lf(self.epoch)])
+                exit()
                                 
                                 
             # To device
             # To device
             images = images.to(self.device, non_blocking=True).float()
             images = images.to(self.device, non_blocking=True).float()
@@ -1354,7 +1355,7 @@ class RTDetrTrainer(object):
 
 
             # Update log
             # Update log
             metric_logger.update(loss=losses.item(), **loss_dict_reduced)
             metric_logger.update(loss=losses.item(), **loss_dict_reduced)
-            metric_logger.update(lr=self.optimizer.param_groups[2]["lr"])
+            metric_logger.update(lr=self.optimizer.param_groups[0]["lr"])
             metric_logger.update(grad_norm=grad_norm)
             metric_logger.update(grad_norm=grad_norm)
             metric_logger.update(size=img_size)
             metric_logger.update(size=img_size)
 
 

+ 1 - 1
models/detectors/yolov5/yolov5.py

@@ -45,7 +45,7 @@ class YOLOv5(nn.Module):
         
         
         # ------------------- Network Structure -------------------
         # ------------------- Network Structure -------------------
         ## Backbone
         ## Backbone
-        self.backbone, feats_dim = build_backbone(cfg, pretrained=cfg['bk_pretrained']&trainable)
+        self.backbone, feats_dim = build_backbone(cfg)
         
         
         ## FPN
         ## FPN
         self.fpn = build_fpn(cfg=cfg, in_dims=feats_dim, out_dim=round(256*cfg['width']))
         self.fpn = build_fpn(cfg=cfg, in_dims=feats_dim, out_dim=round(256*cfg['width']))

+ 1 - 1
utils/solver/optimizer.py

@@ -90,6 +90,6 @@ def build_rtdetr_optimizer(cfg, model, resume=None):
         # checkpoint state dict
         # checkpoint state dict
         checkpoint_state_dict = checkpoint.pop("optimizer")
         checkpoint_state_dict = checkpoint.pop("optimizer")
         optimizer.load_state_dict(checkpoint_state_dict)
         optimizer.load_state_dict(checkpoint_state_dict)
-        start_epoch = checkpoint.pop("epoch")
+        start_epoch = checkpoint.pop("epoch") + 1
                                                         
                                                         
     return optimizer, start_epoch
     return optimizer, start_epoch