diff --git a/official/cv/faster_rcnn/eval.py b/official/cv/faster_rcnn/eval.py index e02698024a8feeeac2763622ea8ab041c90389bd..fe911345e1cad4ad7e1f727953cea96f326a31c1 100644 --- a/official/cv/faster_rcnn/eval.py +++ b/official/cv/faster_rcnn/eval.py @@ -110,7 +110,7 @@ def fasterrcnn_eval(dataset_path, ckpt_path, anno_path): eval_types = ["bbox"] result_files = results2json(dataset_coco, outputs, "./results.pkl") - coco_eval(config, result_files, eval_types, dataset_coco, single_result=False) + coco_eval(config, result_files, eval_types, dataset_coco, single_result=True, plot_detect_result=True) def modelarts_pre_process(): diff --git a/official/cv/faster_rcnn/postprocess.py b/official/cv/faster_rcnn/postprocess.py index ef2820382eba5e5c47697032e5505d239fed2c0c..db9bcd4e97012ac22582e20400d691810568dcb3 100644 --- a/official/cv/faster_rcnn/postprocess.py +++ b/official/cv/faster_rcnn/postprocess.py @@ -25,9 +25,11 @@ from src.model_utils.moxing_adapter import moxing_wrapper dst_width = config.img_width dst_height = config.img_height + def modelarts_pre_process(): pass + @moxing_wrapper(pre_process=modelarts_pre_process) def get_eval_result(ann_file, result_path): """ get evaluation result of faster rcnn""" @@ -68,7 +70,8 @@ def get_eval_result(ann_file, result_path): eval_types = ["bbox"] result_files = results2json(dataset_coco, outputs, "./results.pkl") - coco_eval(result_files, eval_types, dataset_coco, single_result=False) + coco_eval(config, result_files, eval_types, dataset_coco, single_result=False) + if __name__ == '__main__': get_eval_result(config.ann_file, config.result_path) diff --git a/official/cv/faster_rcnn/src/util.py b/official/cv/faster_rcnn/src/util.py index ac8500294293a457dbd7c53876027fd1b51daa8f..5974039ecbdc7fe862a8a789c38b8ef05ba74467 100644 --- a/official/cv/faster_rcnn/src/util.py +++ b/official/cv/faster_rcnn/src/util.py @@ -23,7 +23,6 @@ import mmcv from pycocotools.coco import COCO from src.detecteval import DetectEval - _init_value = np.array(0.0) summary_init = { 'Precision/mAP': _init_value, @@ -52,7 +51,8 @@ def write_list_to_csv(file_path, data_to_write, append=False): writer.writerow(data_to_write) -def coco_eval(config, result_files, result_types, coco, max_dets=(100, 300, 1000), single_result=False): +def coco_eval(config, result_files, result_types, coco, max_dets=(100, 300, 1000), single_result=False, + plot_detect_result=False): """coco eval for fasterrcnn""" anns = json.load(open(result_files['bbox'])) if not anns: @@ -119,9 +119,12 @@ def coco_eval(config, result_files, result_types, coco, max_dets=(100, 300, 1000 print("summary_metrics: ") print(summary_metrics) - res = calcuate_pr_rc_f1(config, coco, coco_dets, tgt_ids, iou_type) + if plot_detect_result: + res = calcuate_pr_rc_f1(config, coco, coco_dets, tgt_ids, iou_type) - return res + if plot_detect_result: + return res + return summary_metrics def calcuate_pr_rc_f1(config, coco, coco_dets, tgt_ids, iou_type): @@ -193,7 +196,8 @@ def xyxy2xywh(bbox): _bbox[1], _bbox[2] - _bbox[0] + 1, _bbox[3] - _bbox[1] + 1, - ] + ] + def bbox2result_1image(bboxes, labels, num_classes): """Convert detection results to a list of numpy arrays. @@ -212,11 +216,12 @@ def bbox2result_1image(bboxes, labels, num_classes): result = [bboxes[labels == i, :] for i in range(num_classes - 1)] return result + def proposal2json(dataset, results): """convert proposal to json mode""" img_ids = dataset.getImgIds() json_results = [] - dataset_len = dataset.get_dataset_size()*2 + dataset_len = dataset.get_dataset_size() * 2 for idx in range(dataset_len): img_id = img_ids[idx] bboxes = results[idx] @@ -229,6 +234,7 @@ def proposal2json(dataset, results): json_results.append(data) return json_results + def det2json(dataset, results): """convert det to json mode""" cat_ids = dataset.getCatIds() @@ -250,6 +256,7 @@ def det2json(dataset, results): json_results.append(data) return json_results + def segm2json(dataset, results): """convert segm to json mode""" bbox_json_results = [] @@ -284,6 +291,7 @@ def segm2json(dataset, results): segm_json_results.append(data) return bbox_json_results, segm_json_results + def results2json(dataset, results, out_file): """convert result convert to json mode""" result_files = dict()