本文主要是介绍mmdetection中yolo配置文件的注释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 配置文件的地址在
.\configs\yolo\yolov3_d53_mstrain-608_273e_coco.py
- 有些没有注释的和我猜测的地方请朋友们不吝赐教
在MMDetection中,模型组件基本上分为4种类型。
骨干网:通常是FCN网络,用于提取特征图,例如ResNet。
颈部:骨干和头部之间的部分,例如FPN,ASPP。
头部:用于特定任务的部分,例如bbox预测和蒙版预测。
roi提取器:用于从要素地图中提取要素的部分,例如RoI Align。
_base_ = '../_base_/default_runtime.py' # 猜测可能是继承这个模型的配置
# model settings
model = dict(type='YOLOV3', # 模型的类型pretrained='open-mmlab://darknet53', # 预训练模型backbone=dict(type='Darknet', depth=53, out_indices=(3, 4, 5)), # type:backbone的类型,(特征提取骨干网络);depth:backbone的深度;out_indices:输出stage的序号neck=dict(type='YOLOV3Neck', # 颈部的类型,MMD的颈部就是特征融合层num_scales=3, # 需要scale的层数in_channels=[1024, 512, 256], # 输入各个scale的通道数out_channels=[512, 256, 128]), # 输出的通道数bbox_head=dict(type='YOLOV3Head', # 头部的类型,MMD中的头部就是用来预测BBOX的(网上说是全连接层)num_classes=80, # 需要预测的类的数量in_channels=[512, 256, 128], # 输入的通道数out_channels=[1024, 512, 256], # 输出的通道数anchor_generator=dict(type='YOLOAnchorGenerator', # 先验框的类型base_sizes=[[(116, 90), (156, 198), (373, 326)], # 先验框的尺寸[(30, 61), (62, 45), (59, 119)],[(10, 13), (16, 30), (33, 23)]],strides=[32, 16, 8]), # 网络输出层相对于输入的缩放步长(来自评论中“demon_soul”这位朋友)bbox_coder=dict(type='YOLOBBoxCoder'),featmap_strides=[32, 16, 8], # (跟上面含义类似,缩放步长)loss_cls=dict( # 这是YOLO里需要的四个不同LOSStype='CrossEntropyLoss', # Loss函数的类型use_sigmoid=True, # 是否需要SIGMOID函数loss_weight=1.0, # 猜测可能是LOSS的权重(因为有4个不同的LOSS)reduction='sum'), # 四种LOSS相加的意思吧???loss_conf=dict( # 30到40行同上type='CrossEntropyLoss',use_sigmoid=True,loss_weight=1.0,reduction='sum'),loss_xy=dict(type='CrossEntropyLoss',use_sigmoid=True,loss_weight=2.0,reduction='sum'),loss_wh=dict(type='MSELoss', loss_weight=2.0, reduction='sum')))
# training and testing settings
train_cfg = dict(assigner=dict(type='GridAssigner', pos_iou_thr=0.5, neg_iou_thr=0.5, min_pos_iou=0)) # type:正负样本划分类型;pos_iou_thr:正样本的iou阈值;neg_iou_thr:负样本的iou阈值;min_pos_iou:正样本的iou最小值(低于这个会被忽略)
test_cfg = dict(nms_pre=1000, # ???min_bbox_size=0, # BBOX最小尺寸score_thr=0.05,conf_thr=0.005,nms=dict(type='nms', iou_threshold=0.45),max_per_img=100)
# dataset settings
dataset_type = 'CocoDataset' # 数据集类型
data_root = 'data/coco/' # 数据集目录
img_norm_cfg = dict(mean=[0, 0, 0], std=[255., 255., 255.], to_rgb=True) # 输入图像初始化,减去均值mean并处以方差std,to_rgb表示将bgr转为rgb
train_pipeline = [dict(type='LoadImageFromFile', to_float32=True),dict(type='LoadAnnotations', with_bbox=True),dict(type='PhotoMetricDistortion'),dict(type='Expand',mean=img_norm_cfg['mean'],to_rgb=img_norm_cfg['to_rgb'],ratio_range=(1, 2)),dict(type='MinIoURandomCrop',min_ious=(0.4, 0.5, 0.6, 0.7, 0.8, 0.9),min_crop_size=0.3),dict(type='Resize', img_scale=[(320, 320), (608, 608)], keep_ratio=True), # 对图像resizedict(type='RandomFlip', flip_ratio=0.5), # flip_ratio是图像的随机左右翻转的概率dict(type='Normalize', **img_norm_cfg), # 归一化dict(type='Pad', size_divisor=32), # 猜测是填充灰条 dict(type='DefaultFormatBundle'),dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']) # 猜测是将数据集中的'img', 'gt_bboxes', 'gt_labels'三个信息写入新的文本文件
]
test_pipeline = [dict(type='LoadImageFromFile'),dict(type='MultiScaleFlipAug',img_scale=(608, 608), # 输入图像尺寸,最大边608,最小边608flip=False,transforms=[dict(type='Resize', keep_ratio=True),dict(type='RandomFlip'),dict(type='Normalize', **img_norm_cfg),dict(type='Pad', size_divisor=32),dict(type='ImageToTensor', keys=['img']),dict(type='Collect', keys=['img'])])
]
data = dict(samples_per_gpu=8, # 每个gpu计算的图像数量workers_per_gpu=4, # 每个gpu分配的线程数train=dict(type=dataset_type, # 划分训练集的类型ann_file=data_root + 'annotations/instances_train2017.json', # 训练集标签文件img_prefix=data_root + 'train2017/', # 训练集图片文件pipeline=train_pipeline),val=dict(type=dataset_type, # 验证集类型ann_file=data_root + 'annotations/instances_val2017.json', # 验证集标签文件img_prefix=data_root + 'val2017/', # 验证集图片文件pipeline=test_pipeline),test=dict(type=dataset_type, # 测试集类型ann_file=data_root + 'annotations/instances_val2017.json', # 测试集标签文件img_prefix=data_root + 'val2017/', # 测试集图片文件pipeline=test_pipeline))
# optimizer
optimizer = dict(type='SGD', lr=0.001, momentum=0.9, weight_decay=0.0005) # 优化参数,lr为学习率,momentum为动量因子,weight_decay为权重衰减因子
optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) # 梯度均衡参数
# learning policy
# learning policy
lr_config = dict(policy='step', # 优化器策略warmup='linear', # 学习率调整的策略,linear是线性调整warmup_iters=2000, # same as burn-in in darknet # 在初始的2000次迭代学习率增加warmup_ratio=0.1, # 初始学习率step=[218, 246]) # 在第218和246个epoch减低学习率
# runtime settings
total_epochs = 273 # 训练的总epoch数
evaluation = dict(interval=1, metric=['bbox']) #
这篇关于mmdetection中yolo配置文件的注释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!