Skip to content
Open

feat #430

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions configs/yolov12/hyp.scratch.l.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
optimizer:
optimizer: sgd
lr_init: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
momentum: 0.937 # SGD momentum/Adam beta1
nesterov: True # update gradients with NAG(Nesterov Accelerated Gradient) algorithm
loss_scale: 1.0 # loss scale for optimizer
warmup_epochs: 3 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
min_warmup_step: 1000 # minimum warmup step
group_param: yolov8 # group param strategy
gp_weight_decay: 0.0005 # group param weight decay 5e-4
start_factor: 1.0
end_factor: 0.01

loss:
name: YOLOv12Loss
box: 7.5 # box loss gain
cls: 0.5 # cls loss gain
dfl: 1.5 # dfl loss gain
reg_max: 16

data:
num_parallel_workers: 8

# multi-stage data augment
train_transforms: {
stage_epochs: [ 590, 10 ],
trans_list: [
[
{func_name: mosaic, prob: 1.0},
{func_name: copy_paste, prob: 0.5, sorted: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0},
{func_name: mixup, alpha: 32.0, beta: 32.0, prob: 0.15, pre_transform: [
{func_name: mosaic, prob: 1.0},
{func_name: copy_paste, prob: 0.5, sorted: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0}, ]
},
{func_name: albumentations},
{func_name: hsv_augment, prob: 1.0, hgain: 0.015, sgain: 0.7, vgain: 0.4},
{func_name: fliplr, prob: 0.5},
{func_name: label_norm, xyxy2xywh_: True},
{func_name: label_pad, padding_size: 160, padding_value: -1},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
],
[
{func_name: letterbox, scaleup: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0},
{func_name: albumentations},
{func_name: hsv_augment, prob: 1.0, hgain: 0.015, sgain: 0.7, vgain: 0.4},
{func_name: fliplr, prob: 0.5},
{func_name: label_norm, xyxy2xywh_: True},
{func_name: label_pad, padding_size: 160, padding_value: -1},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
]]
}

test_transforms: [
{func_name: letterbox, scaleup: False, only_image: True},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
]
67 changes: 67 additions & 0 deletions configs/yolov12/hyp.scratch.m.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
optimizer:
optimizer: sgd
lr_init: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
momentum: 0.937 # SGD momentum/Adam beta1
nesterov: True # update gradients with NAG(Nesterov Accelerated Gradient) algorithm
loss_scale: 1.0 # loss scale for optimizer
warmup_epochs: 3 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
min_warmup_step: 1000 # minimum warmup step
group_param: yolov8 # group param strategy
gp_weight_decay: 0.0005 # group param weight decay 5e-4
start_factor: 1.0
end_factor: 0.01

loss:
name: YOLOv12Loss
box: 7.5 # box loss gain
cls: 0.5 # cls loss gain
dfl: 1.5 # dfl loss gain
reg_max: 16

data:
num_parallel_workers: 8

# multi-stage data augment
train_transforms: {
stage_epochs: [ 590, 10 ],
trans_list: [
[
{func_name: mosaic, prob: 1.0},
{func_name: copy_paste, prob: 0.4, sorted: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0},
{func_name: mixup, alpha: 32.0, beta: 32.0, prob: 0.15, pre_transform: [
{func_name: mosaic, prob: 1.0},
{func_name: copy_paste, prob: 0.4, sorted: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0}, ]
},
{func_name: albumentations},
{func_name: hsv_augment, prob: 1.0, hgain: 0.015, sgain: 0.7, vgain: 0.4},
{func_name: fliplr, prob: 0.5},
{func_name: label_norm, xyxy2xywh_: True},
{func_name: label_pad, padding_size: 160, padding_value: -1},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
],
[
{func_name: letterbox, scaleup: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0},
{func_name: albumentations},
{func_name: hsv_augment, prob: 1.0, hgain: 0.015, sgain: 0.7, vgain: 0.4},
{func_name: fliplr, prob: 0.5},
{func_name: label_norm, xyxy2xywh_: True},
{func_name: label_pad, padding_size: 160, padding_value: -1},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
]]
}

