From 227c409d4601acfba26bf13e506630e87a219c2e Mon Sep 17 00:00:00 2001 From: yangyongjie Date: Tue, 4 Aug 2020 14:48:30 +0800 Subject: [PATCH] change comment and nms in yolov3-darknet53. --- .../official/cv/yolov3_darknet53/eval.py | 38 ++++++------- .../cv/yolov3_darknet53/src/transforms.py | 53 ++++++++----------- 2 files changed, 42 insertions(+), 49 deletions(-) diff --git a/model_zoo/official/cv/yolov3_darknet53/eval.py b/model_zoo/official/cv/yolov3_darknet53/eval.py index 6680b104762..f04ed2447c9 100644 --- a/model_zoo/official/cv/yolov3_darknet53/eval.py +++ b/model_zoo/official/cv/yolov3_darknet53/eval.py @@ -90,35 +90,35 @@ class DetectionEngine: for i in keep_index] self.det_boxes.extend(keep_box) - def _nms(self, dets, thresh): + def _nms(self, predicts, threshold): """Calculate NMS.""" # conver xywh -> xmin ymin xmax ymax - x1 = dets[:, 0] - y1 = dets[:, 1] - x2 = x1 + dets[:, 2] - y2 = y1 + dets[:, 3] - scores = dets[:, 4] + x1 = predicts[:, 0] + y1 = predicts[:, 1] + x2 = x1 + predicts[:, 2] + y2 = y1 + predicts[:, 3] + scores = predicts[:, 4] areas = (x2 - x1 + 1) * (y2 - y1 + 1) order = scores.argsort()[::-1] - keep = [] + reserved_boxes = [] while order.size > 0: i = order[0] - keep.append(i) - xx1 = np.maximum(x1[i], x1[order[1:]]) - yy1 = np.maximum(y1[i], y1[order[1:]]) - xx2 = np.minimum(x2[i], x2[order[1:]]) - yy2 = np.minimum(y2[i], y2[order[1:]]) + reserved_boxes.append(i) + max_x1 = np.maximum(x1[i], x1[order[1:]]) + max_y1 = np.maximum(y1[i], y1[order[1:]]) + min_x2 = np.minimum(x2[i], x2[order[1:]]) + min_y2 = np.minimum(y2[i], y2[order[1:]]) - w = np.maximum(0.0, xx2 - xx1 + 1) - h = np.maximum(0.0, yy2 - yy1 + 1) - inter = w * h - ovr = inter / (areas[i] + areas[order[1:]] - inter) + intersect_w = np.maximum(0.0, min_x2 - max_x1 + 1) + intersect_h = np.maximum(0.0, min_y2 - max_y1 + 1) + intersect_area = intersect_w * intersect_h + ovr = intersect_area / (areas[i] + areas[order[1:]] - intersect_area) - inds = np.where(ovr <= thresh)[0] - order = order[inds + 1] - return keep + indexs = np.where(ovr <= threshold)[0] + order = order[indexs + 1] + return reserved_boxes def write_result(self): """Save result to file.""" diff --git a/model_zoo/official/cv/yolov3_darknet53/src/transforms.py b/model_zoo/official/cv/yolov3_darknet53/src/transforms.py index 837d1a25ead..4756a141f04 100644 --- a/model_zoo/official/cv/yolov3_darknet53/src/transforms.py +++ b/model_zoo/official/cv/yolov3_darknet53/src/transforms.py @@ -73,42 +73,35 @@ def statistic_normalize_img(img, statistic_norm): def get_interp_method(interp, sizes=()): - """Get the interpolation method for resize functions. + """ + Get the interpolation method for resize functions. The major purpose of this function is to wrap a random interp method selection and a auto-estimation method. - Parameters - ---------- - interp : int - interpolation method for all resizing operations - - Possible values: - 0: Nearest Neighbors Interpolation. - 1: Bilinear interpolation. - 2: Bicubic interpolation over 4x4 pixel neighborhood. - 3: Nearest Neighbors. [Originally it should be Area-based, - as we cannot find Area-based, so we use NN instead. - Area-based (resampling using pixel area relation). It may be a - preferred method for image decimation, as it gives moire-free - results. But when the image is zoomed, it is similar to the Nearest - Neighbors method. (used by default). - 4: Lanczos interpolation over 8x8 pixel neighborhood. - 9: Cubic for enlarge, area for shrink, bilinear for others - 10: Random select from interpolation method metioned above. - Note: + Note: When shrinking an image, it will generally look best with AREA-based interpolation, whereas, when enlarging an image, it will generally look best - with Bicubic (slow) or Bilinear (faster but still looks OK). - More details can be found in the documentation of OpenCV, please refer to - http://docs.opencv.org/master/da/d54/group__imgproc__transform.html. - sizes : tuple of int - (old_height, old_width, new_height, new_width), if None provided, auto(9) - will return Area(2) anyway. + with Bicubic or Bilinear. - Returns - ------- - int - interp method from 0 to 4 + Args: + interp (int): Interpolation method for all resizing operations. + + - 0: Nearest Neighbors Interpolation. + - 1: Bilinear interpolation. + - 2: Bicubic interpolation over 4x4 pixel neighborhood. + - 3: Nearest Neighbors. Originally it should be Area-based, as we cannot find Area-based, + so we use NN instead. Area-based (resampling using pixel area relation). + It may be a preferred method for image decimation, as it gives moire-free results. + But when the image is zoomed, it is similar to the Nearest Neighbors method. (used by default). + - 4: Lanczos interpolation over 8x8 pixel neighborhood. + - 9: Cubic for enlarge, area for shrink, bilinear for others. + - 10: Random select from interpolation method mentioned above. + + sizes (tuple): Format should like (old_height, old_width, new_height, new_width), + if None provided, auto(9) will return Area(2) anyway. Default: () + + Returns: + int, interp method from 0 to 4. """ if interp == 9: if sizes: