yjh0410 hace 2 años
padre
commit
8319894dce

+ 8 - 8
README.md

@@ -154,14 +154,14 @@ python train.py --cuda -d coco --root path/to/COCO -m yolov1 -bs 16 --max_epoch
 - We use `YOLOv5-style Mosaic augmentation` and `YOLOX-style Mixup augmentation` wihout rotation.
 - Due to my limited computing resources, I can not train `YOLOvx-X` with the setting of `batch size=128`.
 
-#### LODet: An Empirical Study of Designing Lightweight Object Detector
-
-| Model | Scale | AP<sup>val<br>0.5:0.95 | AP<sup>val<br>0.5 | FLOPs<br><sup>(G) | Params<br><sup>(M) | Weight |
-|-------|-------|------------------------|-------------------|-------------------|--------------------|--------|
-| LODet |  320  |                        |                   |      1.05         |        1.20        |  |
-| LODet |  416  |                        |                   |      1.78         |        1.20        |  |
-| LODet |  512  |                        |                   |      2.70         |        1.20        |  |
-| LODet |  640  |                        |                   |      4.21         |        1.20        |  |
+#### LOWDet: An Empirical Study of Designing Lightweight Object Detector
+
+| Model  | Scale | AP<sup>val<br>0.5:0.95 | AP<sup>val<br>0.5 | FLOPs<br><sup>(G) | Params<br><sup>(M) | Weight |
+|--------|-------|------------------------|-------------------|-------------------|--------------------|--------|
+| LOWDet |  320  |                        |                   |      1.05         |        1.20        |  |
+| LOWDet |  416  |                        |                   |      1.78         |        1.20        |  |
+| LOWDet |  512  |                        |                   |      2.70         |        1.20        |  |
+| LOWDet |  640  |                        |                   |      4.21         |        1.20        |  |
 
 #### Redesigned RT-DETR:
 

+ 4 - 4
config/__init__.py

@@ -107,7 +107,7 @@ from .model_config.yolov7_config import yolov7_cfg
 from .model_config.yolovx_config import yolovx_cfg
 from .model_config.yolox_config import yolox_cfg
 ## LODet
-from .model_config.lodet_config import lodet_cfg
+from .model_config.lowdet_config import lowdet_cfg
 ## Real-Time DETR
 from .model_config.rtdetr_config import rtdetr_cfg
 
@@ -139,9 +139,9 @@ def build_model_config(args):
     # YOLOvx
     elif args.model in ['yolovx_n', 'yolovx_t', 'yolovx_s', 'yolovx_m', 'yolovx_l', 'yolovx_x']:
         cfg = yolovx_cfg[args.model]
-    # LODet
-    elif args.model == 'lodet':
-        cfg = lodet_cfg
+    # LOWDet
+    elif args.model == 'lowdet':
+        cfg = lowdet_cfg
     # RT-DETR
     elif args.model in ['rtdetr_n', 'rtdetr_s', 'rtdetr_m', 'rtdetr_l', 'rtdetr_x']:
         cfg = rtdetr_cfg[args.model]

+ 3 - 3
config/model_config/lodet_config.py → config/model_config/lowdet_config.py