test_transforms: [
{func_name: letterbox, scaleup: False, only_image: True},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
]
61 changes: 61 additions & 0 deletions configs/yolov12/hyp.scratch.n.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
optimizer:
optimizer: sgd
lr_init: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
momentum: 0.937 # SGD momentum/Adam beta1
nesterov: True # update gradients with NAG(Nesterov Accelerated Gradient) algorithm
loss_scale: 1.0 # loss scale for optimizer
warmup_epochs: 3 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
min_warmup_step: 1000 # minimum warmup step
group_param: yolov8 # group param strategy
gp_weight_decay: 0.0005 # group param weight decay 5e-4
start_factor: 1.0
end_factor: 0.01

loss:
name: YOLOv12Loss
box: 7.5 # box loss gain
cls: 0.5 # cls loss gain
dfl: 1.5 # dfl loss gain
reg_max: 16

data:
num_parallel_workers: 8

# multi-stage data augment
train_transforms: {
stage_epochs: [ 590, 10 ],
trans_list: [
[
{func_name: mosaic, prob: 1.0},
{func_name: copy_paste, prob: 0.1, sorted: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.5, shear: 0.0},
{func_name: albumentations},
{func_name: hsv_augment, prob: 1.0, hgain: 0.015, sgain: 0.7, vgain: 0.4},
{func_name: fliplr, prob: 0.5},
{func_name: label_norm, xyxy2xywh_: True},
{func_name: label_pad, padding_size: 160, padding_value: -1},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
],
[
{func_name: letterbox, scaleup: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.5, shear: 0.0},
{func_name: albumentations},
{func_name: hsv_augment, prob: 1.0, hgain: 0.015, sgain: 0.7, vgain: 0.4},
{func_name: fliplr, prob: 0.5},
{func_name: label_norm, xyxy2xywh_: True},
{func_name: label_pad, padding_size: 160, padding_value: -1},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
]]
}

test_transforms: [
{func_name: letterbox, scaleup: False, only_image: True},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
]
67 changes: 67 additions & 0 deletions configs/yolov12/hyp.scratch.s.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
optimizer:
optimizer: sgd
lr_init: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
momentum: 0.937 # SGD momentum/Adam beta1
nesterov: True # update gradients with NAG(Nesterov Accelerated Gradient) algorithm
loss_scale: 1.0 # loss scale for optimizer
warmup_epochs: 3 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
min_warmup_step: 1000 # minimum warmup step
group_param: yolov8 # group param strategy
gp_weight_decay: 0.0005 # group param weight decay 5e-4
start_factor: 1.0
end_factor: 0.01

loss:
name: YOLOv12Loss
box: 7.5 # box loss gain
cls: 0.5 # cls loss gain
dfl: 1.5 # dfl loss gain
reg_max: 16

data:
num_parallel_workers: 8

# multi-stage data augment
train_transforms: {
stage_epochs: [ 590, 10 ],
trans_list: [
[
{func_name: mosaic, prob: 1.0},
{func_name: copy_paste, prob: 0.15, sorted: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0},
{func_name: mixup, alpha: 32.0, beta: 32.0, prob: 0.05, pre_transform: [
{func_name: mosaic, prob: 1.0},
{func_name: copy_paste, prob: 0.15, sorted: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0}, ]
},
{func_name: albumentations},
{func_name: hsv_augment, prob: 1.0, hgain: 0.015, sgain: 0.7, vgain: 0.4},
{func_name: fliplr, prob: 0.5},
{func_name: label_norm, xyxy2xywh_: True},
{func_name: label_pad, padding_size: 160, padding_value: -1},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
],
[
{func_name: letterbox, scaleup: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0},
{func_name: albumentations},
{func_name: hsv_augment, prob: 1.0, hgain: 0.015, sgain: 0.7, vgain: 0.4},
{func_name: fliplr, prob: 0.5},
{func_name: label_norm, xyxy2xywh_: True},
{func_name: label_pad, padding_size: 160, padding_value: -1},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
]]
}

test_transforms: [
{func_name: letterbox, scaleup: False, only_image: True},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
]
67 changes: 67 additions & 0 deletions configs/yolov12/hyp.scratch.x.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
optimizer:
optimizer: sgd
lr_init: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
momentum: 0.937 # SGD momentum/Adam beta1
nesterov: True # update gradients with NAG(Nesterov Accelerated Gradient) algorithm
loss_scale: 1.0 # loss scale for optimizer
warmup_epochs: 3 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
min_warmup_step: 1000 # minimum warmup step
group_param: yolov8 # group param strategy
gp_weight_decay: 0.0005 # group param weight decay 5e-4
start_factor: 1.0
end_factor: 0.01

