예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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