def predict()

in FasterRCNNDetection/model/faster_rcnn.py [0:0]


    def predict(self, imgs,sizes=None,visualize=False):
        """Detect objects from images.

        This method predicts objects for each image.

        Args:
            imgs (iterable of numpy.ndarray): Arrays holding images.
                All images are in CHW and RGB format
                and the range of their value is :math:`[0, 255]`.

        Returns:
           tuple of lists:
           This method returns a tuple of three lists,
           :obj:`(bboxes, labels, scores)`.

           * **bboxes**: A list of float arrays of shape :math:`(R, 4)`, \
               where :math:`R` is the number of bounding boxes in a image. \
               Each bouding box is organized by \
               :math:`(y_{min}, x_{min}, y_{max}, x_{max})` \
               in the second axis.
           * **labels** : A list of integer arrays of shape :math:`(R,)`. \
               Each value indicates the class of the bounding box. \
               Values are in range :math:`[0, L - 1]`, where :math:`L` is the \
               number of the foreground classes.
           * **scores** : A list of float arrays of shape :math:`(R,)`. \
               Each value indicates how confident the prediction is.

        """
        with t.no_grad():
            self.eval()
            if visualize:
                self.use_preset('visualize')
                prepared_imgs = list()
                sizes = list()
                for img in imgs:
                    size = img.shape[1:]
                    img = preprocess(at.tonumpy(img))
                    prepared_imgs.append(img)
                    sizes.append(size)
            else:
                 prepared_imgs = imgs 
            bboxes = list()
            labels = list()
            scores = list()
            for img, size in zip(prepared_imgs, sizes):
                img = t.autograd.Variable(at.totensor(img).float()[None])
                scale = img.shape[3] / size[1]
                roi_cls_loc, roi_scores, rois, _ = self(img, scale=scale)
                # We are assuming that batch size is 1.
                roi_score = roi_scores.data
                roi_cls_loc = roi_cls_loc.data
                roi = at.totensor(rois) / scale

                # Convert predictions to bounding boxes in image coordinates.
                # Bounding boxes are scaled to the scale of the input images.
                if opt.use_cuda:
                    mean = t.Tensor(self.loc_normalize_mean).cuda(). \
                        repeat(self.n_class)[None]
                    std = t.Tensor(self.loc_normalize_std).cuda(). \
                        repeat(self.n_class)[None]
                else:
                    mean = t.Tensor(self.loc_normalize_mean). \
                        repeat(self.n_class)[None]
                    std = t.Tensor(self.loc_normalize_std). \
                        repeat(self.n_class)[None]

                roi_cls_loc = (roi_cls_loc * std + mean)
                roi_cls_loc = roi_cls_loc.view(-1, self.n_class, 4)
                roi = roi.view(-1, 1, 4).expand_as(roi_cls_loc)
                cls_bbox = loc2bbox(at.tonumpy(roi).reshape((-1, 4)),
                                    at.tonumpy(roi_cls_loc).reshape((-1, 4)))
                cls_bbox = at.totensor(cls_bbox)
                cls_bbox = cls_bbox.view(-1, self.n_class * 4)
                # clip bounding box
                cls_bbox[:, 0::2] = (cls_bbox[:, 0::2]).clamp(min=0, max=size[0])
                cls_bbox[:, 1::2] = (cls_bbox[:, 1::2]).clamp(min=0, max=size[1])

                prob = at.tonumpy(F.softmax(at.tovariable(roi_score), dim=1))

                raw_cls_bbox = at.tonumpy(cls_bbox)
                raw_prob = at.tonumpy(prob)

                bbox, label, score = self._suppress(raw_cls_bbox, raw_prob)
                bboxes.append(bbox)
                labels.append(label)
                scores.append(score)

            self.use_preset('evaluate')
            self.train()
            return bboxes, labels, scores