Esempio n. 1
0
    def process_image_detailed(self, img_path):
        img = cv2.imread(img_path)
        _, cntk_img_input, dims = resize_and_pad(img, self._img_shape[2], self._img_shape[1])

        # compute ROI proposals and apply scaling and padding to them
        # [target_w, target_h, img_width, img_height, top, bottom, left, right, scale_factor]
        img_stats = compute_image_stats(len(img[0]), len(img), self._img_shape[2], self._img_shape[1])
        scale_factor = img_stats[-1]
        top = img_stats[4]
        left = img_stats[6]

        num_proposals = self._cfg['NUM_ROI_PROPOSALS']
        proposals = compute_proposals(img, num_proposals, self._cfg)
        proposals = proposals * scale_factor
        proposals += (left, top, left, top)

        output = self._eval_model.eval({self._eval_model.arguments[0]: [cntk_img_input],
                                        self._eval_model.arguments[1]: np.array(proposals, dtype=np.float32)})

        out_dict = dict([(k.name, k) for k in output])
        out_cls_pred = output[out_dict['cls_pred']][0]
        out_rpn_rois = proposals
        out_bbox_regr = output[out_dict['bbox_regr']][0]

        return out_cls_pred, out_rpn_rois, out_bbox_regr, dims
    def process_image_detailed(self, img_path):
        img = cv2.imread(img_path)
        _, cntk_img_input, dims = resize_and_pad(img, self._img_shape[2],
                                                 self._img_shape[1])

        # compute ROI proposals and apply scaling and padding to them
        # [target_w, target_h, img_width, img_height, top, bottom, left, right, scale_factor]
        img_stats = compute_image_stats(len(img[0]), len(img),
                                        self._img_shape[2], self._img_shape[1])
        scale_factor = img_stats[-1]
        top = img_stats[4]
        left = img_stats[6]

        num_proposals = self._cfg['NUM_ROI_PROPOSALS']
        proposals = compute_proposals(img, num_proposals, self._cfg)
        proposals = proposals * scale_factor
        proposals += (left, top, left, top)

        output = self._eval_model.eval({
            self._eval_model.arguments[0]: [cntk_img_input],
            self._eval_model.arguments[1]:
            np.array(proposals, dtype=np.float32)
        })

        out_dict = dict([(k.name, k) for k in output])
        out_cls_pred = output[out_dict['cls_pred']][0]
        out_rpn_rois = proposals
        out_bbox_regr = output[out_dict['bbox_regr']][0]

        return out_cls_pred, out_rpn_rois, out_bbox_regr, dims
Esempio n. 3
0
    def _prepare_annotations_proposals_and_stats(self, index, img):
        img_width = len(img[0])
        img_height = len(img)

        # prepare image statistics for scaling and padding images later
        # [target_w, target_h, img_width, img_height, top, bottom, left, right, scale_factor]
        img_stats = compute_image_stats(img_width, img_height, self._pad_width,
                                        self._pad_height)
        self._img_stats[index] = img_stats
        scale_factor = img_stats[-1]
        top = img_stats[4]
        left = img_stats[6]

        # prepare annotations
        annotations = self._gt_annotations[index]
        xyxy = annotations[:, :4]
        xyxy *= scale_factor
        xyxy += (left, top, left, top)

        # not needed since xyxy is just a reference: annotations[:, :4] = xyxy
        # TODO: do we need to round/floor/ceil xyxy coords?
        annotations[:, 0] = np.round(annotations[:, 0])
        annotations[:, 1] = np.round(annotations[:, 1])
        annotations[:, 2] = np.round(annotations[:, 2])
        annotations[:, 3] = np.round(annotations[:, 3])

        # prepare proposals
        if self._proposal_provider is not None:
            proposals = self._proposal_provider.get_proposals(index, img)

            if self._proposal_provider.requires_scaling():
                proposals = proposals * scale_factor
                proposals += (left, top, left, top)
            self._proposal_dict[index] = proposals

            if self._provide_targets:
                # add gt rois to front of list for Fast R-CNN
                gt_rois = annotations[np.where(annotations[:, 4] > 0)]
                num_proposals = proposals.shape[0]
                num_gt = gt_rois.shape[0]
                proposals_incl_gt = np.zeros(proposals.shape)
                proposals_incl_gt[:num_gt, :] = gt_rois[:, :4]
                proposals_incl_gt[num_gt:, :] = proposals[:(num_proposals -
                                                            num_gt), :]
                self._proposal_dict[index] = proposals_incl_gt

                # prepare proposal targets
                self._proposal_targets[index] = \
                    compute_targets(proposals_incl_gt, gt_rois, iou_threshold=self._proposal_iou_threshold,
                                    normalize_means=self._normalize_means, normalize_stds=self._normalize_stds)
Esempio n. 4
0
    def _prepare_annotations_proposals_and_stats(self, index, img):
        img_width = len(img[0])
        img_height = len(img)

        # prepare image statistics for scaling and padding images later
        # [target_w, target_h, img_width, img_height, top, bottom, left, right, scale_factor]
        img_stats = compute_image_stats(img_width, img_height, self._pad_width, self._pad_height)
        self._img_stats[index] = img_stats
        scale_factor = img_stats[-1]
        top = img_stats[4]
        left = img_stats[6]

        # prepare annotations
        annotations = self._gt_annotations[index]
        xyxy = annotations[:, :4]
        xyxy *= scale_factor
        xyxy += (left, top, left, top)

        # not needed since xyxy is just a reference: annotations[:, :4] = xyxy
        # TODO: do we need to round/floor/ceil xyxy coords?
        annotations[:, 0] = np.round(annotations[:, 0])
        annotations[:, 1] = np.round(annotations[:, 1])
        annotations[:, 2] = np.round(annotations[:, 2])
        annotations[:, 3] = np.round(annotations[:, 3])

        # prepare proposals
        if self._proposal_provider is not None:
            proposals = self._proposal_provider.get_proposals(index, img)

            if self._proposal_provider.requires_scaling():
                proposals = proposals * scale_factor
                proposals += (left, top, left, top)
            self._proposal_dict[index] = proposals

            if self._provide_targets:
                # add gt rois to front of list for Fast R-CNN
                gt_rois = annotations[np.where(annotations[:, 4] > 0)]
                num_proposals = proposals.shape[0]
                num_gt = gt_rois.shape[0]
                proposals_incl_gt = np.zeros(proposals.shape)
                proposals_incl_gt[:num_gt,:] = gt_rois[:,:4]
                proposals_incl_gt[num_gt:,:] = proposals[:(num_proposals - num_gt),:]
                self._proposal_dict[index] = proposals_incl_gt

                # prepare proposal targets
                self._proposal_targets[index] = \
                    compute_targets(proposals_incl_gt, gt_rois, iou_threshold=self._proposal_iou_threshold,
                                    normalize_means=self._normalize_means, normalize_stds=self._normalize_stds)