model = dict(
type='YOLOv6s', #网络类型
pretrained='./weights/yolov6s.pt', #指定COCO预训练模型权重的路径
depth_multiple=0.33, #控制网络结构深度的缩放因子
width_multiple=0.50, #控制网络结构宽度的缩放因子
backbone=dict(
type='EfficientRep', #主干网络的类别,目前可支持'EfficientRep', 'CSPBepBackbone','EfficientRep6','CSPBepBackbone_P6' 4种
num_repeats=[1, 6, 12, 18, 6], #主干网络每个stage中基础模块的重复个数
out_channels=[64, 128, 256, 512, 1024], #主干网络每个stage中输出的通道数
fuse_P2=True, #是否融合骨干网络P2层特征
cspsppf=True, #是否使用CSPSPPF模块以替换SPPF模块
neck=dict(
type='RepPANNeck', #检测器 Neck 的类别,目前可选用'RepPANNeck', 'CSPRepPANNeck','RepBiFPANNeck','CSPRepBiFPANNeck','RepBiFPANNeck6','CSPRepBiFPANNeck_P6' 6种
num_repeats=[12, 12, 12, 12], # Neck网络连接每个特征层基础模块的重复个数
out_channels=[256, 128, 128, 256, 256, 512],# Neck网络连接每个特征层的上采样/下采样模块通道数
head=dict(
type='EffiDeHead', #检测头类型,目前暂时仅支持此类型
in_channels=[128, 256, 512], #检测头每个特征层的输入通道数
num_layers=3, #检测头的特征层数量, P6模型此值为4
begin_indices=24, #检测头的起始层数
anchors=1, #每个预测特征图单位网格对应的anchor数
out_indices=[17, 20, 23], #检测头的输出索引号
anchors=3, #fuse_ab模式下,每个特征点设置3个anchors
anchors_init=[[10,13, 19,19, 33,23],
[30,61, 59,59, 59,119],
[116,90, 185,185, 373,326]],#fuse_ab模式下,anchors初始值
strides=[8, 16, 32], #检测头每个特征层的下采样步长
atss_warmup_epoch=0, #标签分配策略使用ATSS热身轮数,fuse_ab模式下设为0
iou_type='giou', #iou损失的类型,目前可支持 'giou','diou','ciou','siou' 4种
use_dfl=False, #是否使用distributed focal loss,若后续想继续蒸馏,需要设为True以保留DFL分支
reg_max=0, #若 use_dfl 为 False, 则 reg_max 设为 0;若 use_dfl 为 True, 则reg_max 设为 16
distill_weight={
'class': 1.0, #蒸馏训练分类loss的初始权重
'dfl': 1.0, #蒸馏训练回归loss的初始权重
solver = dict(
optim='SGD', #优化器类型,目前支持'SGD','Adam' 2种
lr_scheduler='Cosine', #学习率衰减策略,目前支持'Cosine','Constant' 2种
lr0=0.0032, #初始学习率
lrf=0.12, #最终学习率
momentum=0.843, #动量
weight_decay=0.00036, #权重衰减
warmup_epochs=2.0, #warmup轮数
warmup_momentum=0.5, #warmup动量
warmup_bias_lr=0.05 #warmup时偏置的初始学习率
hsv_v=0.464, #hsv中v通道随机增强
degrees=0.373, # 最大旋转角度
translate=0.245, #最大平移比例(0.5+translate)
scale=0.898, #随机尺度缩放(1+scale)
shear=0.602, #最大错切角度
flipud=0.00856, #上下翻转概率
fliplr=0.5, #左右翻转概率
mosaic=1.0, # Mosaic 数据增强概率
mixup=0.243, # Mixup 数据增强概率
评估参数配置
除了在运行评估脚本时通过命令参数指定评估方式之外,我们还支持通过配置文件对相关参数进行配置。
其中,img_size
,pading and scale coord
和 metric
相关的字段可支持 string
类型或 list
类型。
如果是 string
类型(示例一),表示指定模型评估时的配置(包括训练时评估和训练完成后单独评估);如果是 list
类型(示例二),需要包含两个值,前者表示训练过程中模型评估的参数配置,后者表示训练完成后单独进行模型评估时的配置。
eval_params = dict(
img_size=640, #评估时图像尺寸大小
conf_thres=0.03, #评估时置信度阈值
iou_thres=0.65, #评估时IoU阈值
#pading and scale coord #灰边填充以及坐标转换相关处理,能提升模型精度指标
test_load_size=634, #评估时加载图片后对图片进行resize到此像素大小
letterbox_return_int=True, #letterbox填充时偏移量返回int值
force_no_pad=True, #矩形推理时不对图像进行额外填充(以32像素为步长进行灰边填充)
not_infer_on_rect=True, #评估时是否使用矩形推理还是方形推理,True表示方形推理(如640*640),False表示矩形推理(如640*384)可加速推理过程
scale_exact=True, #letterbox图片坐标转换原图时长宽缩放分开处理,坐标更精确
#metric
verbose=False, #是否需要输出每个类别的指标
do_coco_metric=True, #是否采用 Pycocotool 进行指标评估
do_pr_metric=True, #是否需要输出 Precision/ Recall/ F1等指标
plot_curve=False, #是否需要画 PR曲线,若为True,可以在评估保存目录`runs/val/xxx`下找到对应的曲线,需要在 do_pr_metric=True 前提下使用
plot_confusion_matrix=False #是否需要输出混淆矩阵,若为True,可以在评估保存目录`runs/val/xxx`下找到对应的混淆矩阵可视化结果,需要在 do_pr_metric=True 前提下使用
# list类型参数说明:前者表示训练过程中模型评估的参数配置,后者表示单独进行模型评估时的配置。
# 每个字段的参数含义及使用请参考示例一的说明。
eval_params = dict(
img_size=[None, 640], #前者 None表示采用默认值,默认为640.
conf_thres=0.03,
iou_thres=0.65,
#pading and scale coord
test_load_size=[None, 638], #前者 None 表示采用默认值,默认为640.
letterbox_return_int=[False, True],
force_no_pad=[False, True],
not_infer_on_rect=[False, True],
scale_exact=[False, True],
#metric
verbose=False,
do_coco_metric=[True, True],
do_pr_metric=[False, True],
plot_curve=[False, False],
plot_confusion_matrix=[False, False]