class_docstr: Create final object detection proposals.
  
  RCNNProposals takes the proposals generated by the RPN and the predictions
  of the RCNN (both classification and boundin box adjusting) and generates
  a list of object proposals with assigned class.
  
  In the process it tries to remove duplicated suggestions by applying non
  maximum suppresion (NMS).
  
  We apply NMS because the way object detectors are usually scored is by
  treating duplicated detections (multiple detections that overlap the same
  ground truth value) as false positive. It is resonable to assume that there
  may exist such case that applying NMS is completly unnecesary.
  
  Besides applying NMS it also filters the top N results, both for classes
  and in general. These values are easily modifiable in the configuration
  files.
class_docstr_tok: ["Create","final","object","detection","proposals",".","RCNNProposals","takes","the","proposals","generated","by","the","RPN","and","the","predictions","of","the","RCNN","(","both","classification","and","boundin","box","adjusting",")","and","generates","a","list","of","object","proposals","with","assigned","class",".","In","the","process","it","tries","to","remove","duplicated","suggestions","by","applying","non","maximum","suppresion","(","NMS",")",".","We","apply","NMS","because","the","way","object","detectors","are","usually","scored","is","by","treating","duplicated","detections","(","multiple","detections","that","overlap","the","same","ground","truth","value",")","as","false","positive",".","It","is","resonable","to","assume","that","there","may","exist","such","case","that","applying","NMS","is","completly","unnecesary",".","Besides","applying","NMS","it","also","filters","the","top","N","results",",","both","for","classes","and","in","general",".","These","values","are","easily","modifiable","in","the","configuration","files","."]
docstr: Args:
      num_classes: Total number of classes RCNN is classifying.
      config: Configuration object.
docstr_tok: ["Args",":","num_classes",":","Total","number","of","classes","RCNN","is","classifying",".","config",":","Configuration","object","."]
code: def __init__(
      self, num_classes, config, variances=None, name="rcnn_proposal"
  ):
      """
      Args:
          num_classes: Total number of classes RCNN is classifying.
          config: Configuration object.
      """
      super(RCNNProposal, self).__init__(name=name)
      self._num_classes = num_classes
      self._variances = variances
  
      # Max number of object detections per class.
      self._class_max_detections = config.class_max_detections
      # NMS intersection over union threshold to be used for classes.
      self._class_nms_threshold = float(config.class_nms_threshold)
      # Maximum number of detections to return.
      self._total_max_detections = config.total_max_detections
      # Threshold probability
      self._min_prob_threshold = config.min_prob_threshold or 0.0
  
imports: import sonnet
  import tensorflow
  from luminoth.utils.bbox_transform_tf import decode, clip_boxes, change_order
label_desc: Use image node_id 1 to create a new RCNNProposal object from inherited base classes: snt with example: obj = RCNNProposal(num_classes, config, variances, name)