def _distribute_rois_over_fpn_levels(rois_blob_name): """Distribute rois over the different FPN levels.""" # Get target level for each roi # Recall blob rois are in (batch_idx, x1, y1, x2, y2) format, hence take # the box coordinates from columns 1:5 rois_blob_name_copy = rois_blob_name if rois_blob_name == 'rois_hg': rois_blob_name_copy = 'rois' if rois_blob_name == 'mask_rois': target_lvls = fpn.map_mask_rois_to_fpn_levels( blobs[rois_blob_name_copy][:, 1:5], lvl_min, lvl_max) else: target_lvls = fpn.map_rois_to_fpn_levels( blobs[rois_blob_name_copy][:, 1:5], lvl_min, lvl_max) # Add per FPN level roi blobs named like: <rois_blob_name>_fpn<lvl> fpn.add_multilevel_roi_blobs(blobs, rois_blob_name, blobs[rois_blob_name], target_lvls, lvl_min, lvl_max)
def _add_multilevel_rois_for_test(blobs, name): """Distributes a set of RoIs across FPN pyramid levels by creating new level specific RoI blobs. Arguments: blobs (dict): dictionary of blobs name (str): a key in 'blobs' identifying the source RoI blob Returns: [by ref] blobs (dict): new keys named by `name + 'fpn' + level` are added to dict each with a value that's an R_level x 5 ndarray of RoIs (see _get_rois_blob for format) """ lvl_min = cfg.FPN.ROI_MIN_LEVEL lvl_max = cfg.FPN.ROI_MAX_LEVEL if name == 'mask_rois': lvls = fpn.map_mask_rois_to_fpn_levels(blobs[name][:, 1:5], lvl_min, lvl_max) else: lvls = fpn.map_rois_to_fpn_levels(blobs[name][:, 1:5], lvl_min, lvl_max) fpn.add_multilevel_roi_blobs(blobs, name, blobs[name], lvls, lvl_min, lvl_max)