@@ -1,7 +1,7 @@
-# Light-weight Object Detector Config
+# Low-computation Object Detector Config
 
 
-lodet_cfg = {
+lowdet_cfg = {
     # ---------------- Model config ----------------
     ## Backbone
     'backbone': 'smnet',
@@ -19,7 +19,7 @@ lodet_cfg = {
     'neck_norm': 'BN',
     'neck_depthwise': True,
     ## Neck: PaFPN
-    'fpn': 'lodet_pafpn',
+    'fpn': 'lowdet_pafpn',
     'fpn_core_block': 'smblock',
     'fpn_reduce_layer': 'conv',
     'fpn_downsample_layer': 'conv',

+ 8 - 4
models/detectors/__init__.py

@@ -2,6 +2,7 @@
 # -*- coding:utf-8 -*-
 
 import torch
+# YOLO series
 from .yolov1.build import build_yolov1
 from .yolov2.build import build_yolov2
 from .yolov3.build import build_yolov3
@@ -9,8 +10,11 @@ from .yolov4.build import build_yolov4
 from .yolov5.build import build_yolov5
 from .yolov7.build import build_yolov7
 from .yolovx.build import build_yolovx
+# My custom YOLO
 from .yolox.build import build_yolox
-from .lodet.build import build_lodet
+# Lightweight Detector
+from .lowdet.build import build_lowdet
+# Real-time DETR
 from .rtdetr.build import build_rtdetr
 
 
@@ -53,9 +57,9 @@ def build_model(args,
     elif args.model in ['yolox_n', 'yolox_s', 'yolox_m', 'yolox_l', 'yolox_x']:
         model, criterion = build_yolox(
             args, model_cfg, device, num_classes, trainable, deploy)
-    # LODet
-    elif args.model == 'lodet':
-        model, criterion = build_lodet(
+    # LOWDet
+    elif args.model == 'lowdet':
+        model, criterion = build_lowdet(
             args, model_cfg, device, num_classes, trainable, deploy)
     # RT-DETR
     elif args.model in ['rtdetr_n', 'rtdetr_s', 'rtdetr_m', 'rtdetr_l', 'rtdetr_x']:

+ 5 - 5
models/detectors/lodet/build.py → models/detectors/lowdet/build.py

@@ -5,16 +5,16 @@ import torch
 import torch.nn as nn
 
 from .loss import build_criterion
-from .lodet import LODet
+from .lowdet import LOWDet
 
 
 # build object detector
-def build_lodet(args, cfg, device, num_classes=80, trainable=False, deploy=False):
+def build_lowdet(args, cfg, device, num_classes=80, trainable=False, deploy=False):
     print('==============================')
     print('Build {} ...'.format(args.model.upper()))
         
-    # -------------- Build LODet --------------
-    model = LODet(
+    # -------------- Build LOWDet --------------
+    model = LOWDet(
         cfg=cfg,
         device=device, 
         num_classes=num_classes,
@@ -25,7 +25,7 @@ def build_lodet(args, cfg, device, num_classes=80, trainable=False, deploy=False
         deploy=deploy
         )
 
-    # -------------- Initialize LODet --------------
+    # -------------- Initialize LOWDet --------------
     for m in model.modules():
         if isinstance(m, nn.BatchNorm2d):
             m.eps = 1e-3

+ 0 - 0
models/detectors/lodet/loss.py → models/detectors/lowdet/loss.py


+ 7 - 7
models/detectors/lodet/lodet.py → models/detectors/lowdet/lowdet.py

@@ -3,18 +3,18 @@ import torch
 import torch.nn as nn
 
 # --------------- Model components ---------------
-from .lodet_backbone import build_backbone
-from .lodet_neck import build_neck
-from .lodet_pafpn import build_fpn
-from .lodet_head import build_det_head
-from .lodet_pred import build_pred_layer
+from .lowdet_backbone import build_backbone
+from .lowdet_neck import build_neck
+from .lowdet_pafpn import build_fpn
+from .lowdet_head import build_det_head
+from .lowdet_pred import build_pred_layer
 
 # --------------- External components ---------------
 from utils.misc import multiclass_nms
 
 
 # Lightweight Object Detector
-class LODet(nn.Module):
+class LOWDet(nn.Module):
     def __init__(self, 
                  cfg,
                  device, 
@@ -24,7 +24,7 @@ class LODet(nn.Module):
                  trainable = False, 
                  topk = 1000,
                  deploy = False):
-        super(LODet, self).__init__()
+        super(LOWDet, self).__init__()
         # ---------------------- Basic Parameters ----------------------
         self.cfg = cfg
         self.device = device

+ 2 - 2
models/detectors/lodet/lodet_backbone.py → models/detectors/lowdet/lowdet_backbone.py

@@ -1,9 +1,9 @@
 import torch
 import torch.nn as nn
 try:
-    from .lodet_basic import Conv, SMBlock, DSBlock
+    from .lowdet_basic import Conv, SMBlock, DSBlock
 except:
-    from lodet_basic import Conv, SMBlock, DSBlock
+    from lowdet_basic import Conv, SMBlock, DSBlock
 
 
 

+ 0 - 0
models/detectors/lodet/lodet_basic.py → models/detectors/lowdet/lowdet_basic.py


+ 1 - 1
models/detectors/lodet/lodet_head.py → models/detectors/lowdet/lowdet_head.py

@@ -1,7 +1,7 @@
 import torch
 import torch.nn as nn
 
-from .lodet_basic import Conv
+from .lowdet_basic import Conv
 
 
 # Single-level Head

+ 1 - 1
models/detectors/lodet/lodet_neck.py → models/detectors/lowdet/lowdet_neck.py

@@ -1,7 +1,7 @@
 import torch
 import torch.nn as nn
 
-from .lodet_basic import Conv
+from .lowdet_basic import Conv
 
 
 # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher

+ 5 - 5
models/detectors/lodet/lodet_pafpn.py → models/detectors/lowdet/lowdet_pafpn.py

@@ -2,13 +2,13 @@ import torch
 import torch.nn as nn
 import torch.nn.functional as F
 
-from .lodet_basic import (Conv, build_reduce_layer, build_downsample_layer, build_fpn_block)
+from .lowdet_basic import (Conv, build_reduce_layer, build_downsample_layer, build_fpn_block)
 
 
 # YOLO-Style PaFPN
-class LodetPaFPN(nn.Module):
+class LowdetPaFPN(nn.Module):
     def __init__(self, cfg, in_dims=[64, 128, 256], out_dim=None):
-        super(LodetPaFPN, self).__init__()
+        super(LowdetPaFPN, self).__init__()
         # --------------------------- Basic Parameters ---------------------------
         self.fpn_dims = in_dims
         
@@ -83,7 +83,7 @@ class LodetPaFPN(nn.Module):
 def build_fpn(cfg, in_dims, out_dim=None):
     model = cfg['fpn']
     # build pafpn
-    if model == 'lodet_pafpn':
-        fpn_net = LodetPaFPN(cfg, in_dims, out_dim)
+    if model == 'lowdet_pafpn':
+        fpn_net = LowdetPaFPN(cfg, in_dims, out_dim)
 
     return fpn_net

+ 0 - 0
models/detectors/lodet/lodet_pred.py → models/detectors/lowdet/lowdet_pred.py


+ 0 - 0
models/detectors/lodet/matcher.py → models/detectors/lowdet/matcher.py