faster_rcnn_r50_fpn_1x_coco.py文件位於目錄mmdetection/configs/faster_rcnn/下面,主要內容如下:
_base_ = [ '../_base_/models/faster_rcnn_r50_fpn.py', '../_base_/datasets/coco_detection.py', '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' ]
其中第1個配置文件說明了使用哪一個模型,第2個配置文件說明了訓練的數據集,第3個配置文件說明了訓練的參數,如學習率,epoch數量等等,第4個配置文件說明了Runtime.
第1個配置文件,faster_rcnn_r50_fpn.py,它的代碼和解析如下:
model = dict( # 網絡類型 type='FasterRCNN', # 預訓練模型 pretrained='torchvision://resnet50', # Backbone backbone=dict( # Backbone為ResNet type='ResNet', # 深度為50 depth=50, # FPN有4個階段 num_stages=4, # 輸出的FPN Stage的編號 out_indices=(0, 1, 2, 3), # 凍結的Stage的數量 frozen_stages=1, norm_cfg=dict(type='BN', requires_grad=True), norm_eval=True, # 網絡風格 style='pytorch'), # Neck neck=dict( # Neck類型為FPN type='FPN', # 輸入的各個Stage的通道數 in_channels=[256, 512, 1024, 2048], # 輸出的特征層通道數 out_channels=256, # 輸出的特征層的數量 num_outs=5), # RPN Head rpn_head=dict( # RPN網絡頭部 type='RPNHead', # 輸入通道數 in_channels=256, # 特征層的通道數 feat_channels=256, # Anchor生成器 anchor_generator=dict( type='AnchorGenerator', scales=[8], ratios=[0.5, 1.0, 2.0], # FPN的每一個Stage生成Anchor的步長 strides=[4, 8, 16, 32, 64]), bbox_coder=dict( # BBox編碼器 type='DeltaXYWHBBoxCoder', target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0]), # 分類損失函數 loss_cls=dict( type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), # BBox損失函數 loss_bbox=dict(type='L1Loss', loss_weight=1.0)), # ROI Head roi_head=dict( # ROI頭部類型 type='StandardRoIHead', # ROI特征提取器 bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), out_channels=256, featmap_strides=[4, 8, 16, 32]), # ROI的BBox頭部 bbox_head=dict( # 全連接層類型 type='Shared2FCBBoxHead', # 輸入通道數量 in_channels=256, # 全連接層輸出通道數量 fc_out_channels=1024, # ROI特征層尺寸 roi_feat_size=7, # 類的數量 num_classes=80, # BBox編碼器 bbox_coder=dict( type='DeltaXYWHBBoxCoder', target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2]), reg_class_agnostic=False, # 分類損失函數 loss_cls=dict( type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), # BBox損失函數 loss_bbox=dict(type='L1Loss', loss_weight=1.0)))) # model training and testing settings # 訓練配置 train_cfg = dict( # RPN網絡訓練配置 rpn=dict( # 樣本分配器 assigner=dict( type='MaxIoUAssigner', pos_iou_thr=0.7, neg_iou_thr=0.3, min_pos_iou=0.3, match_low_quality=True, ignore_iof_thr=-1), # 樣本采樣器 sampler=dict( type='RandomSampler', num=256, pos_fraction=0.5, neg_pos_ub=-1, add_gt_as_proposals=False), allowed_border=-1, pos_weight=-1, debug=False), # RPN網絡提議框設置 rpn_proposal=dict( nms_across_levels=False, nms_pre=2000, nms_post=1000, max_num=1000, nms_thr=0.7, min_bbox_size=0), # ROI網絡訓練配置 rcnn=dict( assigner=dict( type='MaxIoUAssigner', pos_iou_thr=0.5, neg_iou_thr=0.5, min_pos_iou=0.5, match_low_quality=False, ignore_iof_thr=-1), sampler=dict( type='RandomSampler', num=512, pos_fraction=0.25, neg_pos_ub=-1, add_gt_as_proposals=True), pos_weight=-1, debug=False)) # 測試配置 test_cfg = dict( # RPN網絡配置 rpn=dict( nms_across_levels=False, nms_pre=1000, nms_post=1000, max_num=1000, nms_thr=0.7, min_bbox_size=0), # ROI網絡配置 rcnn=dict( score_thr=0.05, # NMS類型及IOU Threshold nms=dict(type='nms', iou_threshold=0.5), max_per_img=100) # soft-nms is also supported for rcnn testing # e.g., nms=dict(type='soft_nms', iou_threshold=0.5, min_score=0.05) )
