diff --git a/configs/cascade_mask_rcnn_r101_fpn_1x.py b/configs/cascade_mask_rcnn_r101_fpn_1x.py index 9915c2ef7476c21b0878ecc8f690bf5b3b297577..574b5aa57ca4de6b3440a2c40d69e0e7e9052e19 100644 --- a/configs/cascade_mask_rcnn_r101_fpn_1x.py +++ b/configs/cascade_mask_rcnn_r101_fpn_1x.py @@ -24,7 +24,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -40,7 +42,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -50,7 +60,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -60,7 +78,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -72,7 +98,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -90,7 +118,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/cascade_mask_rcnn_r50_caffe_c4_1x.py b/configs/cascade_mask_rcnn_r50_caffe_c4_1x.py index 985945a02120cf51c44becc19feaef734fb4e5ca..cdf5ff03650848bcd19199cdb57ec26421a264db 100644 --- a/configs/cascade_mask_rcnn_r50_caffe_c4_1x.py +++ b/configs/cascade_mask_rcnn_r50_caffe_c4_1x.py @@ -33,7 +33,9 @@ model = dict( anchor_strides=[16], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -48,7 +50,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='BBoxHead', with_avg_pool=True, @@ -57,7 +67,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='BBoxHead', with_avg_pool=True, @@ -66,7 +84,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=None, mask_head=dict( @@ -74,7 +100,9 @@ model = dict( num_convs=0, in_channels=2048, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -92,7 +120,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/cascade_mask_rcnn_r50_fpn_1x.py b/configs/cascade_mask_rcnn_r50_fpn_1x.py index 7d89be37258cdac064742d1e8708a43c7553720d..64923c30060cfb40c1055ae294dd0f8a1044cf89 100644 --- a/configs/cascade_mask_rcnn_r50_fpn_1x.py +++ b/configs/cascade_mask_rcnn_r50_fpn_1x.py @@ -24,7 +24,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -40,7 +42,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -50,7 +60,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -60,7 +78,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -72,7 +98,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -90,7 +118,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/cascade_mask_rcnn_x101_32x4d_fpn_1x.py b/configs/cascade_mask_rcnn_x101_32x4d_fpn_1x.py index 73774323e4b10813003a7ebd147165fc4bc19ef5..e8a31d0549e54d6d5ff7f390ac8b2bf4c5897a5b 100644 --- a/configs/cascade_mask_rcnn_x101_32x4d_fpn_1x.py +++ b/configs/cascade_mask_rcnn_x101_32x4d_fpn_1x.py @@ -26,7 +26,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -42,7 +44,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -52,7 +62,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -62,7 +80,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -74,7 +100,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -92,7 +120,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, @@ -230,7 +257,7 @@ log_config = dict( total_epochs = 12 dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/cascade_mask_rcnn_r50_fpn_1x' +work_dir = './work_dirs/cascade_mask_rcnn_x101_32x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/cascade_mask_rcnn_x101_64x4d_fpn_1x.py b/configs/cascade_mask_rcnn_x101_64x4d_fpn_1x.py index d71351e04502ba9d7b4e941628c3b0e51e38085a..1661a105201c77c128623b8579db3aa3181a189b 100644 --- a/configs/cascade_mask_rcnn_x101_64x4d_fpn_1x.py +++ b/configs/cascade_mask_rcnn_x101_64x4d_fpn_1x.py @@ -26,7 +26,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -42,7 +44,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -52,7 +62,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -62,7 +80,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -74,7 +100,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -92,7 +120,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, @@ -230,7 +257,7 @@ log_config = dict( total_epochs = 12 dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/cascade_mask_rcnn_r50_fpn_1x' +work_dir = './work_dirs/cascade_mask_rcnn_x101_64x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/cascade_rcnn_r101_fpn_1x.py b/configs/cascade_rcnn_r101_fpn_1x.py index 0c115987d1be770fdb73f3bff1dc7dda5ae3fe7c..35a7aa851d9bfa48e522952322dd20150afb44e9 100644 --- a/configs/cascade_rcnn_r101_fpn_1x.py +++ b/configs/cascade_rcnn_r101_fpn_1x.py @@ -24,7 +24,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -40,7 +42,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -50,7 +60,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -60,7 +78,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ]) # model training and testing settings train_cfg = dict( @@ -79,7 +105,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/cascade_rcnn_r50_caffe_c4_1x.py b/configs/cascade_rcnn_r50_caffe_c4_1x.py index 8224f2f1e0f96a1a2ff6c2dff99562ee1bf3a299..978724b9d428be44bea6f8a92a002ad706757d94 100644 --- a/configs/cascade_rcnn_r50_caffe_c4_1x.py +++ b/configs/cascade_rcnn_r50_caffe_c4_1x.py @@ -33,7 +33,9 @@ model = dict( anchor_strides=[16], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -48,7 +50,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='BBoxHead', with_avg_pool=True, @@ -57,7 +67,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='BBoxHead', with_avg_pool=True, @@ -66,7 +84,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), ]) # model training and testing settings train_cfg = dict( @@ -85,7 +111,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/cascade_rcnn_r50_fpn_1x.py b/configs/cascade_rcnn_r50_fpn_1x.py index de0ca006958bc5e7810955493c67cf14b3ef7758..bc33238cfa15bc10f762412c29bcc638cb1a3fee 100644 --- a/configs/cascade_rcnn_r50_fpn_1x.py +++ b/configs/cascade_rcnn_r50_fpn_1x.py @@ -24,7 +24,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -40,7 +42,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -50,7 +60,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -60,7 +78,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ]) # model training and testing settings train_cfg = dict( @@ -79,7 +105,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/cascade_rcnn_x101_32x4d_fpn_1x.py b/configs/cascade_rcnn_x101_32x4d_fpn_1x.py index ba7c890fe28288013c2f7b61acbd85f8302bc61b..7ce7aab875fbd08a6eb700aeb786ecb8bce50456 100644 --- a/configs/cascade_rcnn_x101_32x4d_fpn_1x.py +++ b/configs/cascade_rcnn_x101_32x4d_fpn_1x.py @@ -26,7 +26,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -42,7 +44,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -52,7 +62,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -62,7 +80,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ]) # model training and testing settings train_cfg = dict( @@ -81,7 +107,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, @@ -213,7 +238,7 @@ log_config = dict( total_epochs = 12 dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/cascade_rcnn_r50_fpn_1x' +work_dir = './work_dirs/cascade_rcnn_x101_32x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/cascade_rcnn_x101_64x4d_fpn_1x.py b/configs/cascade_rcnn_x101_64x4d_fpn_1x.py index 420395631e23a953f49435002f9b7c9589d568d6..401dfac8ca17dc1f08eb92fc7d561d623374e36a 100644 --- a/configs/cascade_rcnn_x101_64x4d_fpn_1x.py +++ b/configs/cascade_rcnn_x101_64x4d_fpn_1x.py @@ -26,7 +26,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -42,7 +44,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -52,7 +62,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -62,7 +80,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ]) # model training and testing settings train_cfg = dict( @@ -81,7 +107,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, @@ -213,7 +238,7 @@ log_config = dict( total_epochs = 12 dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/cascade_rcnn_r50_fpn_1x' +work_dir = './work_dirs/cascade_rcnn_x101_64x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/dcn/cascade_mask_rcnn_dconv_c3-c5_r50_fpn_1x.py b/configs/dcn/cascade_mask_rcnn_dconv_c3-c5_r50_fpn_1x.py index 711231eaac99977a143e8a1a2f5a1354aedcce79..c564809bac8515b04a371996c1b49fc80fede080 100644 --- a/configs/dcn/cascade_mask_rcnn_dconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/cascade_mask_rcnn_dconv_c3-c5_r50_fpn_1x.py @@ -27,7 +27,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -43,7 +45,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -53,7 +58,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -63,7 +71,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -75,7 +86,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -93,7 +106,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/dcn/cascade_rcnn_dconv_c3-c5_r50_fpn_1x.py b/configs/dcn/cascade_rcnn_dconv_c3-c5_r50_fpn_1x.py index cc00d912f48171ea7c44fd119afe81424f21e21e..204370d8065640fad90a05c4862a7d9d63f4c788 100644 --- a/configs/dcn/cascade_rcnn_dconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/cascade_rcnn_dconv_c3-c5_r50_fpn_1x.py @@ -11,7 +11,9 @@ model = dict( frozen_stages=1, style='pytorch', dcn=dict( - modulated=False, deformable_groups=1, fallback_on_stride=False), + modulated=False, + deformable_groups=1, + fallback_on_stride=False), stage_with_dcn=(False, True, True, True)), neck=dict( type='FPN', @@ -27,7 +29,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -43,7 +47,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -53,7 +65,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -63,7 +83,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ]) # model training and testing settings train_cfg = dict( @@ -82,7 +110,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/dcn/faster_rcnn_dconv_c3-c5_r50_fpn_1x.py b/configs/dcn/faster_rcnn_dconv_c3-c5_r50_fpn_1x.py index 5e47eaedd7dd05a0df483df0512b6df9da346ab6..80c3a580e6c4c90574dce3efac5544b01b1e5a7d 100644 --- a/configs/dcn/faster_rcnn_dconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/faster_rcnn_dconv_c3-c5_r50_fpn_1x.py @@ -26,7 +26,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -41,7 +43,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -59,7 +64,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/dcn/faster_rcnn_dconv_c3-c5_x101_32x4d_fpn_1x.py b/configs/dcn/faster_rcnn_dconv_c3-c5_x101_32x4d_fpn_1x.py index aab40b977301c299643dfcae2c1d9d455b6ad83d..31aa1981700a23080098be8e0e31849a88f79862 100644 --- a/configs/dcn/faster_rcnn_dconv_c3-c5_x101_32x4d_fpn_1x.py +++ b/configs/dcn/faster_rcnn_dconv_c3-c5_x101_32x4d_fpn_1x.py @@ -31,7 +31,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -46,7 +48,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -64,7 +69,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/dcn/faster_rcnn_dpool_r50_fpn_1x.py b/configs/dcn/faster_rcnn_dpool_r50_fpn_1x.py index 9d94e57561dc0e8a6c2ef1e733f0dbf3c00194e3..eeede41bfb728474881d3758693428d9d13fc1a0 100644 --- a/configs/dcn/faster_rcnn_dpool_r50_fpn_1x.py +++ b/configs/dcn/faster_rcnn_dpool_r50_fpn_1x.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict( @@ -44,7 +46,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -62,7 +67,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/dcn/faster_rcnn_mdconv_c3-c5_r50_fpn_1x.py b/configs/dcn/faster_rcnn_mdconv_c3-c5_r50_fpn_1x.py index 73dc579ba3535720f58c7aecf7d8363c376843b1..a6d53b11b7c0c0583fb36a138cf04f61172ea5bb 100644 --- a/configs/dcn/faster_rcnn_mdconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/faster_rcnn_mdconv_c3-c5_r50_fpn_1x.py @@ -26,7 +26,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -41,7 +43,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -59,7 +64,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/dcn/faster_rcnn_mdpool_r50_fpn_1x.py b/configs/dcn/faster_rcnn_mdpool_r50_fpn_1x.py index b55a34c2a7c5660e7419697f7d9bf9a6acf7fe9f..d033cdf6d6c587507934044e741cef4b971495b5 100644 --- a/configs/dcn/faster_rcnn_mdpool_r50_fpn_1x.py +++ b/configs/dcn/faster_rcnn_mdpool_r50_fpn_1x.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict( @@ -44,7 +46,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -62,7 +67,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/dcn/mask_rcnn_dconv_c3-c5_r50_fpn_1x.py b/configs/dcn/mask_rcnn_dconv_c3-c5_r50_fpn_1x.py index 8135f098e9a00a0b75c14160c29292f4e546b6a3..33ca7ff45752bcf60be276b06b83bcb5ea998200 100644 --- a/configs/dcn/mask_rcnn_dconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/mask_rcnn_dconv_c3-c5_r50_fpn_1x.py @@ -10,7 +10,9 @@ model = dict( frozen_stages=1, style='pytorch', dcn=dict( - modulated=False, deformable_groups=1, fallback_on_stride=False), + modulated=False, + deformable_groups=1, + fallback_on_stride=False), stage_with_dcn=(False, True, True, True)), neck=dict( type='FPN', @@ -26,7 +28,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -41,7 +45,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -52,7 +59,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -70,7 +79,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/fast_mask_rcnn_r101_fpn_1x.py b/configs/fast_mask_rcnn_r101_fpn_1x.py index fa64d6f3799301e8cf53c3c4b669a51b550f8c26..d80e32671203a188418bc284b87283ef1c027886 100644 --- a/configs/fast_mask_rcnn_r101_fpn_1x.py +++ b/configs/fast_mask_rcnn_r101_fpn_1x.py @@ -28,7 +28,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -39,7 +42,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rcnn=dict( diff --git a/configs/fast_mask_rcnn_r50_fpn_1x.py b/configs/fast_mask_rcnn_r50_fpn_1x.py index 2005100f352603f0d7ab1c47b5820c7b7e3af434..88d3eb00c1845a6dfde2fd17bcac92187ca69d55 100644 --- a/configs/fast_mask_rcnn_r50_fpn_1x.py +++ b/configs/fast_mask_rcnn_r50_fpn_1x.py @@ -28,7 +28,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -39,7 +42,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rcnn=dict( diff --git a/configs/fast_rcnn_r101_fpn_1x.py b/configs/fast_rcnn_r101_fpn_1x.py index c61b74ff1200e97fdb8de989d2fa3324cfd9e756..d39eee50a49e2afcc98ab54c6aea3096c10ff03b 100644 --- a/configs/fast_rcnn_r101_fpn_1x.py +++ b/configs/fast_rcnn_r101_fpn_1x.py @@ -28,7 +28,13 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rcnn=dict( diff --git a/configs/fast_rcnn_r50_caffe_c4_1x.py b/configs/fast_rcnn_r50_caffe_c4_1x.py index 20481f3d2e6bf5d88d752dc63627f989ea533ef8..5d78bafb7b018d5ac001fb41f5d4cacd2c18837c 100644 --- a/configs/fast_rcnn_r50_caffe_c4_1x.py +++ b/configs/fast_rcnn_r50_caffe_c4_1x.py @@ -36,7 +36,13 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rcnn=dict( diff --git a/configs/fast_rcnn_r50_fpn_1x.py b/configs/fast_rcnn_r50_fpn_1x.py index 542e2dd439a7f76dbf5571c74b70e029deca73db..87641922f793789e6e75e7e3efa843362549ed05 100644 --- a/configs/fast_rcnn_r50_fpn_1x.py +++ b/configs/fast_rcnn_r50_fpn_1x.py @@ -28,7 +28,13 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rcnn=dict( diff --git a/configs/faster_rcnn_ohem_r50_fpn_1x.py b/configs/faster_rcnn_ohem_r50_fpn_1x.py index 9311c5f2ca30260906b8b421ecb1ca5e45a58d0b..a8ea23962332d5ac4540bc7294063a506955cc6e 100644 --- a/configs/faster_rcnn_ohem_r50_fpn_1x.py +++ b/configs/faster_rcnn_ohem_r50_fpn_1x.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -38,7 +40,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -56,7 +61,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/faster_rcnn_r101_fpn_1x.py b/configs/faster_rcnn_r101_fpn_1x.py index 90a3aadb7a5d8783b2f5feb83badcc01dbc76bb2..379382a37111b9eeff5b529ed6e4e3c398a34fc7 100644 --- a/configs/faster_rcnn_r101_fpn_1x.py +++ b/configs/faster_rcnn_r101_fpn_1x.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -38,7 +40,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -56,7 +61,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/faster_rcnn_r50_caffe_c4_1x.py b/configs/faster_rcnn_r50_caffe_c4_1x.py index 24b1f0dd7fbf425d4843ee9a1f1b4797bf7e4214..ebbcc4e0cb780ce0ecc30686f80e87bf87a514a1 100644 --- a/configs/faster_rcnn_r50_caffe_c4_1x.py +++ b/configs/faster_rcnn_r50_caffe_c4_1x.py @@ -32,7 +32,9 @@ model = dict( anchor_strides=[16], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -46,7 +48,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -64,7 +69,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/faster_rcnn_r50_fpn_1x.py b/configs/faster_rcnn_r50_fpn_1x.py index bcfcd15651ec76bde463faab6c241ecf9a2a84cc..f4ee36907f722d29f419612d67ee93ca0f80b3f4 100644 --- a/configs/faster_rcnn_r50_fpn_1x.py +++ b/configs/faster_rcnn_r50_fpn_1x.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -38,7 +40,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -56,7 +61,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/faster_rcnn_x101_32x4d_fpn_1x.py b/configs/faster_rcnn_x101_32x4d_fpn_1x.py index cdeee64f4bec5b521078dad4094c8bf81cc39676..50b479d0e0575ef9267874def8e62e09345bfd6b 100644 --- a/configs/faster_rcnn_x101_32x4d_fpn_1x.py +++ b/configs/faster_rcnn_x101_32x4d_fpn_1x.py @@ -25,7 +25,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -40,7 +42,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -58,7 +63,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, @@ -159,7 +163,7 @@ log_config = dict( total_epochs = 12 dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/faster_rcnn_r50_fpn_1x' +work_dir = './work_dirs/faster_rcnn_x101_32x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/faster_rcnn_x101_64x4d_fpn_1x.py b/configs/faster_rcnn_x101_64x4d_fpn_1x.py index 647d07c39f3b261a5b9076f14e537e7759eba47a..4397d2defd16524dee102ba3d479f7bdcf94b7c2 100644 --- a/configs/faster_rcnn_x101_64x4d_fpn_1x.py +++ b/configs/faster_rcnn_x101_64x4d_fpn_1x.py @@ -25,7 +25,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -40,7 +42,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -58,7 +63,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, @@ -159,7 +163,7 @@ log_config = dict( total_epochs = 12 dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/faster_rcnn_r50_fpn_1x' +work_dir = './work_dirs/faster_rcnn_x101_64x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/gn+ws/faster_rcnn_r50_fpn_gn_ws_1x.py b/configs/gn+ws/faster_rcnn_r50_fpn_gn_ws_1x.py index 396993faff4698d3c40d2dc07f154cbfe33f7205..0eef1e9d55c1ccf20235c48449d8307ddd480eed 100644 --- a/configs/gn+ws/faster_rcnn_r50_fpn_gn_ws_1x.py +++ b/configs/gn+ws/faster_rcnn_r50_fpn_gn_ws_1x.py @@ -29,7 +29,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -48,7 +50,10 @@ model = dict( target_stds=[0.1, 0.1, 0.2, 0.2], reg_class_agnostic=False, conv_cfg=conv_cfg, - norm_cfg=norm_cfg)) + norm_cfg=norm_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -66,7 +71,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_20_23_24e.py b/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_20_23_24e.py index 5a79bfd6c4ac4e21d74ebc12c3aaf1b5194775da..da39db1b4e41b9af0227ab1f3c2f4a7d6f0da85c 100644 --- a/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_20_23_24e.py +++ b/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_20_23_24e.py @@ -29,7 +29,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -48,7 +50,10 @@ model = dict( target_stds=[0.1, 0.1, 0.2, 0.2], reg_class_agnostic=False, conv_cfg=conv_cfg, - norm_cfg=norm_cfg), + norm_cfg=norm_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -61,7 +66,9 @@ model = dict( conv_out_channels=256, num_classes=81, conv_cfg=conv_cfg, - norm_cfg=norm_cfg)) + norm_cfg=norm_cfg, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -79,7 +86,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_2x.py b/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_2x.py index 7294aee69286503898d9747d724d36d975380a05..c023ec3aae1f2e7f2ccb5b2a3d6b963b652fcb69 100644 --- a/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_2x.py +++ b/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_2x.py @@ -29,7 +29,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -48,7 +50,10 @@ model = dict( target_stds=[0.1, 0.1, 0.2, 0.2], reg_class_agnostic=False, conv_cfg=conv_cfg, - norm_cfg=norm_cfg), + norm_cfg=norm_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -61,7 +66,9 @@ model = dict( conv_out_channels=256, num_classes=81, conv_cfg=conv_cfg, - norm_cfg=norm_cfg)) + norm_cfg=norm_cfg, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -79,7 +86,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/gn+ws/mask_rcnn_x101_32x4d_fpn_gn_ws_2x.py b/configs/gn+ws/mask_rcnn_x101_32x4d_fpn_gn_ws_2x.py index 4ed83b251be8b6fcb0ad0eb55043e913b5c9b4c8..271ed6e4c8f7bcbcee26e0ec32581de8437773f7 100644 --- a/configs/gn+ws/mask_rcnn_x101_32x4d_fpn_gn_ws_2x.py +++ b/configs/gn+ws/mask_rcnn_x101_32x4d_fpn_gn_ws_2x.py @@ -31,7 +31,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -50,7 +52,10 @@ model = dict( target_stds=[0.1, 0.1, 0.2, 0.2], reg_class_agnostic=False, conv_cfg=conv_cfg, - norm_cfg=norm_cfg), + norm_cfg=norm_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -63,7 +68,9 @@ model = dict( conv_out_channels=256, num_classes=81, conv_cfg=conv_cfg, - norm_cfg=norm_cfg)) + norm_cfg=norm_cfg, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -81,7 +88,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/gn/mask_rcnn_r101_fpn_gn_2x.py b/configs/gn/mask_rcnn_r101_fpn_gn_2x.py index 3f61dc402a534b59010b1b5c0acfd1fe3c557605..ae09042d07032d6cc4977cf2e0f55ab17b1a7a23 100644 --- a/configs/gn/mask_rcnn_r101_fpn_gn_2x.py +++ b/configs/gn/mask_rcnn_r101_fpn_gn_2x.py @@ -27,7 +27,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -45,7 +47,10 @@ model = dict( target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], reg_class_agnostic=False, - norm_cfg=norm_cfg), + norm_cfg=norm_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -57,8 +62,9 @@ model = dict( in_channels=256, conv_out_channels=256, num_classes=81, - norm_cfg=norm_cfg)) - + norm_cfg=norm_cfg, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -76,7 +82,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/gn/mask_rcnn_r50_fpn_gn_2x.py b/configs/gn/mask_rcnn_r50_fpn_gn_2x.py index 165c4aa06fc018a6a4fdf489351090e8c1bbf04a..bbeaa78f6dbc34798a8d47392aeaa9738b1ad538 100644 --- a/configs/gn/mask_rcnn_r50_fpn_gn_2x.py +++ b/configs/gn/mask_rcnn_r50_fpn_gn_2x.py @@ -27,7 +27,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -45,7 +47,10 @@ model = dict( target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], reg_class_agnostic=False, - norm_cfg=norm_cfg), + norm_cfg=norm_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -57,8 +62,9 @@ model = dict( in_channels=256, conv_out_channels=256, num_classes=81, - norm_cfg=norm_cfg)) - + norm_cfg=norm_cfg, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -76,7 +82,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/gn/mask_rcnn_r50_fpn_gn_contrib_2x.py b/configs/gn/mask_rcnn_r50_fpn_gn_contrib_2x.py index 00760fb031eb6a034b285ec2e8abe18b0f5527cc..87db0f5447374caca51977b9ddee017d43728e68 100644 --- a/configs/gn/mask_rcnn_r50_fpn_gn_contrib_2x.py +++ b/configs/gn/mask_rcnn_r50_fpn_gn_contrib_2x.py @@ -27,7 +27,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -45,7 +47,10 @@ model = dict( target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], reg_class_agnostic=False, - norm_cfg=norm_cfg), + norm_cfg=norm_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -57,8 +62,9 @@ model = dict( in_channels=256, conv_out_channels=256, num_classes=81, - norm_cfg=norm_cfg)) - + norm_cfg=norm_cfg, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -76,7 +82,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/htc/README.md b/configs/htc/README.md index 7a819ed988cf08c06392ca9ee87d21a82e9e48bc..4d78c7091715d951e93ea1247926dac4d6de89d8 100644 --- a/configs/htc/README.md +++ b/configs/htc/README.md @@ -34,7 +34,7 @@ mmdetection ## Results and Models -The results on COCO 2017val is shown in the below table. (results on test-dev are usually slightly higher than val) +The results on COCO 2017val are shown in the below table. (results on test-dev are usually slightly higher than val) | Backbone | Style | Lr schd | Mem (GB) | Train time (s/iter) | Inf time (fps) | box AP | mask AP | Download | |:---------:|:-------:|:-------:|:--------:|:-------------------:|:--------------:|:------:|:-------:|:--------:| @@ -52,4 +52,4 @@ We also provide a powerful HTC with DCN and multi-scale training model. No testi | Backbone | Style | DCN | training scales | Lr schd | box AP | mask AP | Download | |:----------------:|:-------:|:-----:|:---------------:|:-------:|:------:|:-------:|:--------:| -| X-101-64x4d-FPN | pytorch | c3-c5 | 400~1400 | 20e | 50.7 | 43.9 | [model](https://s3.ap-northeast-2.amazonaws.com/open-mmlab/mmdetection/models/htc/htc_dconv_c3-c5_mstrain_400_1400_x101_64x4d_fpn_20e_20190408-0e50669c.pth) | \ No newline at end of file +| X-101-64x4d-FPN | pytorch | c3-c5 | 400~1400 | 20e | 50.7 | 43.9 | [model](https://s3.ap-northeast-2.amazonaws.com/open-mmlab/mmdetection/models/htc/htc_dconv_c3-c5_mstrain_400_1400_x101_64x4d_fpn_20e_20190408-0e50669c.pth) | diff --git a/configs/htc/htc_dconv_c3-c5_mstrain_400_1400_x101_64x4d_fpn_20e.py b/configs/htc/htc_dconv_c3-c5_mstrain_400_1400_x101_64x4d_fpn_20e.py index dbebfe3b25f140f3a7d116e9af945e32c637cf1d..4c9581906390864a3bfef5ce87fd279ff35d2532 100644 --- a/configs/htc/htc_dconv_c3-c5_mstrain_400_1400_x101_64x4d_fpn_20e.py +++ b/configs/htc/htc_dconv_c3-c5_mstrain_400_1400_x101_64x4d_fpn_20e.py @@ -34,7 +34,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -50,7 +52,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -60,7 +70,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -70,7 +88,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -82,7 +108,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81), + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)), semantic_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -115,7 +143,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/htc/htc_r101_fpn_20e.py b/configs/htc/htc_r101_fpn_20e.py index 8736c8178f2f4873090de98c43adc297939c802c..6be95374f5367ee8e8db9aa90d728aa3bb25f1f7 100644 --- a/configs/htc/htc_r101_fpn_20e.py +++ b/configs/htc/htc_r101_fpn_20e.py @@ -26,7 +26,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -42,7 +44,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -52,7 +62,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -62,7 +80,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -74,7 +100,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81), + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)), semantic_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -107,7 +135,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/htc/htc_r50_fpn_1x.py b/configs/htc/htc_r50_fpn_1x.py index 22914704e0a5866dc10db63f208f7db3fb629594..08f3a439a56481197cf6a500e703763618c89ee0 100644 --- a/configs/htc/htc_r50_fpn_1x.py +++ b/configs/htc/htc_r50_fpn_1x.py @@ -26,7 +26,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -42,7 +44,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -52,7 +62,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -62,7 +80,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -74,7 +100,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81), + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)), semantic_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -107,7 +135,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/htc/htc_r50_fpn_20e.py b/configs/htc/htc_r50_fpn_20e.py index e37cae28293bf945ff2b0b81e0ed1ea633279bab..25a7ffe603dd29e6847e66e9ea98cf966870b45e 100644 --- a/configs/htc/htc_r50_fpn_20e.py +++ b/configs/htc/htc_r50_fpn_20e.py @@ -26,7 +26,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -42,7 +44,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -52,7 +62,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -62,7 +80,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -74,7 +100,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81), + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)), semantic_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -107,7 +135,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/htc/htc_without_semantic_r50_fpn_1x.py b/configs/htc/htc_without_semantic_r50_fpn_1x.py index 83d45378c67bf9a3a6fc1ffcdc95eca6982c2701..83b531d67523e822663f518048e22cbbf5aae058 100644 --- a/configs/htc/htc_without_semantic_r50_fpn_1x.py +++ b/configs/htc/htc_without_semantic_r50_fpn_1x.py @@ -26,7 +26,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -42,7 +44,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -52,7 +62,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -62,7 +80,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -74,7 +100,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -92,7 +120,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/htc/htc_x101_32x4d_fpn_20e_16gpu.py b/configs/htc/htc_x101_32x4d_fpn_20e_16gpu.py index 7a1f2340aecddea7046b04f4cd948824abe5a77a..2846c572d6ac36c44043156e526b3e807250c44d 100644 --- a/configs/htc/htc_x101_32x4d_fpn_20e_16gpu.py +++ b/configs/htc/htc_x101_32x4d_fpn_20e_16gpu.py @@ -28,7 +28,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -44,7 +46,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -54,7 +64,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -64,7 +82,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -76,7 +102,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81), + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)), semantic_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -109,7 +137,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/htc/htc_x101_64x4d_fpn_20e_16gpu.py b/configs/htc/htc_x101_64x4d_fpn_20e_16gpu.py index 025b36ddd6c48fb615f4658b481ed2e0263cc17d..095a81b549c878d41507178e5a68566c9a31d80f 100644 --- a/configs/htc/htc_x101_64x4d_fpn_20e_16gpu.py +++ b/configs/htc/htc_x101_64x4d_fpn_20e_16gpu.py @@ -28,7 +28,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -44,7 +46,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -54,7 +64,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.05, 0.05, 0.1, 0.1], - reg_class_agnostic=True), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)), dict( type='SharedFCBBoxHead', num_fcs=2, @@ -64,7 +82,15 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.033, 0.033, 0.067, 0.067], - reg_class_agnostic=True) + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', + beta=1.0, + loss_weight=1.0)) ], mask_roi_extractor=dict( type='SingleRoIExtractor', @@ -76,7 +102,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81), + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)), semantic_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -109,7 +137,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/mask_rcnn_r101_fpn_1x.py b/configs/mask_rcnn_r101_fpn_1x.py index 1059120773b980e810ec87281915e4a7c882114e..a3cfd569b9f6b9555d20d5a11bf34b751208794d 100644 --- a/configs/mask_rcnn_r101_fpn_1x.py +++ b/configs/mask_rcnn_r101_fpn_1x.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -38,7 +40,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -49,7 +54,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -67,7 +74,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/mask_rcnn_r50_caffe_c4_1x.py b/configs/mask_rcnn_r50_caffe_c4_1x.py index 4173b29b3aee3c0e017707cbeb5167ff400091c6..f901c51904f5aff605e6b5ce47af18a974dde38a 100644 --- a/configs/mask_rcnn_r50_caffe_c4_1x.py +++ b/configs/mask_rcnn_r50_caffe_c4_1x.py @@ -2,7 +2,7 @@ norm_cfg = dict(type='BN', requires_grad=False) model = dict( type='MaskRCNN', - pretrained='open-mmlab://resnet50_caffe', + # pretrained='open-mmlab://resnet50_caffe', backbone=dict( type='ResNet', depth=50, @@ -32,7 +32,9 @@ model = dict( anchor_strides=[16], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -46,14 +48,19 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=None, mask_head=dict( type='FCNMaskHead', num_convs=0, in_channels=2048, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -71,7 +78,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/mask_rcnn_r50_fpn_1x.py b/configs/mask_rcnn_r50_fpn_1x.py index eb4330b81fb22f0994707e095dd61ff20e8bcff5..b2854fa17b9f2ca381c99d6c6d4a04ebf04e7a10 100644 --- a/configs/mask_rcnn_r50_fpn_1x.py +++ b/configs/mask_rcnn_r50_fpn_1x.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -38,7 +40,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -49,7 +54,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -67,7 +74,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/mask_rcnn_x101_32x4d_fpn_1x.py b/configs/mask_rcnn_x101_32x4d_fpn_1x.py index 6772f2b94b3fdfcd354167cf75120bda3c8f01b3..051801b36f4894e63e922671d3148f2976612fdd 100644 --- a/configs/mask_rcnn_x101_32x4d_fpn_1x.py +++ b/configs/mask_rcnn_x101_32x4d_fpn_1x.py @@ -25,7 +25,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -40,7 +42,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -51,7 +56,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -69,7 +76,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, @@ -171,7 +177,7 @@ log_config = dict( total_epochs = 12 dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/mask_rcnn_r50_fpn_1x' +work_dir = './work_dirs/mask_rcnn_x101_32x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/mask_rcnn_x101_64x4d_fpn_1x.py b/configs/mask_rcnn_x101_64x4d_fpn_1x.py index 8c61e332f8e9ff0953de06382406ffca6463a7bd..434bf6922608c927717a5454fb406e4bc3640bfb 100644 --- a/configs/mask_rcnn_x101_64x4d_fpn_1x.py +++ b/configs/mask_rcnn_x101_64x4d_fpn_1x.py @@ -25,7 +25,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -40,7 +42,10 @@ model = dict( num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -51,7 +56,9 @@ model = dict( num_convs=4, in_channels=256, conv_out_channels=256, - num_classes=81)) + num_classes=81, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -69,7 +76,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, @@ -171,7 +177,7 @@ log_config = dict( total_epochs = 12 dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/mask_rcnn_r50_fpn_1x' +work_dir = './work_dirs/mask_rcnn_x101_64x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py b/configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py index 88f0ae0a7d912208001e49bf9060feadd1278c70..0c0be0e4a562ab5e3ca1cac846276258df05ca91 100644 --- a/configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py +++ b/configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -38,7 +40,10 @@ model = dict( num_classes=21, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False)) + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -56,7 +61,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/retinanet_r101_fpn_1x.py b/configs/retinanet_r101_fpn_1x.py index e07d98af50597f5e9c7ee5a568a7e1407333ead7..81e5557729ca5c19bfccba45461864786cfc4755 100644 --- a/configs/retinanet_r101_fpn_1x.py +++ b/configs/retinanet_r101_fpn_1x.py @@ -27,7 +27,14 @@ model = dict( anchor_ratios=[0.5, 1.0, 2.0], anchor_strides=[8, 16, 32, 64, 128], target_means=[.0, .0, .0, .0], - target_stds=[1.0, 1.0, 1.0, 1.0])) + target_stds=[1.0, 1.0, 1.0, 1.0], + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=0.11, loss_weight=1.0))) # training and testing settings train_cfg = dict( assigner=dict( @@ -36,9 +43,6 @@ train_cfg = dict( neg_iou_thr=0.4, min_pos_iou=0, ignore_iof_thr=-1), - smoothl1_beta=0.11, - gamma=2.0, - alpha=0.25, allowed_border=-1, pos_weight=-1, debug=False) diff --git a/configs/retinanet_r50_fpn_1x.py b/configs/retinanet_r50_fpn_1x.py index 2840c06f975240ffe5213d164f94643cdfa858df..b721f9d383bf3db0d641e0dc95866780c77ff579 100644 --- a/configs/retinanet_r50_fpn_1x.py +++ b/configs/retinanet_r50_fpn_1x.py @@ -27,7 +27,14 @@ model = dict( anchor_ratios=[0.5, 1.0, 2.0], anchor_strides=[8, 16, 32, 64, 128], target_means=[.0, .0, .0, .0], - target_stds=[1.0, 1.0, 1.0, 1.0])) + target_stds=[1.0, 1.0, 1.0, 1.0], + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=0.11, loss_weight=1.0))) # training and testing settings train_cfg = dict( assigner=dict( @@ -36,9 +43,6 @@ train_cfg = dict( neg_iou_thr=0.4, min_pos_iou=0, ignore_iof_thr=-1), - smoothl1_beta=0.11, - gamma=2.0, - alpha=0.25, allowed_border=-1, pos_weight=-1, debug=False) diff --git a/configs/retinanet_x101_32x4d_fpn_1x.py b/configs/retinanet_x101_32x4d_fpn_1x.py index 3f7741bb17a7b2d96d253f56c0400d98fba1e09e..1b0aaaa5b5ca93e5d580b546160a3ef8dc7cadb5 100644 --- a/configs/retinanet_x101_32x4d_fpn_1x.py +++ b/configs/retinanet_x101_32x4d_fpn_1x.py @@ -29,7 +29,14 @@ model = dict( anchor_ratios=[0.5, 1.0, 2.0], anchor_strides=[8, 16, 32, 64, 128], target_means=[.0, .0, .0, .0], - target_stds=[1.0, 1.0, 1.0, 1.0])) + target_stds=[1.0, 1.0, 1.0, 1.0], + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=0.11, loss_weight=1.0))) # training and testing settings train_cfg = dict( assigner=dict( @@ -38,9 +45,6 @@ train_cfg = dict( neg_iou_thr=0.4, min_pos_iou=0, ignore_iof_thr=-1), - smoothl1_beta=0.11, - gamma=2.0, - alpha=0.25, allowed_border=-1, pos_weight=-1, debug=False) @@ -116,7 +120,7 @@ total_epochs = 12 device_ids = range(8) dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/retinanet_r50_fpn_1x' +work_dir = './work_dirs/retinanet_x101_32x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/retinanet_x101_64x4d_fpn_1x.py b/configs/retinanet_x101_64x4d_fpn_1x.py index 2ef8b533015d4853af716b6d3964bf838b8dd2a5..f5631f70f3bf87ec9fd21b04c8e318f7856b480a 100644 --- a/configs/retinanet_x101_64x4d_fpn_1x.py +++ b/configs/retinanet_x101_64x4d_fpn_1x.py @@ -29,7 +29,14 @@ model = dict( anchor_ratios=[0.5, 1.0, 2.0], anchor_strides=[8, 16, 32, 64, 128], target_means=[.0, .0, .0, .0], - target_stds=[1.0, 1.0, 1.0, 1.0])) + target_stds=[1.0, 1.0, 1.0, 1.0], + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=0.11, loss_weight=1.0))) # training and testing settings train_cfg = dict( assigner=dict( @@ -38,9 +45,6 @@ train_cfg = dict( neg_iou_thr=0.4, min_pos_iou=0, ignore_iof_thr=-1), - smoothl1_beta=0.11, - gamma=2.0, - alpha=0.25, allowed_border=-1, pos_weight=-1, debug=False) @@ -116,7 +120,7 @@ total_epochs = 12 device_ids = range(8) dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/retinanet_r50_fpn_1x' +work_dir = './work_dirs/retinanet_x101_64x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/rpn_r101_fpn_1x.py b/configs/rpn_r101_fpn_1x.py index 450215e9de12c80411d97adcdc1dc49f5a02348c..6e1acd5fae8a17cfc72e7dbea7d306d311713986 100644 --- a/configs/rpn_r101_fpn_1x.py +++ b/configs/rpn_r101_fpn_1x.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True)) + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -41,7 +43,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False)) test_cfg = dict( rpn=dict( diff --git a/configs/rpn_r50_caffe_c4_1x.py b/configs/rpn_r50_caffe_c4_1x.py index 373603f1c5c649963bed627adace2519f8ff890e..caf0108be344c8a0a69b84222a456a3e0af795f0 100644 --- a/configs/rpn_r50_caffe_c4_1x.py +++ b/configs/rpn_r50_caffe_c4_1x.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[16], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True)) + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -41,7 +43,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False)) test_cfg = dict( rpn=dict( diff --git a/configs/rpn_r50_fpn_1x.py b/configs/rpn_r50_fpn_1x.py index 3af264936740207b88a20901ddfbf950cb72044c..8c648ad22812e00d105664231521ed876e2df889 100644 --- a/configs/rpn_r50_fpn_1x.py +++ b/configs/rpn_r50_fpn_1x.py @@ -23,7 +23,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True)) + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -41,7 +43,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False)) test_cfg = dict( rpn=dict( diff --git a/configs/rpn_x101_32x4d_fpn_1x.py b/configs/rpn_x101_32x4d_fpn_1x.py index c23d715aec34b2ffa46fa546db3b106cad490708..2a3faef55293a970b3b857d815f9c5394e55865b 100644 --- a/configs/rpn_x101_32x4d_fpn_1x.py +++ b/configs/rpn_x101_32x4d_fpn_1x.py @@ -25,7 +25,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True)) + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -43,7 +45,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False)) test_cfg = dict( rpn=dict( @@ -117,7 +118,7 @@ log_config = dict( total_epochs = 12 dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/rpn_r101_fpn_1x' +work_dir = './work_dirs/rpn_x101_32x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/rpn_x101_64x4d_fpn_1x.py b/configs/rpn_x101_64x4d_fpn_1x.py index c34a1469ab6a8b706fd79e7173e70cb4c52be014..182a0b39530b579cbd0c681aaad5072dce9e3a4a 100644 --- a/configs/rpn_x101_64x4d_fpn_1x.py +++ b/configs/rpn_x101_64x4d_fpn_1x.py @@ -25,7 +25,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True)) + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -43,7 +45,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False)) test_cfg = dict( rpn=dict( @@ -117,7 +118,7 @@ log_config = dict( total_epochs = 12 dist_params = dict(backend='nccl') log_level = 'INFO' -work_dir = './work_dirs/rpn_r101_fpn_1x' +work_dir = './work_dirs/rpn_x101_64x4d_fpn_1x' load_from = None resume_from = None workflow = [('train', 1)] diff --git a/configs/scratch/scratch_faster_rcnn_r50_fpn_gn_6x.py b/configs/scratch/scratch_faster_rcnn_r50_fpn_gn_6x.py index d4da52918a83757059c2de09f5d7132ba3223a23..cbb0e232acab00aad5bfad724ad9cb12e006ee7e 100644 --- a/configs/scratch/scratch_faster_rcnn_r50_fpn_gn_6x.py +++ b/configs/scratch/scratch_faster_rcnn_r50_fpn_gn_6x.py @@ -27,7 +27,9 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -45,7 +47,10 @@ model = dict( target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], reg_class_agnostic=False, - norm_cfg=norm_cfg)) + norm_cfg=norm_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -63,7 +68,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/configs/scratch/scratch_mask_rcnn_r50_fpn_gn_6x.py b/configs/scratch/scratch_mask_rcnn_r50_fpn_gn_6x.py index 63d21c8c10d866550e7b0e269570ca14ca294bf8..679aab3d1051491f90c1f94aa5fc2669b3711daa 100644 --- a/configs/scratch/scratch_mask_rcnn_r50_fpn_gn_6x.py +++ b/configs/scratch/scratch_mask_rcnn_r50_fpn_gn_6x.py @@ -27,7 +27,10 @@ model = dict( anchor_strides=[4, 8, 16, 32, 64], target_means=[.0, .0, .0, .0], target_stds=[1.0, 1.0, 1.0, 1.0], - use_sigmoid_cls=True), + use_sigmoid_cls=True, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2), @@ -45,7 +48,10 @@ model = dict( target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], reg_class_agnostic=False, - norm_cfg=norm_cfg), + norm_cfg=norm_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), mask_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2), @@ -57,7 +63,9 @@ model = dict( in_channels=256, conv_out_channels=256, num_classes=81, - norm_cfg=norm_cfg)) + norm_cfg=norm_cfg, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) # model training and testing settings train_cfg = dict( rpn=dict( @@ -75,7 +83,6 @@ train_cfg = dict( add_gt_as_proposals=False), allowed_border=0, pos_weight=-1, - smoothl1_beta=1 / 9.0, debug=False), rpn_proposal=dict( nms_across_levels=False, diff --git a/mmdet/models/__init__.py b/mmdet/models/__init__.py index 7925e6a3717410de4c9e87ca63a88bc44bdf51c7..c1776bf84d33532232ce13a7f5c6003f2e1397b4 100644 --- a/mmdet/models/__init__.py +++ b/mmdet/models/__init__.py @@ -5,14 +5,16 @@ from .anchor_heads import * # noqa: F401,F403 from .shared_heads import * # noqa: F401,F403 from .bbox_heads import * # noqa: F401,F403 from .mask_heads import * # noqa: F401,F403 +from .losses import * # noqa: F401,F403 from .detectors import * # noqa: F401,F403 from .registry import (BACKBONES, NECKS, ROI_EXTRACTORS, SHARED_HEADS, HEADS, - DETECTORS) + LOSSES, DETECTORS) from .builder import (build_backbone, build_neck, build_roi_extractor, - build_shared_head, build_head, build_detector) + build_shared_head, build_head, build_loss, + build_detector) __all__ = [ - 'BACKBONES', 'NECKS', 'ROI_EXTRACTORS', 'SHARED_HEADS', 'HEADS', + 'BACKBONES', 'NECKS', 'ROI_EXTRACTORS', 'SHARED_HEADS', 'HEADS', 'LOSSES', 'DETECTORS', 'build_backbone', 'build_neck', 'build_roi_extractor', - 'build_shared_head', 'build_head', 'build_detector' + 'build_shared_head', 'build_head', 'build_loss', 'build_detector' ] diff --git a/mmdet/models/anchor_heads/anchor_head.py b/mmdet/models/anchor_heads/anchor_head.py index 881415be267d91d5ab097f2f316cef98b7a4c91d..6d68c204ccd26fc3a23a4a67da89c33af1e48226 100644 --- a/mmdet/models/anchor_heads/anchor_head.py +++ b/mmdet/models/anchor_heads/anchor_head.py @@ -6,9 +6,8 @@ import torch.nn as nn from mmcv.cnn import normal_init from mmdet.core import (AnchorGenerator, anchor_target, delta2bbox, - multi_apply, weighted_cross_entropy, weighted_smoothl1, - weighted_binary_cross_entropy, - weighted_sigmoid_focal_loss, multiclass_nms) + multi_apply, multiclass_nms) +from ..builder import build_loss from ..registry import HEADS @@ -25,9 +24,8 @@ class AnchorHead(nn.Module): anchor_base_sizes (Iterable): Anchor base sizes. target_means (Iterable): Mean values of regression targets. target_stds (Iterable): Std values of regression targets. - use_sigmoid_cls (bool): Whether to use sigmoid loss for - classification. (softmax by default) - cls_focal_loss (bool): Whether to use focal loss for classification. + loss_cls (dict): Config of classification loss. + loss_bbox (dict): Config of localization loss. """ # noqa: W605 def __init__(self, @@ -40,8 +38,12 @@ class AnchorHead(nn.Module): anchor_base_sizes=None, target_means=(.0, .0, .0, .0), target_stds=(1.0, 1.0, 1.0, 1.0), - use_sigmoid_cls=False, - cls_focal_loss=False): + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)): super(AnchorHead, self).__init__() self.in_channels = in_channels self.num_classes = num_classes @@ -53,8 +55,15 @@ class AnchorHead(nn.Module): anchor_strides) if anchor_base_sizes is None else anchor_base_sizes self.target_means = target_means self.target_stds = target_stds - self.use_sigmoid_cls = use_sigmoid_cls - self.cls_focal_loss = cls_focal_loss + + self.use_sigmoid_cls = loss_cls.get('use_sigmoid', False) + self.sampling = loss_cls['type'] not in ['FocalLoss'] + if self.use_sigmoid_cls: + self.cls_out_channels = num_classes - 1 + else: + self.cls_out_channels = num_classes + self.loss_cls = build_loss(loss_cls) + self.loss_bbox = build_loss(loss_bbox) self.anchor_generators = [] for anchor_base in self.anchor_base_sizes: @@ -62,11 +71,6 @@ class AnchorHead(nn.Module): AnchorGenerator(anchor_base, anchor_scales, anchor_ratios)) self.num_anchors = len(self.anchor_ratios) * len(self.anchor_scales) - if self.use_sigmoid_cls: - self.cls_out_channels = self.num_classes - 1 - else: - self.cls_out_channels = self.num_classes - self._init_layers() def _init_layers(self): @@ -130,40 +134,20 @@ class AnchorHead(nn.Module): # classification loss labels = labels.reshape(-1) label_weights = label_weights.reshape(-1) - cls_score = cls_score.permute(0, 2, 3, 1).reshape( - -1, self.cls_out_channels) - if self.use_sigmoid_cls: - if self.cls_focal_loss: - cls_criterion = weighted_sigmoid_focal_loss - else: - cls_criterion = weighted_binary_cross_entropy - else: - if self.cls_focal_loss: - raise NotImplementedError - else: - cls_criterion = weighted_cross_entropy - if self.cls_focal_loss: - loss_cls = cls_criterion( - cls_score, - labels, - label_weights, - gamma=cfg.gamma, - alpha=cfg.alpha, - avg_factor=num_total_samples) - else: - loss_cls = cls_criterion( - cls_score, labels, label_weights, avg_factor=num_total_samples) + cls_score = cls_score.permute(0, 2, 3, + 1).reshape(-1, self.cls_out_channels) + loss_cls = self.loss_cls( + cls_score, labels, label_weights, avg_factor=num_total_samples) # regression loss bbox_targets = bbox_targets.reshape(-1, 4) bbox_weights = bbox_weights.reshape(-1, 4) bbox_pred = bbox_pred.permute(0, 2, 3, 1).reshape(-1, 4) - loss_reg = weighted_smoothl1( + loss_bbox = self.loss_bbox( bbox_pred, bbox_targets, bbox_weights, - beta=cfg.smoothl1_beta, avg_factor=num_total_samples) - return loss_cls, loss_reg + return loss_cls, loss_bbox def loss(self, cls_scores, @@ -178,7 +162,6 @@ class AnchorHead(nn.Module): anchor_list, valid_flag_list = self.get_anchors( featmap_sizes, img_metas) - sampling = False if self.cls_focal_loss else True label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 cls_reg_targets = anchor_target( anchor_list, @@ -191,15 +174,14 @@ class AnchorHead(nn.Module): gt_bboxes_ignore_list=gt_bboxes_ignore, gt_labels_list=gt_labels, label_channels=label_channels, - sampling=sampling) + sampling=self.sampling) if cls_reg_targets is None: return None (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, num_total_pos, num_total_neg) = cls_reg_targets num_total_samples = ( - num_total_pos - if self.cls_focal_loss else num_total_pos + num_total_neg) - losses_cls, losses_reg = multi_apply( + num_total_pos + num_total_neg if self.sampling else num_total_pos) + losses_cls, losses_bbox = multi_apply( self.loss_single, cls_scores, bbox_preds, @@ -209,7 +191,7 @@ class AnchorHead(nn.Module): bbox_weights_list, num_total_samples=num_total_samples, cfg=cfg) - return dict(loss_cls=losses_cls, loss_reg=losses_reg) + return dict(loss_cls=losses_cls, loss_bbox=losses_bbox) def get_bboxes(self, cls_scores, bbox_preds, img_metas, cfg, rescale=False): @@ -251,8 +233,8 @@ class AnchorHead(nn.Module): for cls_score, bbox_pred, anchors in zip(cls_scores, bbox_preds, mlvl_anchors): assert cls_score.size()[-2:] == bbox_pred.size()[-2:] - cls_score = cls_score.permute(1, 2, 0).reshape( - -1, self.cls_out_channels) + cls_score = cls_score.permute(1, 2, + 0).reshape(-1, self.cls_out_channels) if self.use_sigmoid_cls: scores = cls_score.sigmoid() else: @@ -279,6 +261,7 @@ class AnchorHead(nn.Module): if self.use_sigmoid_cls: padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) mlvl_scores = torch.cat([padding, mlvl_scores], dim=1) - det_bboxes, det_labels = multiclass_nms( - mlvl_bboxes, mlvl_scores, cfg.score_thr, cfg.nms, cfg.max_per_img) + det_bboxes, det_labels = multiclass_nms(mlvl_bboxes, mlvl_scores, + cfg.score_thr, cfg.nms, + cfg.max_per_img) return det_bboxes, det_labels diff --git a/mmdet/models/anchor_heads/retina_head.py b/mmdet/models/anchor_heads/retina_head.py index 3eefca4a13744b290832f7c5f3024dd4113112e9..53a5cc9f6b35bdb467d609bbe4aecfcddfea4c26 100644 --- a/mmdet/models/anchor_heads/retina_head.py +++ b/mmdet/models/anchor_heads/retina_head.py @@ -28,12 +28,7 @@ class RetinaHead(AnchorHead): [2**(i / scales_per_octave) for i in range(scales_per_octave)]) anchor_scales = octave_scales * octave_base_scale super(RetinaHead, self).__init__( - num_classes, - in_channels, - anchor_scales=anchor_scales, - use_sigmoid_cls=True, - cls_focal_loss=True, - **kwargs) + num_classes, in_channels, anchor_scales=anchor_scales, **kwargs) def _init_layers(self): self.relu = nn.ReLU(inplace=True) diff --git a/mmdet/models/anchor_heads/rpn_head.py b/mmdet/models/anchor_heads/rpn_head.py index fe9d5c3a4f3dd5f5e49a4d3f3117e3f404f2b477..0a5fd37a5a2f4edc4f42f5e39ebcc748b387851a 100644 --- a/mmdet/models/anchor_heads/rpn_head.py +++ b/mmdet/models/anchor_heads/rpn_head.py @@ -50,7 +50,7 @@ class RPNHead(AnchorHead): cfg, gt_bboxes_ignore=gt_bboxes_ignore) return dict( - loss_rpn_cls=losses['loss_cls'], loss_rpn_reg=losses['loss_reg']) + loss_rpn_cls=losses['loss_cls'], loss_rpn_bbox=losses['loss_bbox']) def get_bboxes_single(self, cls_scores, diff --git a/mmdet/models/anchor_heads/ssd_head.py b/mmdet/models/anchor_heads/ssd_head.py index 9c8b2a11e5592cefc873d22c8ab88c54c3fb127a..92a3e9c5e1d6174b3a32f90b719206780f7dc2f8 100644 --- a/mmdet/models/anchor_heads/ssd_head.py +++ b/mmdet/models/anchor_heads/ssd_head.py @@ -10,6 +10,7 @@ from .anchor_head import AnchorHead from ..registry import HEADS +# TODO: add loss evaluator for SSD @HEADS.register_module class SSDHead(AnchorHead): @@ -122,13 +123,13 @@ class SSDHead(AnchorHead): loss_cls_neg = topk_loss_cls_neg.sum() loss_cls = (loss_cls_pos + loss_cls_neg) / num_total_samples - loss_reg = weighted_smoothl1( + loss_bbox = weighted_smoothl1( bbox_pred, bbox_targets, bbox_weights, beta=cfg.smoothl1_beta, avg_factor=num_total_samples) - return loss_cls[None], loss_reg + return loss_cls[None], loss_bbox def loss(self, cls_scores, @@ -167,18 +168,18 @@ class SSDHead(AnchorHead): num_images, -1, self.cls_out_channels) for s in cls_scores ], 1) all_labels = torch.cat(labels_list, -1).view(num_images, -1) - all_label_weights = torch.cat(label_weights_list, -1).view( - num_images, -1) + all_label_weights = torch.cat(label_weights_list, + -1).view(num_images, -1) all_bbox_preds = torch.cat([ b.permute(0, 2, 3, 1).reshape(num_images, -1, 4) for b in bbox_preds ], -2) - all_bbox_targets = torch.cat(bbox_targets_list, -2).view( - num_images, -1, 4) - all_bbox_weights = torch.cat(bbox_weights_list, -2).view( - num_images, -1, 4) + all_bbox_targets = torch.cat(bbox_targets_list, + -2).view(num_images, -1, 4) + all_bbox_weights = torch.cat(bbox_weights_list, + -2).view(num_images, -1, 4) - losses_cls, losses_reg = multi_apply( + losses_cls, losses_bbox = multi_apply( self.loss_single, all_cls_scores, all_bbox_preds, @@ -188,4 +189,4 @@ class SSDHead(AnchorHead): all_bbox_weights, num_total_samples=num_total_pos, cfg=cfg) - return dict(loss_cls=losses_cls, loss_reg=losses_reg) + return dict(loss_cls=losses_cls, loss_bbox=losses_bbox) diff --git a/mmdet/models/bbox_heads/bbox_head.py b/mmdet/models/bbox_heads/bbox_head.py index 4dcbd97eb3daa344bde38c03d632898cf6197258..d0d98ff9499e13ad8656d8fa4de1dc65a760b860 100644 --- a/mmdet/models/bbox_heads/bbox_head.py +++ b/mmdet/models/bbox_heads/bbox_head.py @@ -2,8 +2,8 @@ import torch import torch.nn as nn import torch.nn.functional as F -from mmdet.core import (delta2bbox, multiclass_nms, bbox_target, - weighted_cross_entropy, weighted_smoothl1, accuracy) +from mmdet.core import delta2bbox, multiclass_nms, bbox_target, accuracy +from ..builder import build_loss from ..registry import HEADS @@ -21,7 +21,13 @@ class BBoxHead(nn.Module): num_classes=81, target_means=[0., 0., 0., 0.], target_stds=[0.1, 0.1, 0.2, 0.2], - reg_class_agnostic=False): + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', beta=1.0, loss_weight=1.0)): super(BBoxHead, self).__init__() assert with_cls or with_reg self.with_avg_pool = with_avg_pool @@ -34,6 +40,9 @@ class BBoxHead(nn.Module): self.target_stds = target_stds self.reg_class_agnostic = reg_class_agnostic + self.loss_cls = build_loss(loss_cls) + self.loss_bbox = build_loss(loss_bbox) + in_channels = self.in_channels if self.with_avg_pool: self.avg_pool = nn.AvgPool2d(roi_feat_size) @@ -90,7 +99,7 @@ class BBoxHead(nn.Module): reduce=True): losses = dict() if cls_score is not None: - losses['loss_cls'] = weighted_cross_entropy( + losses['loss_cls'] = self.loss_cls( cls_score, labels, label_weights, reduce=reduce) losses['acc'] = accuracy(cls_score, labels) if bbox_pred is not None: @@ -100,7 +109,7 @@ class BBoxHead(nn.Module): else: pos_bbox_pred = bbox_pred.view(bbox_pred.size(0), -1, 4)[pos_inds, labels[pos_inds]] - losses['loss_reg'] = weighted_smoothl1( + losses['loss_bbox'] = self.loss_bbox( pos_bbox_pred, bbox_targets[pos_inds], bbox_weights[pos_inds], @@ -132,8 +141,9 @@ class BBoxHead(nn.Module): if cfg is None: return bboxes, scores else: - det_bboxes, det_labels = multiclass_nms( - bboxes, scores, cfg.score_thr, cfg.nms, cfg.max_per_img) + det_bboxes, det_labels = multiclass_nms(bboxes, scores, + cfg.score_thr, cfg.nms, + cfg.max_per_img) return det_bboxes, det_labels diff --git a/mmdet/models/bbox_heads/convfc_bbox_head.py b/mmdet/models/bbox_heads/convfc_bbox_head.py index 2ce687ed07b7c0b66c4b96b796d26ab8c4ec95aa..470c511f6bd8729a1af9e97454bc62d446c3c4b2 100644 --- a/mmdet/models/bbox_heads/convfc_bbox_head.py +++ b/mmdet/models/bbox_heads/convfc_bbox_head.py @@ -29,8 +29,8 @@ class ConvFCBBoxHead(BBoxHead): *args, **kwargs): super(ConvFCBBoxHead, self).__init__(*args, **kwargs) - assert (num_shared_convs + num_shared_fcs + num_cls_convs + num_cls_fcs - + num_reg_convs + num_reg_fcs > 0) + assert (num_shared_convs + num_shared_fcs + num_cls_convs + + num_cls_fcs + num_reg_convs + num_reg_fcs > 0) if num_cls_convs > 0 or num_reg_convs > 0: assert num_shared_fcs == 0 if not self.with_cls: @@ -76,8 +76,8 @@ class ConvFCBBoxHead(BBoxHead): if self.with_cls: self.fc_cls = nn.Linear(self.cls_last_dim, self.num_classes) if self.with_reg: - out_dim_reg = (4 if self.reg_class_agnostic else - 4 * self.num_classes) + out_dim_reg = (4 if self.reg_class_agnostic else 4 * + self.num_classes) self.fc_reg = nn.Linear(self.reg_last_dim, out_dim_reg) def _add_conv_fc_branch(self, diff --git a/mmdet/models/builder.py b/mmdet/models/builder.py index 3de186ca64509b93a814ebec420c70b41cfd8c90..93cdb192ac08e1b90202c6a857a71dd35a51a11f 100644 --- a/mmdet/models/builder.py +++ b/mmdet/models/builder.py @@ -2,7 +2,7 @@ import mmcv from torch import nn from .registry import (BACKBONES, NECKS, ROI_EXTRACTORS, SHARED_HEADS, HEADS, - DETECTORS) + LOSSES, DETECTORS) def _build_module(cfg, registry, default_args): @@ -52,5 +52,9 @@ def build_head(cfg): return build(cfg, HEADS) +def build_loss(cfg): + return build(cfg, LOSSES) + + def build_detector(cfg, train_cfg=None, test_cfg=None): return build(cfg, DETECTORS, dict(train_cfg=train_cfg, test_cfg=test_cfg)) diff --git a/mmdet/models/losses/__init__.py b/mmdet/models/losses/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..efe40eae3e395731656e933648b5ea14e8c6efb4 --- /dev/null +++ b/mmdet/models/losses/__init__.py @@ -0,0 +1,5 @@ +from .cross_entropy_loss import CrossEntropyLoss +from .focal_loss import FocalLoss +from .smooth_l1_loss import SmoothL1Loss + +__all__ = ['CrossEntropyLoss', 'FocalLoss', 'SmoothL1Loss'] diff --git a/mmdet/models/losses/cross_entropy_loss.py b/mmdet/models/losses/cross_entropy_loss.py new file mode 100644 index 0000000000000000000000000000000000000000..19539873c748536267b52d4c49156b299a9aad3e --- /dev/null +++ b/mmdet/models/losses/cross_entropy_loss.py @@ -0,0 +1,28 @@ +import torch.nn as nn +from mmdet.core import (weighted_cross_entropy, weighted_binary_cross_entropy, + mask_cross_entropy) + +from ..registry import LOSSES + + +@LOSSES.register_module +class CrossEntropyLoss(nn.Module): + + def __init__(self, use_sigmoid=False, use_mask=False, loss_weight=1.0): + super(CrossEntropyLoss, self).__init__() + assert (use_sigmoid is False) or (use_mask is False) + self.use_sigmoid = use_sigmoid + self.use_mask = use_mask + self.loss_weight = loss_weight + + if self.use_sigmoid: + self.cls_criterion = weighted_binary_cross_entropy + elif self.use_mask: + self.cls_criterion = mask_cross_entropy + else: + self.cls_criterion = weighted_cross_entropy + + def forward(self, cls_score, label, label_weight, *args, **kwargs): + loss_cls = self.loss_weight * self.cls_criterion( + cls_score, label, label_weight, *args, **kwargs) + return loss_cls diff --git a/mmdet/models/losses/focal_loss.py b/mmdet/models/losses/focal_loss.py new file mode 100644 index 0000000000000000000000000000000000000000..57b28b04339d8ce5807f37622f106df6456a6e48 --- /dev/null +++ b/mmdet/models/losses/focal_loss.py @@ -0,0 +1,35 @@ +import torch.nn as nn +from mmdet.core import weighted_sigmoid_focal_loss + +from ..registry import LOSSES + + +@LOSSES.register_module +class FocalLoss(nn.Module): + + def __init__(self, + use_sigmoid=False, + loss_weight=1.0, + gamma=2.0, + alpha=0.25): + super(FocalLoss, self).__init__() + assert use_sigmoid is True, 'Only sigmoid focaloss supported now.' + self.use_sigmoid = use_sigmoid + self.loss_weight = loss_weight + self.gamma = gamma + self.alpha = alpha + self.cls_criterion = weighted_sigmoid_focal_loss + + def forward(self, cls_score, label, label_weight, *args, **kwargs): + if self.use_sigmoid: + loss_cls = self.loss_weight * self.cls_criterion( + cls_score, + label, + label_weight, + gamma=self.gamma, + alpha=self.alpha, + *args, + **kwargs) + else: + raise NotImplementedError + return loss_cls diff --git a/mmdet/models/losses/smooth_l1_loss.py b/mmdet/models/losses/smooth_l1_loss.py new file mode 100644 index 0000000000000000000000000000000000000000..7c11aa50f1e72d448a5838eb3d65a892dda56f67 --- /dev/null +++ b/mmdet/models/losses/smooth_l1_loss.py @@ -0,0 +1,18 @@ +import torch.nn as nn +from mmdet.core import weighted_smoothl1 + +from ..registry import LOSSES + + +@LOSSES.register_module +class SmoothL1Loss(nn.Module): + + def __init__(self, beta=1.0, loss_weight=1.0): + super(SmoothL1Loss, self).__init__() + self.beta = beta + self.loss_weight = loss_weight + + def forward(self, pred, target, weight, *args, **kwargs): + loss_bbox = self.loss_weight * weighted_smoothl1( + pred, target, weight, beta=self.beta, *args, **kwargs) + return loss_bbox diff --git a/mmdet/models/mask_heads/fcn_mask_head.py b/mmdet/models/mask_heads/fcn_mask_head.py index 0a5054c7a0ed38ffde90e8d1ff6c2d3e1810f257..2136fff8897b74045514e3514d04ddf2cdb9aa7d 100644 --- a/mmdet/models/mask_heads/fcn_mask_head.py +++ b/mmdet/models/mask_heads/fcn_mask_head.py @@ -4,9 +4,10 @@ import pycocotools.mask as mask_util import torch import torch.nn as nn +from ..builder import build_loss from ..registry import HEADS from ..utils import ConvModule -from mmdet.core import mask_cross_entropy, mask_target +from mmdet.core import mask_target @HEADS.register_module @@ -23,7 +24,9 @@ class FCNMaskHead(nn.Module): num_classes=81, class_agnostic=False, conv_cfg=None, - norm_cfg=None): + norm_cfg=None, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)): super(FCNMaskHead, self).__init__() if upsample_method not in [None, 'deconv', 'nearest', 'bilinear']: raise ValueError( @@ -40,6 +43,7 @@ class FCNMaskHead(nn.Module): self.class_agnostic = class_agnostic self.conv_cfg = conv_cfg self.norm_cfg = norm_cfg + self.loss_mask = build_loss(loss_mask) self.convs = nn.ModuleList() for i in range(self.num_convs): @@ -106,10 +110,10 @@ class FCNMaskHead(nn.Module): def loss(self, mask_pred, mask_targets, labels): loss = dict() if self.class_agnostic: - loss_mask = mask_cross_entropy(mask_pred, mask_targets, - torch.zeros_like(labels)) + loss_mask = self.loss_mask(mask_pred, mask_targets, + torch.zeros_like(labels)) else: - loss_mask = mask_cross_entropy(mask_pred, mask_targets, labels) + loss_mask = self.loss_mask(mask_pred, mask_targets, labels) loss['loss_mask'] = loss_mask return loss diff --git a/mmdet/models/registry.py b/mmdet/models/registry.py index d5f8e67cfe96af410169af7295ff26ab88498179..533fdf8984daa46b746743b45f59921daf34c1de 100644 --- a/mmdet/models/registry.py +++ b/mmdet/models/registry.py @@ -41,4 +41,5 @@ NECKS = Registry('neck') ROI_EXTRACTORS = Registry('roi_extractor') SHARED_HEADS = Registry('shared_head') HEADS = Registry('head') +LOSSES = Registry('loss') DETECTORS = Registry('detector') diff --git a/setup.py b/setup.py index b79eb4d26cad812cdabff4cc3a53e200ddc802a3..6a87520797815fd2a59c37c2a6d7aa2250599d89 100644 --- a/setup.py +++ b/setup.py @@ -102,7 +102,7 @@ if __name__ == '__main__': 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', ], - license='GPLv3', + license='Apache License 2.0', setup_requires=['pytest-runner'], tests_require=['pytest'], install_requires=[