yjh0410 2 жил өмнө
parent
commit
c0f99a32fc

+ 6 - 4
config/__init__.py

@@ -28,7 +28,7 @@ def build_model_config(args):
     elif args.model == 'yolov5':
         cfg = yolov5_cfg
     # YOLOv7
-    elif args.model in ['yolov7_nano' 'yolov7_tiny', 'yolov7_large', 'yolov7_huge']:
+    elif args.model in ['yolov7_nano', 'yolov7_tiny', 'yolov7_large', 'yolov7_huge']:
         cfg = yolov7_cfg[args.model]
     # YOLOv8
     elif args.model == 'yolov8':
@@ -41,7 +41,7 @@ def build_model_config(args):
 
 
 # ------------------ Transform Config ----------------------
-from .transform_config import yolov5_trans_config, yolox_trans_config, ssd_trans_config
+from .transform_config import yolov5_strong_trans_config, yolov5_weak_trans_config, yolox_trans_config, ssd_trans_config
 
 def build_trans_config(trans_config='ssd'):
     print('==============================')
@@ -50,8 +50,10 @@ def build_trans_config(trans_config='ssd'):
     if trans_config == 'ssd':
         cfg = ssd_trans_config
     # YOLOv5-style transform 
-    elif trans_config == 'yolov5':
-        cfg = yolov5_trans_config
+    elif trans_config == 'yolov5_strong':
+        cfg = yolov5_strong_trans_config
+    elif trans_config == 'yolov5_weak':
+        cfg = yolov5_weak_trans_config
     # YOLOX-style transform 
     elif trans_config == 'yolox':
         cfg = yolox_trans_config

+ 20 - 1
config/transform_config.py

@@ -1,7 +1,7 @@
 # transform config
 
 
-yolov5_trans_config = {
+yolov5_strong_trans_config = {
     'aug_type': 'yolov5',
     # Basic Augment
     'degrees': 0.0,
@@ -20,6 +20,25 @@ yolov5_trans_config = {
     'mixup_scale': [0.5, 1.5]   # "mixup_scale" is not used for YOLOv5MixUp
 }
 
+yolov5_weak_trans_config = {
+    'aug_type': 'yolov5',
+    # Basic Augment
+    'degrees': 0.0,
+    'translate': 0.1,
+    'scale': 0.5,
+    'shear': 0.0,
+    'perspective': 0.0,
+    'hsv_h': 0.015,
+    'hsv_s': 0.7,
+    'hsv_v': 0.4,
+    # Mosaic & Mixup
+    'mosaic_prob': 1.0,
+    'mixup_prob': 0.05,
+    'mosaic_type': 'yolov5_mosaic',
+    'mixup_type': 'yolov5_mixup',
+    'mixup_scale': [0.5, 1.5]   # "mixup_scale" is not used for YOLOv5MixUp
+}
+
 yolox_trans_config = {
     'aug_type': 'yolov5',
     # Basic Augment

+ 1 - 1
config/yolov3_config.py

@@ -2,7 +2,7 @@
 
 yolov3_cfg = {
     # input
-    'trans_type': 'yolov5',
+    'trans_type': 'yolov5_strong',
     'multi_scale': [0.5, 1.0],
     # model
     'backbone': 'darknet53',

+ 1 - 1
config/yolov4_config.py

@@ -2,7 +2,7 @@
 
 yolov4_cfg = {
     # input
-    'trans_type': 'yolov5',
+    'trans_type': 'yolov5_strong',
     'multi_scale': [0.5, 1.0],
     # model
     'backbone': 'cspdarknet53',

+ 1 - 1
config/yolov5_config.py

@@ -2,7 +2,7 @@
 
 yolov5_cfg = {
     # input
-    'trans_type': 'yolov5',
+    'trans_type': 'yolov5_strong',
     'multi_scale': [0.5, 1.0],
     # model
     'backbone': 'cspdarknet',

+ 56 - 1
config/yolov7_config.py

@@ -1,9 +1,64 @@
 # YOLOv7 Config
 
 yolov7_cfg = {
+    'yolov7_tiny':{
+        # input
+        'trans_type': 'yolov5_weak',
+        'multi_scale': [0.5, 1.0],
+        # model
+        'backbone': 'elannet_tiny',
+        'pretrained': True,
+        'bk_act': 'silu',
+        'bk_norm': 'BN',
+        'bk_dpw': False,
+        'stride': [8, 16, 32],  # P3, P4, P5
+        # neck
+        'neck': 'csp_sppf',
+        'expand_ratio': 0.5,
+        'pooling_size': 5,
+        'neck_act': 'silu',
+        'neck_norm': 'BN',
+        'neck_depthwise': False,
+        # fpn
+        'fpn': 'yolov7_pafpn',
+        'fpn_act': 'silu',
+        'fpn_norm': 'BN',
+        'fpn_depthwise': False,
+        # head
+        'head': 'decoupled_head',
+        'head_act': 'silu',
+        'head_norm': 'BN',
+        'num_cls_head': 2,
+        'num_reg_head': 2,
+        'head_depthwise': False,
+        # matcher
+        'matcher': {'center_sampling_radius': 2.5,
+                    'topk_candicate': 10},
+        # loss weight
+        'loss_obj_weight': 1.0,
+        'loss_cls_weight': 1.0,
+        'loss_box_weight': 5.0,
+        # training configuration
+        'no_aug_epoch': 20,
+        # optimizer
+        'optimizer': 'sgd',        # optional: sgd, adam, adamw
+        'momentum': 0.937,         # SGD: 0.937;    AdamW: invalid
+        'weight_decay': 5e-4,      # SGD: 5e-4;     AdamW: 5e-2
+        'clip_grad': 10,           # SGD: 10.0;     AdamW: -1
+        # model EMA
+        'ema_decay': 0.9999,       # SGD: 0.9999;   AdamW: 0.9998
+        'ema_tau': 2000,
+        # lr schedule
+        'scheduler': 'linear',
+        'lr0': 0.01,               # SGD: 0.01;     AdamW: 0.004
+        'lrf': 0.01,               # SGD: 0.01;     AdamW: 0.05
+        'warmup_momentum': 0.8,
+        'warmup_bias_lr': 0.1,
+    },
+
     'yolov7_large':{
         # input
-        'trans_type': 'yolov5',
+        'trans_type': 'yolov5_strong',
         'multi_scale': [0.5, 1.0],
         # model
         'backbone': 'elannet_large',

+ 1 - 1
config/yolov8_config.py

@@ -2,7 +2,7 @@
 
 yolov8_cfg = {
     # input
-    'trans_type': 'yolov5',
+    'trans_type': 'yolov5_strong',
     'multi_scale': [0.5, 1.0],
     # model
     'backbone': 'elan_cspnet',

+ 1 - 1
models/__init__.py

@@ -39,7 +39,7 @@ def build_model(args,
         model, criterion = build_yolov5(
             args, model_cfg, device, num_classes, trainable)
     # YOLOv7
-    elif args.model in ['yolov7_nano' 'yolov7_tiny', 'yolov7_large', 'yolov7_huge']:
+    elif args.model in ['yolov7_nano', 'yolov7_tiny', 'yolov7_large', 'yolov7_huge']:
         model, criterion = build_yolov7(
             args, model_cfg, device, num_classes, trainable)
     # YOLOv8

+ 1 - 1
train.sh

@@ -1,7 +1,7 @@
 # Train YOLO on VOC
 python train.py \
         --cuda \
-        -d coco \
+        -d voc \
         --root /mnt/share/ssd2/dataset/ \
         -m yolov7_large \
         -bs 16 \