X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=example-apps%2FPDD%2Fpcb-defect-detection%2Flibs%2Fbox_utils%2Fcython_utils%2Fbbox.pyx;fp=example-apps%2FPDD%2Fpcb-defect-detection%2Flibs%2Fbox_utils%2Fcython_utils%2Fbbox.pyx;h=0000000000000000000000000000000000000000;hb=3ed2c61d9d7e7916481650c41bfe5604f7db22e9;hp=5b82bdfad76af7ca368891f8dd16291467d44cc1;hpb=e6d40ddb2640f434a9d7d7ed99566e5e8fa60cc1;p=ealt-edge.git diff --git a/example-apps/PDD/pcb-defect-detection/libs/box_utils/cython_utils/bbox.pyx b/example-apps/PDD/pcb-defect-detection/libs/box_utils/cython_utils/bbox.pyx deleted file mode 100755 index 5b82bdf..0000000 --- a/example-apps/PDD/pcb-defect-detection/libs/box_utils/cython_utils/bbox.pyx +++ /dev/null @@ -1,249 +0,0 @@ -# -------------------------------------------------------- -# Fast R-CNN -# Copyright (c) 2015 Microsoft -# Licensed under The MIT License [see LICENSE for details] -# Written by Sergey Karayev -# -------------------------------------------------------- - -cimport cython -import numpy as np -cimport numpy as np - -DTYPE = np.float -ctypedef np.float_t DTYPE_t - -def bbox_overlaps_float( - np.ndarray[DTYPE_t, ndim=2] boxes, - np.ndarray[DTYPE_t, ndim=2] query_boxes): - """ - Parameters - ---------- - boxes: (N, 4) ndarray of float - query_boxes: (K, 4) ndarray of float - Returns - ------- - overlaps: (N, K) ndarray of overlap between boxes and query_boxes - """ - cdef unsigned int N = boxes.shape[0] - cdef unsigned int K = query_boxes.shape[0] - cdef np.ndarray[DTYPE_t, ndim=2] overlaps = np.zeros((N, K), dtype=DTYPE) - cdef DTYPE_t iw, ih, box_area - cdef DTYPE_t ua - cdef unsigned int k, n - for k in range(K): - box_area = ( - (query_boxes[k, 2] - query_boxes[k, 0]) * - (query_boxes[k, 3] - query_boxes[k, 1]) - ) - for n in range(N): - iw = ( - min(boxes[n, 2], query_boxes[k, 2]) - - max(boxes[n, 0], query_boxes[k, 0]) - ) - if iw > 0: - ih = ( - min(boxes[n, 3], query_boxes[k, 3]) - - max(boxes[n, 1], query_boxes[k, 1]) - ) - if ih > 0: - ua = float( - (boxes[n, 2] - boxes[n, 0]) * - (boxes[n, 3] - boxes[n, 1]) + - box_area - iw * ih - ) - # if query_boxes[k, 4] == -1: - # ua = float((boxes[n, 2] - boxes[n, 0]) - # *(boxes[n, 3] - boxes[n, 1])) - # else: - # ua = float( - # (boxes[n, 2] - boxes[n, 0]) * - # (boxes[n, 3] - boxes[n, 1]) + - # box_area - iw * ih - # ) - overlaps[n, k] = iw * ih / ua - return overlaps - -def bbox_overlaps( - np.ndarray[DTYPE_t, ndim=2] boxes, - np.ndarray[DTYPE_t, ndim=2] query_boxes): - """ - Parameters - ---------- - boxes: (N, 4) ndarray of float - query_boxes: (K, 4) ndarray of float - Returns - ------- - overlaps: (N, K) ndarray of overlap between boxes and query_boxes - """ - cdef unsigned int N = boxes.shape[0] - cdef unsigned int K = query_boxes.shape[0] - cdef np.ndarray[DTYPE_t, ndim=2] overlaps = np.zeros((N, K), dtype=DTYPE) - cdef DTYPE_t iw, ih, box_area - cdef DTYPE_t ua - cdef unsigned int k, n - for k in range(K): - box_area = ( - (query_boxes[k, 2] - query_boxes[k, 0] + 1) * - (query_boxes[k, 3] - query_boxes[k, 1] + 1) - ) - for n in range(N): - iw = ( - min(boxes[n, 2], query_boxes[k, 2]) - - max(boxes[n, 0], query_boxes[k, 0]) + 1 - ) - if iw > 0: - ih = ( - min(boxes[n, 3], query_boxes[k, 3]) - - max(boxes[n, 1], query_boxes[k, 1]) + 1 - ) - if ih > 0: - ua = float( - (boxes[n, 2] - boxes[n, 0] + 1) * - (boxes[n, 3] - boxes[n, 1] + 1) + - box_area - iw * ih - ) - overlaps[n, k] = iw * ih / ua - return overlaps - -def bbox_overlaps_self( - np.ndarray[DTYPE_t, ndim=2] boxes, - np.ndarray[DTYPE_t, ndim=2] query_boxes): - """ - Parameters - ---------- - boxes: (N, 4) ndarray of float - query_boxes: (K, 4) ndarray of float - Returns - ------- - overlaps: (N, K) ndarray of overlap between boxes and query_boxes - """ - cdef unsigned int N = boxes.shape[0] - cdef unsigned int K = query_boxes.shape[0] - cdef np.ndarray[DTYPE_t, ndim=2] overlaps = np.zeros((N, K), dtype=DTYPE) - cdef DTYPE_t iw, ih, box_area - cdef DTYPE_t ua - cdef unsigned int k, n - for k in range(K): - box_area = ( - (query_boxes[k, 2] - query_boxes[k, 0] + 1) * - (query_boxes[k, 3] - query_boxes[k, 1] + 1) - ) - for n in range(N): - iw = ( - min(boxes[n, 2], query_boxes[k, 2]) - - max(boxes[n, 0], query_boxes[k, 0]) + 1 - ) - if iw > 0: - ih = ( - min(boxes[n, 3], query_boxes[k, 3]) - - max(boxes[n, 1], query_boxes[k, 1]) + 1 - ) - if ih > 0: - ua = float(box_area) - overlaps[n, k] = iw * ih / ua - return overlaps - - -def bbox_overlaps_ignore( - np.ndarray[DTYPE_t, ndim=2] boxes, - np.ndarray[DTYPE_t, ndim=2] query_boxes): - """ - Parameters - ---------- - boxes: (N, 4) ndarray of float - query_boxes: (K, 4) ndarray of float - Returns - ------- - overlaps: (N, K) ndarray of overlap between boxes and query_boxes - """ - cdef unsigned int N = boxes.shape[0] - cdef unsigned int K = query_boxes.shape[0] - cdef np.ndarray[DTYPE_t, ndim=2] overlaps = np.zeros((N, K), dtype=DTYPE) - cdef DTYPE_t iw, ih, box_area - cdef DTYPE_t ua - cdef unsigned int k, n - for k in range(K): - box_area = ( - (query_boxes[k, 2] - query_boxes[k, 0] + 1) * - (query_boxes[k, 3] - query_boxes[k, 1] + 1) - ) - for n in range(N): - iw = ( - min(boxes[n, 2], query_boxes[k, 2]) - - max(boxes[n, 0], query_boxes[k, 0]) + 1 - ) - if iw > 0: - ih = ( - min(boxes[n, 3], query_boxes[k, 3]) - - max(boxes[n, 1], query_boxes[k, 1]) + 1 - ) - if ih > 0: - if query_boxes[k, 4] == -1: - ua = float((boxes[n, 2] - boxes[n, 0] + 1) - *(boxes[n, 3] - boxes[n, 1] + 1)) - else: - ua = float( - (boxes[n, 2] - boxes[n, 0] + 1) * - (boxes[n, 3] - boxes[n, 1] + 1) + - box_area - iw * ih - ) - overlaps[n, k] = iw * ih / ua - return overlaps - - -def get_assignment_overlaps( - np.ndarray[DTYPE_t, ndim=2] boxes, - np.ndarray[DTYPE_t, ndim=2] query_boxes, - DTYPE_t FG_THRESH): - """ Used for proposal_target_layer_ignore - Parameters - ---------- - boxes: (N, 4) ndarray of float - query_boxes: (K, 4) ndarray of float - Returns - ------- - overlaps: (N, K) ndarray of overlap between boxes and query_boxes - """ - cdef unsigned int N = boxes.shape[0] - cdef unsigned int K = query_boxes.shape[0] - cdef np.ndarray[long, ndim=1] gt_assignment = np.zeros((N,), dtype=np.int) - cdef np.ndarray[DTYPE_t, ndim=1] max_overlaps = np.zeros((N,), dtype=DTYPE) - cdef DTYPE_t iw, ih, box_area - cdef DTYPE_t ua - cdef unsigned int k, n - for k in range(K): - box_area = ( - (query_boxes[k, 2] - query_boxes[k, 0] + 1) * - (query_boxes[k, 3] - query_boxes[k, 1] + 1) - ) - for n in range(N): - iw = ( - min(boxes[n, 2], query_boxes[k, 2]) - - max(boxes[n, 0], query_boxes[k, 0]) + 1 - ) - if iw > 0: - ih = ( - min(boxes[n, 3], query_boxes[k, 3]) - - max(boxes[n, 1], query_boxes[k, 1]) + 1 - ) - if ih > 0: - if query_boxes[k, 4] == -1: - ua = float((boxes[n, 2] - boxes[n, 0] + 1) - *(boxes[n, 3] - boxes[n, 1] + 1)) - overlap = iw * ih / ua - if overlap > max_overlaps[n]: - if query_boxes[gt_assignment[n], 4] == -1 or max_overlaps[n] < FG_THRESH: - max_overlaps[n] = overlap - gt_assignment[n] = k - else: - ua = float( - (boxes[n, 2] - boxes[n, 0] + 1) * - (boxes[n, 3] - boxes[n, 1] + 1) + - box_area - iw * ih - ) - overlap = iw * ih / ua - if overlap > max_overlaps[n]: - max_overlaps[n] = overlap - gt_assignment[n] = k - #overlaps[n, k] = overlap - return gt_assignment, max_overlaps