123456789101112131415161718192021222324252627282930313233343536373839404142 |
- # --------------------------------------------------------
- # Faster R-CNN
- # Licensed under The MIT License [see LICENSE for details]
- # Written by Xinlei Chen
- # --------------------------------------------------------
- from __future__ import absolute_import
- from __future__ import division
- from __future__ import print_function
- from segment.sheet_resolve.lib.model.config import cfg
- from segment.sheet_resolve.lib.model.bbox_transform import bbox_transform_inv, clip_boxes, bbox_transform_inv_tf, clip_boxes_tf
- import tensorflow as tf
- def proposal_top_layer(rpn_cls_prob, rpn_bbox_pred, im_info, _feat_stride, anchors, num_anchors):
- """A layer that just selects the top region proposals
- without using non-maximal suppression,
- For details please see the technical report
- """
- rpn_top_n = cfg.TEST.RPN_TOP_N
- scores = rpn_cls_prob[:, :, :, num_anchors:]
- rpn_bbox_pred = tf.reshape(rpn_bbox_pred, shape=(-1, 4))
- scores = tf.reshape(scores, shape=(-1,))
- # Do the selection here
- top_scores, top_inds = tf.nn.top_k(scores, k=rpn_top_n)
- top_scores = tf.reshape(top_scores, shape=(-1, 1))
- top_anchors = tf.gather(anchors, top_inds)
- top_rpn_bbox = tf.gather(rpn_bbox_pred, top_inds)
- proposals = bbox_transform_inv_tf(top_anchors, top_rpn_bbox)
- # Clip predicted boxes to image
- proposals = clip_boxes_tf(proposals, im_info[:2])
- # Output rois blob
- # Our RPN implementation only supports a single input image, so all
- # batch inds are 0
- proposals = tf.to_float(proposals)
- batch_inds = tf.zeros((rpn_top_n, 1))
- blob = tf.concat([batch_inds, proposals], 1)
- return blob, top_scores
|