def get_roi_feature(self, conv_fpn_feat, rois, trans, image_rois, batch_image): p = self.p rcnn_stride = p.stride roi_canonical_scale = p.roi_canonical_scale roi_canonical_level = p.roi_canonical_level _trans = mx.sym.reshape(trans, [-1, image_rois, 2]) roi_group, offset_group = fpn_roi_assign_offset( mx.symbol, rois, _trans, rcnn_stride, roi_canonical_scale, roi_canonical_level) rois_fpn = dict() offset_fpn = dict() for i, stride in enumerate(rcnn_stride): rois_fpn["stride%s" % stride] = mx.sym.reshape( roi_group[i], [-1, 4]) offset_fpn["stride%s" % stride] = mx.sym.tile( mx.sym.reshape(offset_group[i], [-1, 2, 1, 1]), (1, 1, p.out_size, p.out_size)) if p.fp16: for stride in rcnn_stride: conv_fpn_feat["stride%s" % stride] = X.to_fp32( conv_fpn_feat["stride%s" % stride], name="fpn_stride%s_to_fp32") batch_pad = mx.sym.reshape( mx.sym.repeat(mx.sym.arange(batch_image), repeats=image_rois, axis=0), [-1, 1]) fpn_roi_feats = list() for stride in rcnn_stride: feat_lvl = conv_fpn_feat["stride%s" % stride] rois_lvl = rois_fpn["stride%s" % stride] offset_lvl = offset_fpn["stride%s" % stride] rois_lvl = mx.sym.concat(batch_pad, rois_lvl, dim=1) roi_feat = mx.sym.contrib.DeformablePSROIPooling( data=feat_lvl, rois=rois_lvl, trans=offset_lvl, spatial_scale=1. / stride, output_dim=256, group_size=1, pooled_size=p.out_size, part_size=0, sample_per_part=4, trans_std=0.1, no_trans=False, name='delta_r_pooled_feat_stride%s' % stride) fpn_roi_feats.append(roi_feat) roi_feat = X.add_n(*fpn_roi_feats) if p.fp16: roi_feat = X.to_fp16(roi_feat, name="delta_r_roi_feat_to_fp16") return roi_feat
def get_roi_feature(self, conv_fpn_feat, proposal): p = self.p rcnn_stride = p.stride roi_canonical_scale = p.roi_canonical_scale roi_canonical_level = p.roi_canonical_level group = mx.symbol.Custom( op_type="assign_layer_fpn", rois=proposal, rcnn_stride=rcnn_stride, roi_canonical_scale=roi_canonical_scale, roi_canonical_level=roi_canonical_level, name="assign_layer_fpn" ) proposal_fpn = dict() for i, stride in enumerate(rcnn_stride): proposal_fpn["stride%s" % stride] = group[i] if p.fp16: for stride in rcnn_stride: conv_fpn_feat["stride%s" % stride] = X.to_fp32( conv_fpn_feat["stride%s" % stride], name="fpn_stride%s_to_fp32" ) fpn_roi_feats = list() for stride in rcnn_stride: feat_lvl = conv_fpn_feat["stride%s" % stride] proposal_lvl = proposal_fpn["stride%s" % stride] roi_feat = X.roi_align( feat_lvl, rois=proposal_lvl, out_size=p.out_size, stride=stride, name="roi_align" ) roi_feat = X.reshape( data=roi_feat, shape=(-3, -2), name='roi_feat_reshape' ) fpn_roi_feats.append(roi_feat) roi_feat = X.add_n(*fpn_roi_feats) if p.fp16: roi_feat = X.to_fp16(roi_feat, name="roi_feat_to_fp16") return roi_feat
def get_roi_feature(self, conv_fpn_feat, proposal): p = self.p rcnn_stride = p.stride group = mx.symbol.Custom(rois=proposal, op_type='assign_layer_fpn') proposal_fpn = dict() proposal_fpn["stride4"] = group[1] proposal_fpn["stride8"] = group[2] proposal_fpn["stride16"] = group[3] proposal_fpn["stride32"] = group[4] if p.fp16: for stride in rcnn_stride: conv_fpn_feat["stride%s" % stride] = X.to_fp32( conv_fpn_feat["stride%s" % stride], name="fpn_stride%s_to_fp32") fpn_roi_feats = list() for stride in rcnn_stride: feat_lvl = conv_fpn_feat["stride%s" % stride] proposal_lvl = proposal_fpn["stride%s" % stride] roi_feat = X.roi_align(feat_lvl, rois=proposal_lvl, out_size=p.out_size, stride=stride, name="roi_align") roi_feat = X.reshape(data=roi_feat, shape=(-3, -2), name='roi_feat_reshape') fpn_roi_feats.append(roi_feat) roi_feat = X.add_n(*fpn_roi_feats) if p.fp16: roi_feat = X.to_fp16(roi_feat, name="roi_feat_to_fp16") return roi_feat