Skip to content

Commit

Permalink
[dev] rbox update2 (PaddlePaddle#3828)
Browse files Browse the repository at this point in the history
* set lr for 4 card as default, and update
  • Loading branch information
cnn authored Jul 30, 2021
1 parent 25d4a85 commit 2d21d90
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 63 deletions.
2 changes: 1 addition & 1 deletion configs/dota/_base_/s2anet_optimizer_1x.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
epoch: 12

LearningRate:
base_lr: 0.01
base_lr: 0.005
schedulers:
- !PiecewiseDecay
gamma: 0.1
Expand Down
7 changes: 3 additions & 4 deletions configs/dota/s2anet_1x_spine.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ _BASE_: [

weights: output/s2anet_1x_spine/model_final

# for 8 card
# for 4 card
LearningRate:
base_lr: 0.01
base_lr: 0.005

S2ANetHead:
anchor_strides: [8, 16, 32, 64, 128]
Expand All @@ -26,5 +26,4 @@ S2ANetHead:
use_sigmoid_cls: True
reg_loss_weight: [1.0, 1.0, 1.0, 1.0, 1.05]
cls_loss_weight: [1.05, 1.0]
reg_loss_type: gwd
use_paddle_anchor: False
reg_loss_type: 'l1'
2 changes: 1 addition & 1 deletion configs/dota/s2anet_alignconv_2x_dota.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ S2ANetHead:
use_sigmoid_cls: True
reg_loss_weight: [1.0, 1.0, 1.0, 1.0, 1.05]
cls_loss_weight: [1.05, 1.0]
#reg_loss_type: 'l1' # 'l1' 'gwd'
reg_loss_type: 'l1'
5 changes: 0 additions & 5 deletions ppdet/engine/export_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,5 @@ def _dump_infer_config(config, path, image_shape, model):
infer_cfg['Preprocess'], infer_cfg['label_list'] = _parse_reader(
reader_cfg, dataset_cfg, config['metric'], label_arch, image_shape)

if infer_arch == 'S2ANet':
# TODO: move background to num_classes
if infer_cfg['label_list'][0] != 'background':
infer_cfg['label_list'].insert(0, 'background')

yaml.dump(infer_cfg, open(path, 'w'))
logger.info("Export inference config file to {}".format(os.path.join(path)))
105 changes: 54 additions & 51 deletions ppdet/modeling/heads/s2anet_head.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def gen_base_anchors(self):
return base_anchors

def _meshgrid(self, x, y, row_major=True):
yy, xx = paddle.meshgrid(x, y)
yy, xx = paddle.meshgrid(y, x)
yy = yy.reshape([-1])
xx = xx.reshape([-1])
if row_major:
Expand Down Expand Up @@ -264,7 +264,7 @@ def __init__(self,
for anchor_base in self.anchor_base_sizes:
self.anchor_generators.append(
S2ANetAnchorGenerator(anchor_base, anchor_scales,
anchor_ratios))
anchor_ratios))

self.anchor_generators = nn.LayerList(self.anchor_generators)
self.fam_cls_convs = nn.Sequential()
Expand Down Expand Up @@ -551,42 +551,42 @@ def get_fam_loss(self, fam_target, s2anet_head_out, reg_loss_type='gwd'):
fam_cls_score1 = fam_cls_score

feat_labels = paddle.to_tensor(feat_labels)
feat_labels_one_hot = paddle.nn.functional.one_hot(
feat_labels, self.cls_out_channels + 1)
feat_labels_one_hot = feat_labels_one_hot[:, 1:]
feat_labels_one_hot.stop_gradient = True

num_total_samples = paddle.to_tensor(
num_total_samples, dtype='float32', stop_gradient=True)

fam_cls = F.sigmoid_focal_loss(
fam_cls_score1,
feat_labels_one_hot,
normalizer=num_total_samples,
reduction='none')

feat_label_weights = feat_label_weights.reshape(
feat_label_weights.shape[0], 1)
feat_label_weights = np.repeat(
feat_label_weights, self.cls_out_channels, axis=1)
feat_label_weights = paddle.to_tensor(
feat_label_weights, stop_gradient=True)

fam_cls = fam_cls * feat_label_weights
fam_cls_total = paddle.sum(fam_cls)
if (feat_labels >= 0).astype(paddle.int32).sum() > 0:
feat_labels_one_hot = paddle.nn.functional.one_hot(
feat_labels, self.cls_out_channels + 1)
feat_labels_one_hot = feat_labels_one_hot[:, 1:]
feat_labels_one_hot.stop_gradient = True

num_total_samples = paddle.to_tensor(
num_total_samples, dtype='float32', stop_gradient=True)

fam_cls = F.sigmoid_focal_loss(
fam_cls_score1,
feat_labels_one_hot,
normalizer=num_total_samples,
reduction='none')

feat_label_weights = feat_label_weights.reshape(
feat_label_weights.shape[0], 1)
feat_label_weights = np.repeat(
feat_label_weights, self.cls_out_channels, axis=1)
feat_label_weights = paddle.to_tensor(
feat_label_weights, stop_gradient=True)

fam_cls = fam_cls * feat_label_weights
fam_cls_total = paddle.sum(fam_cls)
else:
fam_cls_total = paddle.zeros([0], dtype=fam_cls_score1.dtype)
fam_cls_losses.append(fam_cls_total)

# step3: regression loss
fam_bbox_pred = fam_reg_branch_list[idx]
feat_bbox_targets = paddle.to_tensor(
feat_bbox_targets, dtype='float32', stop_gradient=True)
feat_bbox_targets = paddle.reshape(feat_bbox_targets, [-1, 5])

fam_bbox_pred = fam_reg_branch_list[idx]
fam_bbox_pred = paddle.squeeze(fam_bbox_pred, axis=0)
fam_bbox_pred = paddle.reshape(fam_bbox_pred, [-1, 5])
fam_bbox = self.smooth_l1_loss(fam_bbox_pred, feat_bbox_targets)

fam_bbox = self.smooth_l1_loss(fam_bbox_pred, feat_bbox_targets)
loss_weight = paddle.to_tensor(
self.reg_loss_weight, dtype='float32', stop_gradient=True)
Expand Down Expand Up @@ -673,28 +673,31 @@ def get_odm_loss(self, odm_target, s2anet_head_out, reg_loss_type='gwd'):
odm_cls_score1 = odm_cls_score

feat_labels = paddle.to_tensor(feat_labels)
feat_labels_one_hot = paddle.nn.functional.one_hot(
feat_labels, self.cls_out_channels + 1)
feat_labels_one_hot = feat_labels_one_hot[:, 1:]
feat_labels_one_hot.stop_gradient = True

num_total_samples = paddle.to_tensor(
num_total_samples, dtype='float32', stop_gradient=True)
odm_cls = F.sigmoid_focal_loss(
odm_cls_score1,
feat_labels_one_hot,
normalizer=num_total_samples,
reduction='none')

feat_label_weights = feat_label_weights.reshape(
feat_label_weights.shape[0], 1)
feat_label_weights = np.repeat(
feat_label_weights, self.cls_out_channels, axis=1)
feat_label_weights = paddle.to_tensor(feat_label_weights)
feat_label_weights.stop_gradient = True

odm_cls = odm_cls * feat_label_weights
odm_cls_total = paddle.sum(odm_cls)
if (feat_labels >= 0).astype(paddle.int32).sum() > 0:
feat_labels_one_hot = paddle.nn.functional.one_hot(
feat_labels, self.cls_out_channels + 1)
feat_labels_one_hot = feat_labels_one_hot[:, 1:]
feat_labels_one_hot.stop_gradient = True

num_total_samples = paddle.to_tensor(
num_total_samples, dtype='float32', stop_gradient=True)
odm_cls = F.sigmoid_focal_loss(
odm_cls_score1,
feat_labels_one_hot,
normalizer=num_total_samples,
reduction='none')

feat_label_weights = feat_label_weights.reshape(
feat_label_weights.shape[0], 1)
feat_label_weights = np.repeat(
feat_label_weights, self.cls_out_channels, axis=1)
feat_label_weights = paddle.to_tensor(feat_label_weights)
feat_label_weights.stop_gradient = True

odm_cls = odm_cls * feat_label_weights
odm_cls_total = paddle.sum(odm_cls)
else:
odm_cls_total = paddle.zeros([0], dtype=odm_cls_score1.dtype)
odm_cls_losses.append(odm_cls_total)

# # step3: regression loss
Expand Down Expand Up @@ -846,7 +849,7 @@ def get_bboxes(self, cls_score_list, bbox_pred_list, mlvl_anchors, nms_pre,
bbox_pred = paddle.reshape(bbox_pred, [-1, 5])
anchors = paddle.reshape(anchors, [-1, 5])

if nms_pre > 0 and scores.shape[0] > nms_pre:
if scores.shape[0] > nms_pre:
# Get maximum scores for foreground classes.
if use_sigmoid_cls:
max_scores = paddle.max(scores, axis=1)
Expand Down
2 changes: 1 addition & 1 deletion ppdet/modeling/post_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ class S2ANetBBoxPostProcess(nn.Layer):
def __init__(self, num_classes=15, nms_pre=2000, min_bbox_size=0, nms=None):
super(S2ANetBBoxPostProcess, self).__init__()
self.num_classes = num_classes
self.nms_pre = nms_pre
self.nms_pre = paddle.to_tensor(nms_pre)
self.min_bbox_size = min_bbox_size
self.nms = nms
self.origin_shape_list = []
Expand Down

0 comments on commit 2d21d90

Please sign in to comment.