def call(self, inputs, **kwargs):
        """ Constructs the NMS graph.

        Args
            inputs : List of [boxes, classification, other[0], other[1], ...] tensors.
        """
        boxes          = inputs[0]
        classification = inputs[1]
        other          = inputs[2:]

        # wrap nms with our parameters
        def _filter_detections(args):
            boxes          = args[0]
            classification = args[1]
            other          = args[2]

            return filter_detections(
                boxes,
                classification,
                other,
                nms                   = self.nms,
                class_specific_filter = self.class_specific_filter,
                score_threshold       = self.score_threshold,
                max_detections        = self.max_detections,
                nms_threshold         = self.nms_threshold,
            )

        # call filter_detections on each batch
        dtypes = [keras.backend.floatx(), keras.backend.floatx(), 'int32'] + [o.dtype for o in other]
        shapes = [(self.max_detections, 4), (self.max_detections,), (self.max_detections,)]
        shapes.extend([(self.max_detections,) + o.shape[2:] for o in other])
        outputs = backend.map_fn(
            _filter_detections,
            elems=[boxes, classification, other],
            dtype=dtypes,
            shapes=shapes,
            parallel_iterations=self.parallel_iterations,
        )

        return outputs
 Constructs the NMS graph.

        Args
            inputs : List of [boxes, classification, other[0], other[1], ...] tensors.
        
keras_retinanet/layers/filter_detections.py