一.hyp超参数:
文件位置:
data/hyps/hyp.scratch-low.yaml
具体如下:
lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
lrf: 0.01 # final OneCycleLR learning rate (lr0 * lrf)
momentum: 0.937 # SGD momentum/Adam beta1
weight_decay: 0.0005 # optimizer weight decay 5e-4
warmup_epochs: 3.0 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
box: 0.05 # box loss gain
cls: 0.5 # cls loss gain
cls_pw: 1.0 # cls BCELoss positive_weight
obj: 1.0 # obj loss gain (scale with pixels)
obj_pw: 1.0 # obj BCELoss positive_weight
iou_t: 0.20 # IoU training threshold
anchor_t: 4.0 # anchor-multiple threshold
# anchors: 3 # anchors per output layer (0 to ignore)
fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
############################################################
hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
hsv_s: 0.16 # image HSV-Saturation augmentation (fraction)
#饱和度(Saturation)增强的幅度,表示在增强过程中饱和度可以变化的范围,这里设置为0到0.7,
#意味着饱和度可以有相当大的变化。较高的饱和度值会使图像的颜色更加鲜艳。
hsv_v: 0.16 # image HSV-Value augmentation (fraction)
#############################################################
degrees: 0.0 # image rotation (+/- deg)
translate: 0.1 # image translation (+/- fraction)
scale: 0.5 # image scale (+/- gain)
shear: 0.0 # image shear (+/- deg)
perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
flipud: 0.0 # image flip up-down (probability)
fliplr: 0.5 # image flip left-right (probability)
mosaic: 1.0 # image mosaic (probability)
mixup: 0.0 # image mixup (probability)
copy_paste: 0.0 # segment copy-paste (probability)
以下是一些关键超参数的解释:
lr0
: 初始学习率,用于SGD优化器。lrf
: 最终OneCycleLR学习率,乘以初始学习率lr0
。momentum
: SGD动量/Adam beta1参数。weight_decay
: 优化器权重衰减。warmup_epochs
: 预热周期数,用于逐渐增加学习率和动量。warmup_momentum
和 warmup_bias_lr
: 分别定义了预热期间的初始动量和偏置学习率。box
, cls
, obj
: 分别是边界框、类别和目标损失的增益。iou_t
: IoU训练阈值,用于确定预测框和真实框的匹配程度。anchor_t
: 锚点多重阈值。fl_gamma
: 焦点损失的gamma参数。数据增强部分的参数包括:
hsv_h
, hsv_s
, hsv_v
: 分别是HSV颜色空间中色调、饱和度和亮度的增强系数。 (hsv_h
, hsv_s
, hsv_v分别代表的是增强系数,而不是概率
)
HSV代表色调(Hue)、饱和度(Saturation)和亮度(Value)
degrees
: 图像旋转的范围。translate
: 图像平移的范围。scale
: 图像尺度的变化范围。shear
: 图像剪切的范围。perspective
: 图像透视变换的范围。flipud
和 fliplr
: 分别是图像上下翻转和左右翻转的概率。mosaic
: 马赛克数据增强的概率。mixup
: 图像混合的概率。copy_paste
: 复制粘贴数据增强的概率。如果你想要取消HSV增强,你可以将
hsv_h
, hsv_s
, hsv_v
的值设置为0。
例如:
hsv_h: 0.0 # 取消色调增强
hsv_s: 0.0 # 取消饱和度增强
hsv_v: 0.0 # 取消亮度增强
这样,在训练过程中,图像的HSV变换将不会发生。
二.dataloader调用augment_hsv:
使用范例(dataloader中):
dataloader的文件位置:utils/dataloaders.py
augment_hsv(img, hgain=hyp['hsv_h'], sgain=hyp['hsv_s'], vgain=hyp['hsv_v'])
具体如下,包含注释:
def augment_hsv(img, hgain=0.5, sgain=0.5, vgain=0.5):
# HSV color-space augmentation
if hgain or sgain or vgain:
# random gains[a,b,c];a b c都在0.5到1.5
r = np.random.uniform(-1, 1, 3) * [hgain, sgain, vgain] + 1
# 分离hsv通道
hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
dtype = img.dtype # uint8
x = np.arange(0, 256, dtype=r.dtype)
lut_hue = ((x * r[0]) % 180).astype(dtype)
lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
lut_val = np.clip(x * r[2], 0, 255).astype(dtype)
# 用于创建一个查找表(Look-Up Table,简称 LUT),这个表可以用于快速地将一组输入值转换为另一组值。
# 这在图像处理中非常有用,比如在调整图像的亮度或对比度时,可以将像素值映射到新的值。
im_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val)))
cv2.cvtColor(im_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed
(上面函数在utils/augmentations.py中)
解释说明(其实是我本人不会,现学的 :<):
1.np.random.uniform(-1, 1, 3):
-1
是随机数的下限。1
是随机数的上限。3
表示生成随机数的数量,这里是生成3个随机数2.x = np.arange(0, 256, dtype=r.dtype)
是0-255的列表,255个元素。
3.lut_hue,lut_sat,lut_val:
lut:look up table(查找表)
lut_hue:有%180,则范围0-180,个数255的列表;