loss:
name: YOLOv12Loss
box: 7.5 # box loss gain
cls: 0.5 # cls loss gain
dfl: 1.5 # dfl loss gain
reg_max: 16

data:
num_parallel_workers: 8

# multi-stage data augment
train_transforms: {
stage_epochs: [ 590, 10 ],
trans_list: [
[
{func_name: mosaic, prob: 1.0},
{func_name: copy_paste, prob: 0.6, sorted: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0},
{func_name: mixup, alpha: 32.0, beta: 32.0, prob: 0.2, pre_transform: [
{func_name: mosaic, prob: 1.0},
{func_name: copy_paste, prob: 0.6, sorted: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0}, ]
},
{func_name: albumentations},
{func_name: hsv_augment, prob: 1.0, hgain: 0.015, sgain: 0.7, vgain: 0.4},
{func_name: fliplr, prob: 0.5},
{func_name: label_norm, xyxy2xywh_: True},
{func_name: label_pad, padding_size: 160, padding_value: -1},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
],
[
{func_name: letterbox, scaleup: True},
{func_name: resample_segments},
{func_name: random_perspective, prob: 1.0, degrees: 0.0, translate: 0.1, scale: 0.9, shear: 0.0},
{func_name: albumentations},
{func_name: hsv_augment, prob: 1.0, hgain: 0.015, sgain: 0.7, vgain: 0.4},
{func_name: fliplr, prob: 0.5},
{func_name: label_norm, xyxy2xywh_: True},
{func_name: label_pad, padding_size: 160, padding_value: -1},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
]]
}

test_transforms: [
{func_name: letterbox, scaleup: False, only_image: True},
{func_name: image_norm, scale: 255.},
{func_name: image_transpose, bgr2rgb: True, hwc2chw: True}
]
50 changes: 50 additions & 0 deletions configs/yolov12/yolov12-base.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
epochs: 600 # total train epochs
per_batch_size: 32 # 32 * 8 = 256
img_size: 640
conf_free: True
iou_thres: 0.7
ms_loss_scaler: dynamic
ms_loss_scaler_value: 65536.0
clip_grad: True
anchor_base: False
opencv_threads_num: 0 # opencv: disable threading optimizations

network:
model_name: yolov12
nc: 80 # number of classes
reg_max: 16

stride: [8, 16, 32]

# YOLOv12n backbone
backbone:
# [from, repeats, module, args]
- [-1, 1, ConvNormAct, [64, 3, 2]] # 0-P1/2
- [-1, 1, ConvNormAct, [128, 3, 2]] # 1-P2/4
- [-1, 2, C3k2, [256, False, 0.25]]
- [-1, 1, ConvNormAct, [256, 3, 2]] # 3-P3/8
- [-1, 2, C3k2, [512, False, 0.25]]
- [-1, 1, ConvNormAct, [512, 3, 2]] # 5-P4/16
- [-1, 4, A2C2f, [512, True, 4]]
- [-1, 1, ConvNormAct, [1024, 3, 2]] # 7-P5/32
- [-1, 4, A2C2f, [1024, True, 1]]

# YOLOv12n head
head:
- [-1, 1, Upsample, [None, 2, 'nearest']]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 2, A2C2f, [512, False, -1]] # 11

- [-1, 1, Upsample, [None, 2, 'nearest']]
- [[-1, 4], 1, Concat, [1] ] # cat backbone P3
- [-1, 2, A2C2f, [256, False, -1]] # 14

- [-1, 1, ConvNormAct, [256, 3, 2]]
- [[ -1, 11], 1, Concat, [1]] # cat head P4
- [-1, 2, A2C2f, [512, False, -1]] # 17

- [-1, 1, ConvNormAct, [512, 3, 2]]
- [[-1, 8], 1, Concat, [1]] # cat head P5
- [-1, 2, C3k2, [1024, True]] # 20 (P5/32-large)

- [[14, 17, 20], 1, YOLOv12Head, [nc, reg_max, stride]] # Detect(P3, P4, P5)
12 changes: 12 additions & 0 deletions configs/yolov12/yolov12l.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
__BASE__: [
'../coco.yaml',
'./hyp.scratch.l.yaml',
'./yolov12-base.yaml',
]

overflow_still_update: False
network:
scale: l
depth_multiple: 1.00 # model depth multiple
width_multiple: 1.00 # layer channel multiple
max_channels: 512
Loading