class_docstr: Transforms anchors and SSD predictions into object proposals.
  
  Using the fixed anchors and the SSD predictions for both classification
  and regression (adjusting the bounding box), we return a list of 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 completely 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: ["Transforms","anchors","and","SSD","predictions","into","object","proposals",".","Using","the","fixed","anchors","and","the","SSD","predictions","for","both","classification","and","regression","(","adjusting","the","bounding","box",")",",","we","return","a","list","of","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","completely","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","."]
code: def __init__(
      self, num_classes, config, variances, name="proposal_layer"
  ):
      super(SSDProposal, self).__init__(name=name)
      self._num_classes = num_classes
  
      # Threshold to use for NMS.
      self._class_nms_threshold = config.class_nms_threshold
      # Max number of proposals detections per class.
      self._class_max_detections = config.class_max_detections
      # Maximum number of detections to return.
      self._total_max_detections = config.total_max_detections
      self._min_prob_threshold = config.min_prob_threshold or 0.0
  
      self._filter_outside_anchors = config.filter_outside_anchors
      self._variances = variances
  
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 SSDProposal object from inherited base classes: snt with example: obj = SSDProposal(num_classes, config, variances, name)