def __init__(self, *args, anchor_angles=[ 0., ], bbox_coder=dict(type='DeltaXYWHABBoxCoder', target_means=(.0, .0, .0, .0, .0), target_stds=(1.0, 1.0, 1.0, 1.0, 1.0)), **kargs): super(AnchorHeadRotated, self).__init__(*args, **kargs) self.anchor_angles = anchor_angles self.reg_decoded_bbox = False self.use_vfl = True self.bbox_coder = build_bbox_coder(bbox_coder) self.anchor_generators = [] for anchor_base in self.anchor_base_sizes: self.anchor_generators.append( AnchorGeneratorRotated(anchor_base, self.anchor_scales, self.anchor_ratios, angles=anchor_angles)) self.num_anchors = len(self.anchor_ratios) * \ len(self.anchor_scales) * len(self.anchor_angles) self._init_layers()
def __init__(self, num_classes, in_channels, feat_channels=256, stacked_convs=2, with_align=True, anchor_scales=[4], anchor_ratios=[1.0], anchor_strides=[8, 16, 32, 64, 128], anchor_base_sizes=None, target_means=(.0, .0, .0, .0, .0), target_stds=(1.0, 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=1.0 / 9.0, loss_weight=1.0)): super(CascadeS2ANetHead, self).__init__() self.num_classes = num_classes self.in_channels = in_channels self.feat_channels = feat_channels self.stacked_convs = stacked_convs self.with_align = with_align self.anchor_scales = anchor_scales self.anchor_ratios = anchor_ratios self.anchor_strides = anchor_strides self.anchor_base_sizes = list( 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 = loss_cls.get('use_sigmoid', False) self.sampling = loss_cls['type'] not in ['FocalLoss', 'GHMC'] if self.use_sigmoid_cls: self.cls_out_channels = num_classes - 1 else: self.cls_out_channels = num_classes if self.cls_out_channels <= 0: raise ValueError('num_classes={} is too small'.format(num_classes)) self.loss_cls = build_loss(loss_cls) self.loss_bbox = build_loss(loss_bbox) self.fp16_enabled = False self.anchor_generators = [] for anchor_base in self.anchor_base_sizes: self.anchor_generators.append( AnchorGeneratorRotated(anchor_base, anchor_scales, anchor_ratios)) self._init_layers()
def __init__(self, *args, anchor_angles=[ 0., ], **kargs): super(AnchorHeadRotated, self).__init__(*args, **kargs) self.anchor_angles = anchor_angles self.anchor_generators = [] for anchor_base in self.anchor_base_sizes: self.anchor_generators.append( AnchorGeneratorRotated(anchor_base, self.anchor_scales, self.anchor_ratios, angles=anchor_angles)) self.num_anchors = len(self.anchor_ratios) * \ len(self.anchor_scales) * len(self.anchor_angles) self._init_layers()
def __init__(self, num_classes, in_channels, feat_channels=256, stacked_convs=2, with_orconv=True, reg_decoded_bbox=False, use_vfl=False, bbox_coder=dict(type='DeltaXYWHABBoxCoder', target_means=(0., 0., 0., 0., 0.), target_stds=(1., 1., 1., 1., 1.), clip_border=True), iou_calculator=dict(type='BboxOverlaps2D_rotated'), anchor_scales=[4], anchor_ratios=[1.0], anchor_strides=[8, 16, 32, 64, 128], anchor_base_sizes=None, target_means=(.0, .0, .0, .0, .0), target_stds=(1.0, 1.0, 1.0, 1.0, 1.0), loss_fam_cls=dict( type='FocalLoss', use_sigmoid=True, gamma=2.0, alpha=0.25, loss_weight=1.0), loss_fam_bbox=dict( type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0), loss_odm_cls=dict( type='FocalLoss', use_sigmoid=True, gamma=2.0, alpha=0.25, loss_weight=1.0), loss_odm_bbox=dict( type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)): super(S2ANetHead, self).__init__() self.num_classes = num_classes self.in_channels = in_channels self.feat_channels = feat_channels self.stacked_convs = stacked_convs self.with_orconv = with_orconv self.anchor_scales = anchor_scales self.anchor_ratios = anchor_ratios self.anchor_strides = anchor_strides self.anchor_base_sizes = list( 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 = loss_odm_cls.get('use_sigmoid', False) self.sampling = loss_odm_cls['type'] not in ['FocalLoss', 'GHMC', 'VarifocalLoss'] if self.use_sigmoid_cls: self.cls_out_channels = num_classes - 1 else: self.cls_out_channels = num_classes if self.cls_out_channels <= 0: raise ValueError('num_classes={} is too small'.format(num_classes)) self.loss_fam_cls = build_loss(loss_fam_cls) self.loss_fam_bbox = build_loss(loss_fam_bbox) self.loss_odm_cls = build_loss(loss_odm_cls) self.loss_odm_bbox = build_loss(loss_odm_bbox) self.fp16_enabled = False self.reg_decoded_bbox = reg_decoded_bbox self.use_vfl = use_vfl self.iou_calculator = build_iou_calculator(iou_calculator) self.bbox_coder = build_bbox_coder(bbox_coder) self.anchor_generators = [] for anchor_base in self.anchor_base_sizes: self.anchor_generators.append( AnchorGeneratorRotated(anchor_base, anchor_scales, anchor_ratios)) # training mode self.training = True # anchor cache self.base_anchors = dict() self._init_layers()