From 8695affbe4750751ec8ead81714164865b0f159e Mon Sep 17 00:00:00 2001 From: MiXaiLL76 Date: Fri, 24 May 2024 12:23:23 +0300 Subject: [PATCH 1/7] add docs --- faster_coco_eval/core/coco.py | 43 ++++++++++++++++++++++ faster_coco_eval/core/cocoeval.py | 7 ++++ faster_coco_eval/core/faster_eval_api.py | 22 ++++++++++- faster_coco_eval/extra/curves.py | 17 ++++++++- faster_coco_eval/extra/display.py | 26 ++++++++++++- faster_coco_eval/extra/draw.py | 47 ++++++++++++++++++++++-- faster_coco_eval/extra/extra.py | 16 ++++++++ 7 files changed, 172 insertions(+), 6 deletions(-) diff --git a/faster_coco_eval/core/coco.py b/faster_coco_eval/core/coco.py index 0b9c743..77b1c06 100644 --- a/faster_coco_eval/core/coco.py +++ b/faster_coco_eval/core/coco.py @@ -453,21 +453,64 @@ def annToMask(self, ann): return m def get_ann_ids(self, img_ids=[], cat_ids=[], area_rng=[], iscrowd=None): + """Get ann ids that satisfy given filter conditions. + + :param img_ids (int array) : get anns for given imgs + :param cat_ids (int array) : get anns for given cats + :param area_rng (float array) : get anns for given area range + (e.g. [0 inf]) + :return: ids (int array) : integer array of ann ids + + """ return self.getAnnIds(img_ids, cat_ids, area_rng, iscrowd) def get_cat_ids(self, cat_names=[], sup_names=[], cat_ids=[]): + """Get cat ids that satisfy given filter conditions. + + :param cat_names (str array) : get cats for given cat names + :param sup_names (str array) : get cats for given supercategory + names + :param cat_ids (int array) : get cats for given cat ids + :return: ids (int array) : integer array of cat ids + + """ return self.getCatIds(cat_names, sup_names, cat_ids) def get_img_ids(self, img_ids=[], cat_ids=[]): + """Get img ids that satisfy given filter conditions. + + :param img_ids (int array) : get imgs for given ids + :param cat_ids (int array) : get imgs with all given cats + :return: ids (int array) : integer array of img ids + + """ return self.getImgIds(img_ids, cat_ids) def load_anns(self, ids): + """Load anns with the specified ids. + + :param ids (int array) : integer ids specifying anns + :return: anns (object array) : loaded ann objects + + """ return self.loadAnns(ids) def load_cats(self, ids): + """Load cats with the specified ids. + + :param ids (int array) : integer ids specifying cats + :return: cats (object array) : loaded cat objects + + """ return self.loadCats(ids) def load_imgs(self, ids): + """Load anns with the specified ids. + + :param ids (int array) : integer ids specifying img + :return: imgs (object array) : loaded img objects + + """ return self.loadImgs(ids) @property diff --git a/faster_coco_eval/core/cocoeval.py b/faster_coco_eval/core/cocoeval.py index 5eb731e..fb0db6b 100644 --- a/faster_coco_eval/core/cocoeval.py +++ b/faster_coco_eval/core/cocoeval.py @@ -592,6 +592,13 @@ def setKpParams(self): ) def __init__(self, iouType="segm", kpt_sigmas=None): + """Params for coco evaluation api. + + IouType: the type of iou to use for evaluation, can be 'segm', 'bbox', + or 'keypoints' + kpt_sigmas: list of keypoint sigma values. + + """ if iouType == "segm" or iouType == "bbox": self.setDetParams() elif iouType == "keypoints": diff --git a/faster_coco_eval/core/faster_eval_api.py b/faster_coco_eval/core/faster_eval_api.py index f772f6f..0ed5705 100644 --- a/faster_coco_eval/core/faster_eval_api.py +++ b/faster_coco_eval/core/faster_eval_api.py @@ -192,6 +192,8 @@ def accumulate(self): self.print_function("DONE (t={:0.2f}s).".format(toc - tic)) def math_matches(self): + """For each ground truth, find the best matching detection and set the + detection as matched.""" for gidx, ground_truth_matches in enumerate(self.ground_truth_matches): gt_ids = self.ground_truth_orig_id[gidx] @@ -252,6 +254,12 @@ def math_matches(self): self.cocoGt.anns[gt_id]["fn"] = True def computeAnnIoU(self, gt_ann, dt_ann): + """Compute the IoU of a ground truth and a detection. + + gt_ann: ground truth annotation + dt_ann: detection annotation + + """ g = [] d = [] @@ -271,7 +279,13 @@ def computeAnnIoU(self, gt_ann, dt_ann): else: return _iou.max() - def compute_mIoU(self, categories=None, raw=False): + def compute_mIoU(self, categories: list = None, raw: bool = False): + """Compute the mIoU metric. + + categories: if not None, only include images with categories in + raw: if True, return the raw ious. + + """ if self.params.iouType == "keypoints": return np.array( [val.max() for val in self.ious.values() if len(val)] @@ -308,6 +322,7 @@ def compute_mIoU(self, categories=None, raw=False): return ious.mean() def compute_mAUC(self): + """Compute the mAUC metric.""" aucs = [] for K in range(self.eval["counts"][2]): @@ -376,6 +391,11 @@ def stats_as_dict(self): @staticmethod def calc_auc(recall_list, precision_list): + """ + Calculate area under precision recall curve + recall_list: list of recall values + precision_list: list of precision values + """ # https://towardsdatascience.com/how-to-efficiently-implement-area-under-precision-recall-curve-pr-auc-a85872fd7f14 # mrec = np.concatenate(([0.], recall_list, [1.])) # mpre = np.concatenate(([0.], precision_list, [0.])) diff --git a/faster_coco_eval/extra/curves.py b/faster_coco_eval/extra/curves.py index d0ef323..1ad6fe8 100644 --- a/faster_coco_eval/extra/curves.py +++ b/faster_coco_eval/extra/curves.py @@ -8,7 +8,8 @@ class Curves(ExtraEval): - def build_curve(self, label): + def build_curve(self, label: str): + """Build the curve for a given label.""" assert self.eval is not None, "Run first self.evaluate()" curve = [] @@ -49,6 +50,13 @@ def build_curve(self, label): def plot_pre_rec( self, curves=None, label: str = "category_id", return_fig: bool = False ): + """Plot the precision-recall curve. + + curves: list of curves to plot + label: label of the curves + return_fig: return the figure + + """ if curves is None: curves = self.build_curve(label) @@ -57,6 +65,13 @@ def plot_pre_rec( def plot_f1_confidence( self, curves=None, label: str = "category_id", return_fig: bool = False ): + """Plot the F1 confidence curve. + + curves: list of curves to plot + label: label of the curves + return_fig: return the figure + + """ if curves is None: curves = self.build_curve(label) diff --git a/faster_coco_eval/extra/display.py b/faster_coco_eval/extra/display.py index 54c9cf3..94a049b 100644 --- a/faster_coco_eval/extra/display.py +++ b/faster_coco_eval/extra/display.py @@ -21,6 +21,17 @@ def display_image( categories: Optional[list] = None, return_fig: bool = False, ): + """ + Display the image with the results + image_id: image id + display_fp: display false positive + display_fn: display false negative + display_tp: display true positive + display_gt: display ground truth + data_folder: data folder + categories: categories to display + return_fig: return the figure + """ return display_image( self.cocoGt, self.cocoDt, @@ -58,7 +69,13 @@ def display_tp_fp_fn( ) def _compute_confusion_matrix(self, y_true, y_pred, fp={}, fn={}): - """Return classes*(classes + fp col + fn col)""" + """ + Compute the confusion matrix + y_true: true labels + y_pred: predicted labels + fp: false positive + fn: false negative + """ categories_real_ids = list(self.cocoGt.cats) categories_enum_ids = { category_id: _i @@ -77,6 +94,7 @@ def _compute_confusion_matrix(self, y_true, y_pred, fp={}, fn={}): return cm def compute_confusion_matrix(self): + """Compute the confusion matrix.""" assert self.eval is not None, "Run first self.evaluate()" if self.useCats: @@ -116,6 +134,12 @@ def compute_confusion_matrix(self): def display_matrix( self, normalize=False, conf_matrix=None, return_fig: bool = False ): + """ + Display the confusion matrix + normalize: normalize the matrix + conf_matrix: confusion matrix to display + return_fig: return the figure + """ if conf_matrix is None: conf_matrix = self.compute_confusion_matrix() diff --git a/faster_coco_eval/extra/draw.py b/faster_coco_eval/extra/draw.py index 0fee71c..a963a4a 100644 --- a/faster_coco_eval/extra/draw.py +++ b/faster_coco_eval/extra/draw.py @@ -27,7 +27,17 @@ def generate_ann_polygon( text: Optional[str] = None, legendgroup: Optional[str] = None, category_id_to_skeleton: Optional[dict] = None, -): +) -> go.Scatter: + """Generate annotation polygon for plotly. + + ann: annotation dictionary + color: color of the annotation + iouType: type of the annotation bbox or segm or keypoints + text: text to display + legendgroup: legend group to display + category_id_to_skeleton: dictionary of category id to skeleton + + """ all_x = [] all_y = [] @@ -96,7 +106,21 @@ def display_image( data_folder: Optional[str] = None, categories: Optional[list] = None, return_fig: bool = False, -): +) -> Optional[go.Figure]: + """ + Display the image with the results + cocoGt: ground truth + cocoDt: detection + image_id: image id + iouType: type of the annotation bbox or segm or keypoints + display_fp: display false positive + display_fn: display false negative + display_tp: display true positive + display_gt: display ground truth + data_folder: data folder + categories: categories to display + return_fig: return the figure + """ polygons = [] image = cocoGt.imgs[image_id] @@ -253,7 +277,14 @@ def display_matrix( labels: list, normalize: bool = False, return_fig: bool = False, -): +) -> Optional[go.Figure]: + """ + Display the confusion matrix + conf_matrix: confusion matrix + labels: labels of the matrix + normalize: normalize the matrix + return_fig: return the figure + """ _labels = labels + ["fp", "fn"] if normalize: @@ -316,6 +347,11 @@ def display_matrix( def plot_pre_rec(curves, return_fig: bool = False): + """ + Plot the precision-recall curve + curves: list of curves to plot + return_fig: return the figure + """ fig = go.Figure() for _curve in curves: @@ -364,6 +400,11 @@ def plot_pre_rec(curves, return_fig: bool = False): def plot_f1_confidence(curves, return_fig: bool = False): + """ + Plot the F1 confidence curve + curves: list of curves to plot + return_fig: return the figure + """ fig = go.Figure() eps = 1e-16 for _curve in curves: diff --git a/faster_coco_eval/extra/extra.py b/faster_coco_eval/extra/extra.py index 97ff6b7..e6d25ae 100644 --- a/faster_coco_eval/extra/extra.py +++ b/faster_coco_eval/extra/extra.py @@ -9,6 +9,8 @@ class ExtraEval: + """Extra evaluation for coco dataset.""" + def __init__( self, cocoGt: COCO = None, @@ -20,6 +22,16 @@ def __init__( useCats: bool = False, kpt_oks_sigmas: list = None, ): + """ + :param cocoGt (COCO): + :param cocoDt (COCO): + :param iouType (str): bbox, segm, keypoints + :param min_score (float): + :param iou_tresh (float): + :param recall_count (int): + :param useCats (bool): + :param kpt_oks_sigmas (list): + """ self.iouType = iouType self.min_score = min_score self.iou_tresh = iou_tresh @@ -68,6 +80,10 @@ def evaluate(self): self.eval = cocoEval.eval def drop_cocodt_by_score(self, min_score: float): + """ + :param min_score: + :return: + """ assert self.cocoDt is not None, "cocoDt is empty" if min_score > 0: From c37cad438345d9be04b08bf0ba2f7f95837d56dc Mon Sep 17 00:00:00 2001 From: MiXaiLL76 Date: Fri, 24 May 2024 12:23:30 +0300 Subject: [PATCH 2/7] update tests --- tests/basic.py | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/tests/basic.py b/tests/basic.py index ee290fb..a34306f 100644 --- a/tests/basic.py +++ b/tests/basic.py @@ -1,5 +1,6 @@ #!/usr/bin/python3 +import os import unittest import numpy as np @@ -9,11 +10,29 @@ from faster_coco_eval.extra import PreviewResults +def _encode(x): + """Encode a binary mask into a run-length encoded string.""" + return mask_util.encode(np.asfortranarray(x, np.uint8)) + + class TestBaseCoco(unittest.TestCase): - def test_coco(self): - prepared_coco_in_dict = COCO.load_json("tests/dataset/gt_dataset.json") - prepared_anns = COCO.load_json("tests/dataset/dt_dataset.json") + """Test basic COCO functionality.""" + + prepared_coco_in_dict = None + prepared_anns = None + + def setUp(self): + gt_file = "dataset/gt_dataset.json" + dt_file = "dataset/dt_dataset.json" + + if not os.path.exists(gt_file): + gt_file = os.path.join("tests", gt_file) + dt_file = os.path.join("tests", dt_file) + + self.prepared_coco_in_dict = COCO.load_json(gt_file) + self.prepared_anns = COCO.load_json(dt_file) + def test_coco_eval(self): stats_as_dict = { "AP_all": 0.7832783278327835, "AP_50": 0.7832783278327836, @@ -36,8 +55,8 @@ def test_coco(self): iouType = "segm" useCats = False - cocoGt = COCO(prepared_coco_in_dict) - cocoDt = cocoGt.loadRes(prepared_anns) + cocoGt = COCO(self.prepared_coco_in_dict) + cocoDt = cocoGt.loadRes(self.prepared_anns) cocoEval = COCOeval_faster(cocoGt, cocoDt, iouType, extra_calc=True) cocoEval.params.maxDets = [len(cocoGt.anns)] @@ -51,12 +70,7 @@ def test_coco(self): self.assertEqual(cocoEval.stats_as_dict, stats_as_dict) - -class TestConfusionMatrix(unittest.TestCase): - def test_coco(self): - prepared_coco_in_dict = COCO.load_json("tests/dataset/gt_dataset.json") - prepared_anns = COCO.load_json("tests/dataset/dt_dataset.json") - + def test_confusion_matrix(self): prepared_result = [ [2.0, 1.0, 0.0, 0.0, 1.0, 0.0], [1.0, 1.0, 0.0, 0.0, 0.0, 1.0], @@ -67,8 +81,8 @@ def test_coco(self): iouType = "segm" useCats = False - cocoGt = COCO(prepared_coco_in_dict) - cocoDt = cocoGt.loadRes(prepared_anns) + cocoGt = COCO(self.prepared_coco_in_dict) + cocoDt = cocoGt.loadRes(self.prepared_anns) results = PreviewResults( cocoGt=cocoGt, @@ -81,12 +95,6 @@ def test_coco(self): self.assertEqual(result_cm, prepared_result) - -def _encode(x): - return mask_util.encode(np.asfortranarray(x, np.uint8)) - - -class TestToBBox(unittest.TestCase): def testToBboxFullImage(self): mask = np.array([[0, 1], [1, 1]]) bbox = mask_util.toBbox(_encode(mask)) @@ -103,8 +111,6 @@ def testToBboxNonFullImage(self): (bbox == np.array([3, 2, 3, 2], dtype="float32")).all(), bbox ) - -class TestMaskUtil(unittest.TestCase): def testInvalidRLECounts(self): rle = { "size": [1024, 1024], From 9d3dfa108aa18543dbce43e0be5e03195dac4c06 Mon Sep 17 00:00:00 2001 From: MiXaiLL76 Date: Tue, 11 Jun 2024 17:35:56 +0300 Subject: [PATCH 3/7] add more map dict --- faster_coco_eval/core/coco.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/faster_coco_eval/core/coco.py b/faster_coco_eval/core/coco.py index 77b1c06..edab22e 100644 --- a/faster_coco_eval/core/coco.py +++ b/faster_coco_eval/core/coco.py @@ -105,8 +105,11 @@ def __init__(self, annotation_file=None): def createIndex(self): # create index logger.debug("creating index...") - anns, cats, imgs = {}, {}, {} + anns, cats, imgs, annToImgs = {}, {}, {}, {} imgToAnns, catToImgs = defaultdict(list), defaultdict(list) + imgCatToAnnsIdx = defaultdict(dict) + imgToAnnsIdx = defaultdict(dict) + annsImgIds_dict = {} if "images" in self.dataset: for img in self.dataset["images"]: @@ -120,6 +123,15 @@ def createIndex(self): if annsImgIds_dict.get(ann["image_id"]): imgToAnns[ann["image_id"]].append(ann) anns[ann["id"]] = ann + annToImgs[ann["id"]] = ann["image_id"] + imgCatToAnnsIdx[(ann["image_id"], ann["category_id"])][ + ann["id"] + ] = len( + imgCatToAnnsIdx[(ann["image_id"], ann["category_id"])] + ) + imgToAnnsIdx[ann["image_id"]][ann["id"]] = len( + imgToAnnsIdx[ann["image_id"]] + ) if "categories" in self.dataset: for cat in self.dataset["categories"]: @@ -135,6 +147,9 @@ def createIndex(self): self.anns = anns self.imgToAnns = imgToAnns self.catToImgs = catToImgs + self.annToImgs = annToImgs + self.imgCatToAnnsIdx = imgCatToAnnsIdx + self.imgToAnnsIdx = imgToAnnsIdx self.imgs = imgs self.cats = cats @@ -520,3 +535,15 @@ def img_ann_map(self): @property def cat_img_map(self): return self.catToImgs + + @property + def ann_img_map(self): + return self.annToImgs + + @property + def img_ann_idx_map(self): + return self.imgToAnnsIdx + + @property + def img_cat_ann_idx_map(self): + return self.imgCatToAnnsIdx From 78819e4dcdfae1d84ea06cceaef8be69b7b743d7 Mon Sep 17 00:00:00 2001 From: MiXaiLL76 Date: Tue, 11 Jun 2024 17:37:51 +0300 Subject: [PATCH 4/7] update math_matches with base self.ious --- faster_coco_eval/core/faster_eval_api.py | 117 +++++++---------------- 1 file changed, 33 insertions(+), 84 deletions(-) diff --git a/faster_coco_eval/core/faster_eval_api.py b/faster_coco_eval/core/faster_eval_api.py index 0ed5705..de6fea2 100644 --- a/faster_coco_eval/core/faster_eval_api.py +++ b/faster_coco_eval/core/faster_eval_api.py @@ -9,7 +9,6 @@ import faster_coco_eval.faster_eval_api_cpp as _C -from . import mask as maskUtils from .cocoeval import COCOeval logger = logging.getLogger(__name__) @@ -157,16 +156,21 @@ def accumulate(self): self.matched = False try: if self.extra_calc: + + num_iou_thresholds, _, _, num_area_ranges, _ = self.eval[ + "counts" + ] + self.detection_matches = np.vstack( np.array(self.eval["detection_matches"]).reshape( - self.eval["counts"][0], self.eval["counts"][3], -1 + num_iou_thresholds, num_area_ranges, -1 ) ) assert self.detection_matches.shape[1] <= len(self.cocoDt.anns) self.ground_truth_matches = np.vstack( np.array(self.eval["ground_truth_matches"]).reshape( - self.eval["counts"][0], self.eval["counts"][3], -1 + num_iou_thresholds, num_area_ranges, -1 ) ) assert self.ground_truth_matches.shape[1] <= len( @@ -175,7 +179,7 @@ def accumulate(self): self.ground_truth_orig_id = np.vstack( np.array(self.eval["ground_truth_orig_id"]).reshape( - self.eval["counts"][0], self.eval["counts"][3], -1 + num_iou_thresholds, num_area_ranges, -1 ) ) assert self.ground_truth_orig_id.shape[1] <= len( @@ -205,24 +209,29 @@ def math_matches(self): if gt_id <= -1: continue - _gt_ann = self.cocoGt.anns.get(gt_id) - if _gt_ann is None: - continue + _gt_ann = self.cocoGt.anns[gt_id] + _dt_ann = self.cocoDt.anns[dt_id] + _img_id = self.cocoGt.ann_img_map[gt_id] + _catId = _gt_ann["category_id"] if self.params.useCats else -1 - _dt_ann = self.cocoDt.anns.get(dt_id) - if _dt_ann is None: - continue + if self.params.useCats: + _catId = _gt_ann["category_id"] + _map_gt_dict = self.cocoGt.img_cat_ann_idx_map + _map_dt_dict = self.cocoDt.img_cat_ann_idx_map + _map_id = (_img_id, _catId) + else: + _catId = -1 + _map_gt_dict = self.cocoGt.img_ann_idx_map + _map_dt_dict = self.cocoDt.img_ann_idx_map + _map_id = _img_id - if int(_gt_ann["image_id"]) != int(_dt_ann["image_id"]): - continue + iou_gt_id = _map_gt_dict[_map_id].get(gt_id) + iou_dt_id = _map_dt_dict[_map_id].get(dt_id) - if self.params.useCats == 1: - if int(_gt_ann["category_id"]) != int( - _dt_ann["category_id"] - ): - continue + if iou_gt_id is None or iou_dt_id is None: + continue - iou = self.computeAnnIoU(_gt_ann, _dt_ann) + iou = self.ious[(_img_id, _catId)][iou_dt_id, iou_gt_id] if not _gt_ann.get("matched", False): _dt_ann["tp"] = True @@ -253,73 +262,13 @@ def math_matches(self): if self.cocoGt.anns[gt_id].get("matched") is None: self.cocoGt.anns[gt_id]["fn"] = True - def computeAnnIoU(self, gt_ann, dt_ann): - """Compute the IoU of a ground truth and a detection. - - gt_ann: ground truth annotation - dt_ann: detection annotation - - """ - g = [] - d = [] - - if self.params.iouType == "segm": - g.append(gt_ann["rle"]) - d.append(dt_ann["rle"]) - elif self.params.iouType == "bbox": - g.append(gt_ann["bbox"]) - d.append(dt_ann["bbox"]) - - iscrowd = [0 for _ in g] - - _iou = maskUtils.iou(d, g, iscrowd) - - if len(_iou) == 0: - return 0 - else: - return _iou.max() - - def compute_mIoU(self, categories: list = None, raw: bool = False): - """Compute the mIoU metric. - - categories: if not None, only include images with categories in - raw: if True, return the raw ious. - - """ - if self.params.iouType == "keypoints": - return np.array( - [val.max() for val in self.ious.values() if len(val)] - ).mean() - - g = [] - d = [] - s = [] - + def compute_mIoU(self): + """Compute the mIoU metric.""" + ious = [] for _, dt_ann in self.cocoDt.anns.items(): - if dt_ann.get("tp", False): - gt_ann = self.cocoGt.anns[dt_ann["gt_id"]] - if categories is None or gt_ann["category_id"] in categories: - s.append(dt_ann.get("score", 1)) - if self.params.iouType == "segm": - g.append(gt_ann["rle"]) - d.append(dt_ann["rle"]) - elif self.params.iouType == "bbox": - g.append(gt_ann["bbox"]) - d.append(dt_ann["bbox"]) - else: - raise Exception("unknown iouType for iou computation") - - iscrowd = [0 for _ in g] - - ious = maskUtils.iou(d, g, iscrowd) - if raw: - return ious - - if len(ious) == 0: - return 0 - else: - ious = ious.diagonal() - return ious.mean() + if dt_ann.get("iou", False): + ious.append(dt_ann["iou"]) + return sum(ious) / len(ious) def compute_mAUC(self): """Compute the mAUC metric.""" From 690eb52f6831acaf11ec3f2405b1a3b930bc700f Mon Sep 17 00:00:00 2001 From: MiXaiLL76 Date: Tue, 11 Jun 2024 17:38:20 +0300 Subject: [PATCH 5/7] append ced curve for bbox and keypoints --- faster_coco_eval/extra/curves.py | 82 +++++++++++++++++++++++++++++++- faster_coco_eval/extra/draw.py | 78 +++++++++++++++++++++++++++++- faster_coco_eval/extra/extra.py | 7 ++- 3 files changed, 163 insertions(+), 4 deletions(-) diff --git a/faster_coco_eval/extra/curves.py b/faster_coco_eval/extra/curves.py index 1ad6fe8..8f0b525 100644 --- a/faster_coco_eval/extra/curves.py +++ b/faster_coco_eval/extra/curves.py @@ -1,7 +1,9 @@ import logging +import numpy as np + from ..core import COCOeval_faster -from .draw import plot_f1_confidence, plot_pre_rec +from .draw import plot_ced_metric, plot_f1_confidence, plot_pre_rec from .extra import ExtraEval logger = logging.getLogger(__name__) @@ -76,3 +78,81 @@ def plot_f1_confidence( curves = self.build_curve(label) return plot_f1_confidence(curves, return_fig=return_fig) + + def build_ced_curve(self, mse_count: int = 1000): + """Build the curve for all categories.""" + assert self.eval is not None, "Run first self.evaluate()" + + curves = [] + for category_id, category in self.cocoGt.cats.items(): + all_mse = [] + for ann_id in self.cocoGt.get_ann_ids(cat_ids=[category_id]): + gt_ann = self.cocoGt.anns[ann_id] + if gt_ann.get("keypoints", False) and gt_ann.get( + "matched", False + ): + dt_ann = self.cocoDt.anns[gt_ann["dt_id"]] + + # https://en.wikipedia.org/wiki/Mean_squared_error + if self.iouType == "keypoints": + gt_kps = np.array(gt_ann["keypoints"]).reshape(-1, 3)[ + :, :2 + ] + dt_kps = np.array(dt_ann["keypoints"]).reshape(-1, 3)[ + :, :2 + ] + elif self.iouType == "bbox": + gt_kps = np.array(gt_ann["bbox"]) # xywh + gt_kps[2:] += gt_kps[:2] # xyxy + dt_kps = np.array(dt_ann["bbox"]) # xywh + dt_kps[2:] += dt_kps[:2] # xyxy + else: + raise ValueError( + f"not supported iouType {self.iouType} for CED" + ) + + mse = np.square(gt_kps - dt_kps).mean() + all_mse.append(mse) + + if len(all_mse) == 0: + continue + + all_mse = np.array(all_mse) + _median = np.median(all_mse) + _q3 = np.sqrt(np.var(all_mse)) + + _curve = { + "mse": [0], + "count": [0], + "total_count": len(all_mse), + "category": category, + } + + for max_mse in np.linspace( + all_mse.min(), (_median + _q3), mse_count + ): + _mask = all_mse < max_mse + _curve["count"].append(_mask.sum()) + _curve["mse"].append(max_mse) + + _curve["count"].append(_curve["total_count"]) + _curve["mse"].append(all_mse.max()) + curves.append(_curve) + return curves + + def plot_ced_metric( + self, curves=None, normalize: bool = True, return_fig: bool = False + ): + """Plot the CED metric curve. + + curves: list of curves to plot + normalize: normalize the curve + return_fig: return the figure + + """ + if curves is None: + curves = self.build_ced_curve() + + return plot_ced_metric( + curves, normalize=normalize, return_fig=return_fig + ) diff --git a/faster_coco_eval/extra/draw.py b/faster_coco_eval/extra/draw.py index a963a4a..5b65a71 100644 --- a/faster_coco_eval/extra/draw.py +++ b/faster_coco_eval/extra/draw.py @@ -409,7 +409,7 @@ def plot_f1_confidence(curves, return_fig: bool = False): eps = 1e-16 for _curve in curves: recall_list = _curve["recall_list"] - precision_list = _curve["precision_list"] + precision_list = _curve["precision_list"][: len(recall_list)] scores = _curve["scores"] f1_curve = ( 2 @@ -455,3 +455,79 @@ def plot_f1_confidence(curves, return_fig: bool = False): return fig fig.show() + + +def plot_ced_metric(curves, normalize: bool = False, return_fig: bool = False): + fig = go.Figure() + + if normalize: + fig.layout.yaxis.title = ( + "The proportion of the sample to the total sample [%]" + ) + _hovertemplate_y = "%{y:.2f}%
" + else: + fig.layout.yaxis.title = "Number of samples" + _hovertemplate_y = "n=%{y}
" + + for ced_curve in curves: + if normalize: + y = (np.array(ced_curve["count"]) / ced_curve["total_count"]) * 100 + else: + y = ced_curve["count"] + + fig.layout.xaxis.title = "Mean squared error" + + category_name = ced_curve["category"]["name"] + fig.add_trace( + go.Scatter( + x=ced_curve["mse"], + y=y, + name=f"CED Curve [{category_name}]", + hovertemplate=_hovertemplate_y + + "mse: %{x:.2f}
", + showlegend=True, + mode="lines", + ) + ) + + fig.update_xaxes(showspikes=True) + fig.update_yaxes(showspikes=True) + + updatemenus = [ + dict( + type="dropdown", + direction="down", + y=1.1, + x=1, + buttons=list( + [ + dict( + args=[{"xaxis.type": "linear"}], + label="Linear Scale", + method="relayout", + ), + dict( + args=[{"xaxis.type": "log"}], + label="Log Scale", + method="relayout", + ), + ] + ), + ), + ] + + layout = { + "title": "Cumulative Error Distribution", + "autosize": True, + "height": 600, + "width": 1200, + # "xaxis_type" : "log", + "updatemenus": updatemenus, + } + + fig.update_layout(layout) + + if return_fig: + return fig + + fig.show() diff --git a/faster_coco_eval/extra/extra.py b/faster_coco_eval/extra/extra.py index e6d25ae..575985a 100644 --- a/faster_coco_eval/extra/extra.py +++ b/faster_coco_eval/extra/extra.py @@ -65,11 +65,14 @@ def evaluate(self): ) cocoEval.params.maxDets = [len(self.cocoGt.anns)] - cocoEval.params.iouThrs = [self.iou_tresh] - cocoEval.params.areaRng = [[0, 10000000000]] self.recThrs = np.linspace(0, 1, self.recall_count + 1, endpoint=True) + cocoEval.params.recThrs = self.recThrs + if self.iouType != "keypoints": + cocoEval.params.iouThrs = [self.iou_tresh] + + cocoEval.params.areaRng = [[0, 10000000000]] cocoEval.params.useCats = int(self.useCats) # Выключение labels self.cocoEval = cocoEval From 46e8341dcc683a0b4ad13acd61c8f37a5439d950 Mon Sep 17 00:00:00 2001 From: MiXaiLL76 Date: Tue, 11 Jun 2024 18:18:12 +0300 Subject: [PATCH 6/7] add ced example --- examples/ced_example.ipynb | 5093 ++++++++++++++++++++++++++++++++++++ 1 file changed, 5093 insertions(+) create mode 100644 examples/ced_example.ipynb diff --git a/examples/ced_example.ipynb b/examples/ced_example.ipynb new file mode 100644 index 0000000..119df2a --- /dev/null +++ b/examples/ced_example.ipynb @@ -0,0 +1,5093 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "faster_coco_eval.__version__='1.5.4'\n" + ] + } + ], + "source": [ + "import json\n", + "import logging\n", + "import faster_coco_eval\n", + "from faster_coco_eval import COCO, COCOeval_faster\n", + "from faster_coco_eval.extra import Curves\n", + "\n", + "print(f\"{faster_coco_eval.__version__=}\")\n", + "\n", + "logging.root.setLevel(\"INFO\")\n", + "logging.debug(\"Запись.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "prepared_coco_in_dict = COCO.load_json(\"../tests/kp_dataset/gt_dataset.json\")\n", + "prepared_anns = COCO.load_json(\"../tests/kp_dataset/dt_dataset.json\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "iouType = \"keypoints\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "cocoGt = COCO(prepared_coco_in_dict)\n", + "cocoDt = cocoGt.loadRes(prepared_anns)\n", + "\n", + "cocoEval = COCOeval_faster(\n", + " cocoGt, cocoDt, iouType, extra_calc=True, kpt_oks_sigmas=[0.025] * 4\n", + ")\n", + "\n", + "cocoEval.evaluate()\n", + "cocoEval.accumulate()\n", + "cocoEval.summarize()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'AP_all': 0.9763163924878505,\n", + " 'AP_50': 0.9801980198019802,\n", + " 'AP_75': 0.9801980198019802,\n", + " 'AP_medium': -1.0,\n", + " 'AP_large': 0.9763163924878505,\n", + " 'AR_all': 0.982608695652174,\n", + " 'AR_second': 0.9855072463768116,\n", + " 'AR_third': 0.9855072463768116,\n", + " 'AR_medium': -1.0,\n", + " 'AR_large': 0.982608695652174,\n", + " 'mIoU': 0.9743220702458776,\n", + " 'mAUC_50': 0.98}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cocoEval.stats_as_dict" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "hovertemplate": "%{y:.2f}%
mse: %{x:.2f}
", + "mode": "lines", + "name": "CED Curve [dial_skelet]", + "showlegend": true, + "type": "scatter", + "x": [ + 0, + 0.5791821397569715, + 0.5858986359691042, + 0.5926151321812367, + 0.5993316283933694, + 0.6060481246055021, + 0.6127646208176347, + 0.6194811170297674, + 0.6261976132418999, + 0.6329141094540326, + 0.6396306056661653, + 0.6463471018782978, + 0.6530635980904305, + 0.6597800943025631, + 0.6664965905146958, + 0.6732130867268284, + 0.679929582938961, + 0.6866460791510937, + 0.6933625753632263, + 0.7000790715753589, + 0.7067955677874915, + 0.7135120639996242, + 0.7202285602117569, + 0.7269450564238895, + 0.7336615526360221, + 0.7403780488481547, + 0.7470945450602874, + 0.7538110412724199, + 0.7605275374845526, + 0.7672440336966853, + 0.7739605299088179, + 0.7806770261209506, + 0.7873935223330831, + 0.7941100185452158, + 0.8008265147573485, + 0.807543010969481, + 0.8142595071816137, + 0.8209760033937463, + 0.827692499605879, + 0.8344089958180116, + 0.8411254920301442, + 0.8478419882422769, + 0.8545584844544095, + 0.8612749806665421, + 0.8679914768786747, + 0.8747079730908074, + 0.88142446930294, + 0.8881409655150727, + 0.8948574617272053, + 0.9015739579393379, + 0.9082904541514706, + 0.9150069503636031, + 0.9217234465757358, + 0.9284399427878685, + 0.9351564390000011, + 0.9418729352121338, + 0.9485894314242663, + 0.955305927636399, + 0.9620224238485316, + 0.9687389200606642, + 0.9754554162727969, + 0.9821719124849295, + 0.9888884086970622, + 0.9956049049091948, + 1.0023214011213275, + 1.0090378973334602, + 1.0157543935455928, + 1.0224708897577253, + 1.029187385969858, + 1.0359038821819906, + 1.0426203783941232, + 1.049336874606256, + 1.0560533708183883, + 1.062769867030521, + 1.0694863632426537, + 1.0762028594547863, + 1.082919355666919, + 1.0896358518790517, + 1.0963523480911843, + 1.103068844303317, + 1.1097853405154496, + 1.1165018367275823, + 1.123218332939715, + 1.1299348291518476, + 1.13665132536398, + 1.1433678215761127, + 1.1500843177882454, + 1.1568008140003778, + 1.1635173102125105, + 1.1702338064246431, + 1.1769503026367758, + 1.1836667988489085, + 1.1903832950610411, + 1.1970997912731738, + 1.2038162874853064, + 1.210532783697439, + 1.2172492799095718, + 1.2239657761217044, + 1.230682272333837, + 1.2373987685459698, + 1.2441152647581022, + 1.2508317609702349, + 1.2575482571823675, + 1.2642647533945, + 1.2709812496066326, + 1.2776977458187653, + 1.284414242030898, + 1.2911307382430306, + 1.2978472344551633, + 1.304563730667296, + 1.3112802268794286, + 1.3179967230915612, + 1.324713219303694, + 1.3314297155158266, + 1.3381462117279592, + 1.3448627079400919, + 1.3515792041522243, + 1.358295700364357, + 1.3650121965764896, + 1.371728692788622, + 1.3784451890007547, + 1.3851616852128874, + 1.39187818142502, + 1.3985946776371527, + 1.4053111738492854, + 1.412027670061418, + 1.4187441662735507, + 1.4254606624856834, + 1.432177158697816, + 1.4388936549099487, + 1.4456101511220814, + 1.452326647334214, + 1.4590431435463465, + 1.4657596397584791, + 1.4724761359706118, + 1.4791926321827442, + 1.4859091283948769, + 1.4926256246070095, + 1.4993421208191422, + 1.5060586170312749, + 1.5127751132434075, + 1.5194916094555402, + 1.5262081056676728, + 1.5329246018798055, + 1.5396410980919382, + 1.5463575943040708, + 1.5530740905162035, + 1.5597905867283361, + 1.5665070829404686, + 1.5732235791526012, + 1.5799400753647337, + 1.5866565715768663, + 1.593373067788999, + 1.6000895640011317, + 1.6068060602132643, + 1.613522556425397, + 1.6202390526375297, + 1.6269555488496623, + 1.633672045061795, + 1.6403885412739276, + 1.6471050374860603, + 1.653821533698193, + 1.6605380299103256, + 1.6672545261224583, + 1.673971022334591, + 1.6806875185467236, + 1.6874040147588558, + 1.6941205109709885, + 1.7008370071831211, + 1.7075535033952538, + 1.7142699996073865, + 1.7209864958195191, + 1.7277029920316518, + 1.7344194882437844, + 1.741135984455917, + 1.7478524806680498, + 1.7545689768801824, + 1.761285473092315, + 1.7680019693044478, + 1.7747184655165804, + 1.781434961728713, + 1.7881514579408457, + 1.794867954152978, + 1.8015844503651106, + 1.8083009465772433, + 1.815017442789376, + 1.8217339390015086, + 1.8284504352136413, + 1.835166931425774, + 1.8418834276379066, + 1.8485999238500392, + 1.855316420062172, + 1.8620329162743046, + 1.8687494124864372, + 1.8754659086985699, + 1.8821824049107025, + 1.8888989011228352, + 1.8956153973349679, + 1.9023318935471, + 1.9090483897592327, + 1.9157648859713654, + 1.922481382183498, + 1.9291978783956307, + 1.9359143746077634, + 1.942630870819896, + 1.9493473670320287, + 1.9560638632441614, + 1.962780359456294, + 1.9694968556684267, + 1.9762133518805594, + 1.982929848092692, + 1.9896463443048247, + 1.9963628405169573, + 2.00307933672909, + 2.009795832941222, + 2.016512329153355, + 2.0232288253654875, + 2.02994532157762, + 2.036661817789753, + 2.0433783140018855, + 2.050094810214018, + 2.056811306426151, + 2.0635278026382835, + 2.070244298850416, + 2.076960795062549, + 2.0836772912746815, + 2.090393787486814, + 2.097110283698947, + 2.1038267799110795, + 2.110543276123212, + 2.1172597723353443, + 2.123976268547477, + 2.1306927647596097, + 2.1374092609717423, + 2.144125757183875, + 2.1508422533960077, + 2.1575587496081403, + 2.164275245820273, + 2.1709917420324056, + 2.1777082382445383, + 2.184424734456671, + 2.1911412306688036, + 2.1978577268809363, + 2.204574223093069, + 2.2112907193052016, + 2.2180072155173343, + 2.2247237117294665, + 2.231440207941599, + 2.238156704153732, + 2.2448732003658645, + 2.251589696577997, + 2.25830619279013, + 2.2650226890022624, + 2.271739185214395, + 2.2784556814265278, + 2.2851721776386604, + 2.291888673850793, + 2.2986051700629258, + 2.3053216662750584, + 2.312038162487191, + 2.3187546586993237, + 2.3254711549114564, + 2.3321876511235886, + 2.3389041473357213, + 2.345620643547854, + 2.3523371397599866, + 2.3590536359721193, + 2.365770132184252, + 2.3724866283963846, + 2.3792031246085172, + 2.38591962082065, + 2.3926361170327826, + 2.3993526132449152, + 2.406069109457048, + 2.4127856056691805, + 2.419502101881313, + 2.426218598093446, + 2.4329350943055785, + 2.4396515905177107, + 2.4463680867298434, + 2.453084582941976, + 2.4598010791541087, + 2.4665175753662414, + 2.473234071578374, + 2.4799505677905067, + 2.4866670640026394, + 2.493383560214772, + 2.5001000564269047, + 2.5068165526390374, + 2.51353304885117, + 2.5202495450633027, + 2.5269660412754353, + 2.533682537487568, + 2.5403990336997007, + 2.547115529911833, + 2.5538320261239655, + 2.560548522336098, + 2.567265018548231, + 2.5739815147603635, + 2.580698010972496, + 2.587414507184629, + 2.5941310033967615, + 2.600847499608894, + 2.607563995821027, + 2.6142804920331595, + 2.620996988245292, + 2.627713484457425, + 2.6344299806695575, + 2.64114647688169, + 2.647862973093823, + 2.6545794693059555, + 2.661295965518088, + 2.6680124617302208, + 2.674728957942353, + 2.6814454541544857, + 2.6881619503666183, + 2.694878446578751, + 2.7015949427908836, + 2.7083114390030163, + 2.715027935215149, + 2.7217444314272816, + 2.7284609276394143, + 2.735177423851547, + 2.7418939200636796, + 2.7486104162758123, + 2.755326912487945, + 2.7620434087000776, + 2.7687599049122102, + 2.775476401124343, + 2.7821928973364756, + 2.788909393548608, + 2.7956258897607404, + 2.802342385972873, + 2.8090588821850058, + 2.8157753783971384, + 2.822491874609271, + 2.8292083708214038, + 2.8359248670335364, + 2.842641363245669, + 2.8493578594578017, + 2.8560743556699344, + 2.862790851882067, + 2.8695073480941997, + 2.8762238443063324, + 2.882940340518465, + 2.8896568367305973, + 2.89637333294273, + 2.9030898291548626, + 2.9098063253669952, + 2.916522821579128, + 2.9232393177912606, + 2.929955814003393, + 2.936672310215526, + 2.9433888064276585, + 2.950105302639791, + 2.956821798851924, + 2.9635382950640565, + 2.970254791276189, + 2.976971287488322, + 2.9836877837004545, + 2.990404279912587, + 2.99712077612472, + 3.003837272336852, + 3.0105537685489847, + 3.0172702647611174, + 3.02398676097325, + 3.0307032571853827, + 3.0374197533975154, + 3.044136249609648, + 3.0508527458217807, + 3.0575692420339133, + 3.064285738246046, + 3.0710022344581787, + 3.0777187306703113, + 3.084435226882444, + 3.0911517230945766, + 3.0978682193067093, + 3.1045847155188415, + 3.111301211730974, + 3.118017707943107, + 3.1247342041552395, + 3.131450700367372, + 3.138167196579505, + 3.1448836927916375, + 3.15160018900377, + 3.158316685215903, + 3.1650331814280355, + 3.171749677640168, + 3.178466173852301, + 3.1851826700644335, + 3.191899166276566, + 3.1986156624886988, + 3.2053321587008314, + 3.212048654912964, + 3.2187651511250963, + 3.225481647337229, + 3.2321981435493616, + 3.2389146397614943, + 3.245631135973627, + 3.2523476321857596, + 3.2590641283978923, + 3.265780624610025, + 3.2724971208221576, + 3.2792136170342903, + 3.285930113246423, + 3.2926466094585556, + 3.2993631056706882, + 3.306079601882821, + 3.3127960980949536, + 3.319512594307086, + 3.3262290905192184, + 3.332945586731351, + 3.3396620829434838, + 3.3463785791556164, + 3.353095075367749, + 3.3598115715798818, + 3.3665280677920144, + 3.373244564004147, + 3.3799610602162797, + 3.3866775564284124, + 3.393394052640545, + 3.4001105488526777, + 3.4068270450648104, + 3.413543541276943, + 3.4202600374890757, + 3.4269765337012084, + 3.4336930299133406, + 3.4404095261254732, + 3.447126022337606, + 3.4538425185497386, + 3.460559014761871, + 3.467275510974004, + 3.4739920071861365, + 3.480708503398269, + 3.487424999610402, + 3.4941414958225345, + 3.500857992034667, + 3.5075744882468, + 3.5142909844589325, + 3.521007480671065, + 3.527723976883198, + 3.53444047309533, + 3.5411569693074627, + 3.5478734655195954, + 3.554589961731728, + 3.5613064579438607, + 3.5680229541559934, + 3.574739450368126, + 3.5814559465802587, + 3.5881724427923913, + 3.594888939004524, + 3.6016054352166567, + 3.6083219314287893, + 3.615038427640922, + 3.6217549238530546, + 3.6284714200651873, + 3.63518791627732, + 3.6419044124894526, + 3.648620908701585, + 3.6553374049137175, + 3.66205390112585, + 3.668770397337983, + 3.6754868935501155, + 3.682203389762248, + 3.688919885974381, + 3.6956363821865135, + 3.702352878398646, + 3.709069374610779, + 3.7157858708229115, + 3.722502367035044, + 3.7292188632471768, + 3.7359353594593094, + 3.742651855671442, + 3.7493683518835743, + 3.756084848095707, + 3.7628013443078396, + 3.7695178405199723, + 3.776234336732105, + 3.7829508329442376, + 3.7896673291563703, + 3.796383825368503, + 3.8031003215806356, + 3.8098168177927683, + 3.816533314004901, + 3.8232498102170336, + 3.8299663064291662, + 3.836682802641299, + 3.8433992988534316, + 3.8501157950655642, + 3.856832291277697, + 3.863548787489829, + 3.8702652837019618, + 3.8769817799140944, + 3.883698276126227, + 3.8904147723383598, + 3.8971312685504924, + 3.903847764762625, + 3.9105642609747577, + 3.9172807571868904, + 3.923997253399023, + 3.9307137496111557, + 3.9374302458232884, + 3.944146742035421, + 3.9508632382475537, + 3.9575797344596864, + 3.9642962306718186, + 3.9710127268839512, + 3.977729223096084, + 3.9844457193082166, + 3.991162215520349, + 3.997878711732482, + 4.0045952079446145, + 4.011311704156747, + 4.01802820036888, + 4.0247446965810125, + 4.031461192793145, + 4.038177689005278, + 4.0448941852174105, + 4.051610681429543, + 4.058327177641676, + 4.0650436738538085, + 4.071760170065941, + 4.078476666278073, + 4.085193162490206, + 4.091909658702338, + 4.098626154914471, + 4.105342651126604, + 4.112059147338736, + 4.118775643550869, + 4.1254921397630016, + 4.132208635975134, + 4.138925132187267, + 4.1456416283993995, + 4.152358124611532, + 4.159074620823665, + 4.1657911170357975, + 4.17250761324793, + 4.179224109460063, + 4.1859406056721955, + 4.192657101884328, + 4.199373598096461, + 4.2060900943085935, + 4.212806590520726, + 4.219523086732859, + 4.2262395829449915, + 4.232956079157124, + 4.239672575369257, + 4.2463890715813895, + 4.253105567793522, + 4.259822064005655, + 4.266538560217787, + 4.27325505642992, + 4.279971552642053, + 4.286688048854185, + 4.293404545066317, + 4.30012104127845, + 4.3068375374905825, + 4.313554033702715, + 4.320270529914848, + 4.3269870261269805, + 4.333703522339113, + 4.340420018551246, + 4.3471365147633785, + 4.353853010975511, + 4.360569507187644, + 4.3672860033997765, + 4.374002499611909, + 4.380718995824042, + 4.3874354920361744, + 4.394151988248307, + 4.40086848446044, + 4.407584980672572, + 4.414301476884705, + 4.421017973096838, + 4.42773446930897, + 4.434450965521103, + 4.441167461733236, + 4.447883957945368, + 4.454600454157501, + 4.461316950369634, + 4.468033446581766, + 4.474749942793899, + 4.481466439006032, + 4.488182935218164, + 4.494899431430297, + 4.50161592764243, + 4.5083324238545615, + 4.515048920066694, + 4.521765416278827, + 4.528481912490959, + 4.535198408703092, + 4.541914904915225, + 4.548631401127357, + 4.55534789733949, + 4.562064393551623, + 4.568780889763755, + 4.575497385975888, + 4.582213882188021, + 4.588930378400153, + 4.595646874612286, + 4.602363370824419, + 4.609079867036551, + 4.615796363248684, + 4.622512859460817, + 4.629229355672949, + 4.635945851885082, + 4.642662348097215, + 4.649378844309347, + 4.65609534052148, + 4.662811836733613, + 4.669528332945745, + 4.676244829157878, + 4.682961325370011, + 4.689677821582143, + 4.696394317794276, + 4.703110814006409, + 4.709827310218541, + 4.716543806430674, + 4.723260302642807, + 4.729976798854939, + 4.736693295067072, + 4.743409791279205, + 4.750126287491337, + 4.75684278370347, + 4.763559279915603, + 4.770275776127734, + 4.776992272339867, + 4.783708768552, + 4.790425264764132, + 4.797141760976265, + 4.803858257188398, + 4.81057475340053, + 4.817291249612663, + 4.824007745824796, + 4.830724242036928, + 4.837440738249061, + 4.844157234461194, + 4.850873730673326, + 4.857590226885459, + 4.864306723097592, + 4.871023219309724, + 4.877739715521857, + 4.88445621173399, + 4.891172707946122, + 4.897889204158255, + 4.904605700370388, + 4.91132219658252, + 4.918038692794653, + 4.9247551890067855, + 4.931471685218918, + 4.938188181431051, + 4.9449046776431835, + 4.951621173855316, + 4.958337670067449, + 4.9650541662795815, + 4.971770662491714, + 4.978487158703847, + 4.9852036549159795, + 4.991920151128111, + 4.998636647340244, + 5.005353143552377, + 5.012069639764509, + 5.018786135976642, + 5.025502632188775, + 5.032219128400907, + 5.03893562461304, + 5.045652120825173, + 5.052368617037305, + 5.059085113249438, + 5.0658016094615705, + 5.072518105673703, + 5.079234601885836, + 5.0859510980979685, + 5.092667594310101, + 5.099384090522234, + 5.1061005867343665, + 5.112817082946499, + 5.119533579158632, + 5.1262500753707645, + 5.132966571582897, + 5.13968306779503, + 5.1463995640071625, + 5.153116060219295, + 5.159832556431428, + 5.1665490526435605, + 5.173265548855693, + 5.179982045067826, + 5.186698541279958, + 5.193415037492091, + 5.200131533704223, + 5.2068480299163555, + 5.213564526128488, + 5.220281022340621, + 5.2269975185527535, + 5.233714014764886, + 5.240430510977019, + 5.2471470071891515, + 5.253863503401284, + 5.260579999613417, + 5.2672964958255495, + 5.274012992037682, + 5.280729488249815, + 5.2874459844619475, + 5.29416248067408, + 5.300878976886213, + 5.3075954730983455, + 5.314311969310478, + 5.321028465522611, + 5.327744961734743, + 5.334461457946876, + 5.341177954159009, + 5.347894450371141, + 5.354610946583274, + 5.361327442795407, + 5.368043939007539, + 5.374760435219672, + 5.381476931431805, + 5.388193427643937, + 5.39490992385607, + 5.401626420068203, + 5.408342916280335, + 5.415059412492468, + 5.4217759087046, + 5.4284924049167325, + 5.435208901128865, + 5.441925397340998, + 5.4486418935531304, + 5.455358389765263, + 5.462074885977396, + 5.468791382189528, + 5.475507878401661, + 5.482224374613794, + 5.488940870825926, + 5.495657367038059, + 5.502373863250192, + 5.509090359462324, + 5.515806855674457, + 5.52252335188659, + 5.529239848098722, + 5.535956344310855, + 5.542672840522988, + 5.54938933673512, + 5.556105832947253, + 5.562822329159386, + 5.569538825371518, + 5.576255321583651, + 5.582971817795784, + 5.589688314007916, + 5.596404810220049, + 5.603121306432182, + 5.609837802644314, + 5.616554298856447, + 5.62327079506858, + 5.629987291280711, + 5.636703787492844, + 5.643420283704977, + 5.650136779917109, + 5.656853276129242, + 5.663569772341375, + 5.670286268553507, + 5.67700276476564, + 5.683719260977773, + 5.690435757189905, + 5.697152253402038, + 5.703868749614171, + 5.710585245826303, + 5.717301742038436, + 5.724018238250569, + 5.730734734462701, + 5.737451230674834, + 5.744167726886967, + 5.750884223099099, + 5.757600719311232, + 5.764317215523365, + 5.771033711735497, + 5.77775020794763, + 5.784466704159763, + 5.791183200371895, + 5.797899696584028, + 5.804616192796161, + 5.811332689008293, + 5.818049185220426, + 5.824765681432559, + 5.831482177644691, + 5.838198673856824, + 5.8449151700689566, + 5.851631666281088, + 5.858348162493221, + 5.865064658705354, + 5.871781154917486, + 5.878497651129619, + 5.885214147341752, + 5.891930643553884, + 5.898647139766017, + 5.90536363597815, + 5.912080132190282, + 5.918796628402415, + 5.925513124614548, + 5.93222962082668, + 5.938946117038813, + 5.945662613250946, + 5.952379109463078, + 5.959095605675211, + 5.965812101887344, + 5.972528598099476, + 5.979245094311609, + 5.9859615905237415, + 5.992678086735874, + 5.999394582948007, + 6.0061110791601395, + 6.012827575372272, + 6.019544071584405, + 6.0262605677965375, + 6.03297706400867, + 6.039693560220803, + 6.0464100564329355, + 6.053126552645068, + 6.0598430488572, + 6.066559545069333, + 6.073276041281465, + 6.079992537493598, + 6.086709033705731, + 6.093425529917863, + 6.100142026129996, + 6.106858522342129, + 6.113575018554261, + 6.120291514766394, + 6.1270080109785265, + 6.133724507190659, + 6.140441003402792, + 6.1471574996149245, + 6.153873995827057, + 6.16059049203919, + 6.1673069882513225, + 6.174023484463455, + 6.180739980675588, + 6.1874564768877205, + 6.194172973099853, + 6.200889469311986, + 6.2076059655241185, + 6.214322461736251, + 6.221038957948384, + 6.2277554541605165, + 6.234471950372649, + 6.241188446584782, + 6.247904942796914, + 6.254621439009047, + 6.26133793522118, + 6.268054431433312, + 6.274770927645445, + 6.281487423857577, + 6.2882039200697095, + 6.294920416281842, + 6.301636912493975, + 6.3083534087061075, + 6.31506990491824, + 6.321786401130373, + 6.3285028973425055, + 6.335219393554638, + 6.341935889766771, + 6.3486523859789035, + 6.355368882191036, + 6.362085378403169, + 6.3688018746153015, + 6.375518370827434, + 6.382234867039567, + 6.388951363251699, + 6.395667859463832, + 6.402384355675965, + 6.409100851888097, + 6.41581734810023, + 6.422533844312363, + 6.429250340524495, + 6.435966836736628, + 6.442683332948761, + 6.449399829160893, + 6.456116325373026, + 6.462832821585159, + 6.469549317797291, + 6.476265814009424, + 6.482982310221557, + 6.4896988064336885, + 6.496415302645821, + 6.503131798857954, + 6.509848295070086, + 6.516564791282219, + 6.523281287494352, + 6.529997783706484, + 6.536714279918617, + 6.54343077613075, + 6.550147272342882, + 6.556863768555015, + 6.563580264767148, + 6.57029676097928, + 6.577013257191413, + 6.583729753403546, + 6.590446249615678, + 6.597162745827811, + 6.603879242039944, + 6.610595738252076, + 6.617312234464209, + 6.624028730676342, + 6.630745226888474, + 6.637461723100607, + 6.64417821931274, + 6.650894715524872, + 6.657611211737005, + 6.664327707949138, + 6.67104420416127, + 6.677760700373403, + 6.684477196585536, + 6.691193692797668, + 6.697910189009801, + 6.704626685221934, + 6.711343181434065, + 6.718059677646198, + 6.724776173858331, + 6.731492670070463, + 6.738209166282596, + 6.744925662494729, + 6.751642158706861, + 6.758358654918994, + 6.765075151131127, + 6.771791647343259, + 6.778508143555392, + 6.785224639767525, + 6.791941135979657, + 6.79865763219179, + 6.805374128403923, + 6.812090624616055, + 6.818807120828188, + 6.825523617040321, + 6.832240113252453, + 6.838956609464586, + 6.845673105676719, + 6.852389601888851, + 6.859106098100984, + 6.865822594313117, + 6.872539090525249, + 6.879255586737382, + 6.885972082949515, + 6.892688579161647, + 6.89940507537378, + 6.9061215715859126, + 6.912838067798045, + 6.919554564010177, + 6.92627106022231, + 6.932987556434442, + 6.939704052646575, + 6.946420548858708, + 6.95313704507084, + 6.959853541282973, + 6.966570037495106, + 6.973286533707238, + 6.980003029919371, + 6.986719526131504, + 6.993436022343636, + 7.000152518555769, + 7.006869014767902, + 7.013585510980034, + 7.020302007192167, + 7.0270185034043, + 7.033734999616432, + 7.040451495828565, + 7.0471679920406975, + 7.05388448825283, + 7.060600984464963, + 7.0673174806770955, + 7.074033976889228, + 7.080750473101361, + 7.0874669693134935, + 7.094183465525626, + 7.100899961737759, + 7.1076164579498915, + 7.114332954162024, + 7.121049450374157, + 7.1277659465862895, + 7.134482442798422, + 7.141198939010554, + 7.147915435222687, + 7.154631931434819, + 7.161348427646952, + 7.168064923859085, + 7.174781420071217, + 7.18149791628335, + 7.1882144124954825, + 7.194930908707615, + 7.201647404919748, + 7.2083639011318805, + 7.215080397344013, + 7.221796893556146, + 7.2285133897682785, + 7.235229885980411, + 7.241946382192544, + 7.2486628784046765, + 7.255379374616809, + 7.262095870828942, + 7.2688123670410745, + 7.275528863253207, + 7.28224535946534, + 7.2889618556774725, + 21.316246549479136 + ], + "y": [ + 0, + 0, + 1.4705882352941175, + 1.4705882352941175, + 1.4705882352941175, + 1.4705882352941175, + 1.4705882352941175, + 1.4705882352941175, + 1.4705882352941175, + 1.4705882352941175, + 1.4705882352941175, + 1.4705882352941175, + 2.941176470588235, + 2.941176470588235, + 2.941176470588235, + 2.941176470588235, + 2.941176470588235, + 2.941176470588235, + 2.941176470588235, + 2.941176470588235, + 2.941176470588235, + 2.941176470588235, + 2.941176470588235, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 4.411764705882353, + 5.88235294117647, + 5.88235294117647, + 5.88235294117647, + 5.88235294117647, + 5.88235294117647, + 5.88235294117647, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 7.352941176470589, + 8.823529411764707, + 8.823529411764707, + 8.823529411764707, + 8.823529411764707, + 8.823529411764707, + 8.823529411764707, + 8.823529411764707, + 10.294117647058822, + 10.294117647058822, + 10.294117647058822, + 10.294117647058822, + 10.294117647058822, + 10.294117647058822, + 10.294117647058822, + 10.294117647058822, + 10.294117647058822, + 13.23529411764706, + 13.23529411764706, + 13.23529411764706, + 13.23529411764706, + 13.23529411764706, + 13.23529411764706, + 13.23529411764706, + 13.23529411764706, + 13.23529411764706, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 14.705882352941178, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 16.176470588235293, + 17.647058823529413, + 17.647058823529413, + 17.647058823529413, + 17.647058823529413, + 17.647058823529413, + 17.647058823529413, + 17.647058823529413, + 19.11764705882353, + 19.11764705882353, + 19.11764705882353, + 19.11764705882353, + 19.11764705882353, + 19.11764705882353, + 19.11764705882353, + 20.588235294117645, + 20.588235294117645, + 20.588235294117645, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 22.058823529411764, + 23.52941176470588, + 23.52941176470588, + 23.52941176470588, + 23.52941176470588, + 23.52941176470588, + 23.52941176470588, + 23.52941176470588, + 23.52941176470588, + 23.52941176470588, + 23.52941176470588, + 23.52941176470588, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 26.47058823529412, + 27.941176470588236, + 27.941176470588236, + 27.941176470588236, + 27.941176470588236, + 27.941176470588236, + 27.941176470588236, + 27.941176470588236, + 29.411764705882355, + 29.411764705882355, + 29.411764705882355, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 30.88235294117647, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 32.35294117647059, + 33.82352941176471, + 33.82352941176471, + 35.294117647058826, + 35.294117647058826, + 35.294117647058826, + 36.76470588235294, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 38.23529411764706, + 39.705882352941174, + 41.17647058823529, + 41.17647058823529, + 41.17647058823529, + 41.17647058823529, + 41.17647058823529, + 41.17647058823529, + 41.17647058823529, + 41.17647058823529, + 41.17647058823529, + 42.64705882352941, + 44.11764705882353, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 45.588235294117645, + 47.05882352941176, + 47.05882352941176, + 47.05882352941176, + 47.05882352941176, + 47.05882352941176, + 47.05882352941176, + 47.05882352941176, + 47.05882352941176, + 47.05882352941176, + 48.529411764705884, + 48.529411764705884, + 48.529411764705884, + 48.529411764705884, + 48.529411764705884, + 48.529411764705884, + 48.529411764705884, + 48.529411764705884, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 50, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 51.470588235294116, + 52.94117647058824, + 52.94117647058824, + 54.41176470588235, + 54.41176470588235, + 54.41176470588235, + 54.41176470588235, + 54.41176470588235, + 54.41176470588235, + 54.41176470588235, + 54.41176470588235, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 55.88235294117647, + 57.35294117647059, + 57.35294117647059, + 57.35294117647059, + 57.35294117647059, + 57.35294117647059, + 57.35294117647059, + 57.35294117647059, + 58.82352941176471, + 58.82352941176471, + 58.82352941176471, + 58.82352941176471, + 58.82352941176471, + 58.82352941176471, + 58.82352941176471, + 60.29411764705882, + 60.29411764705882, + 60.29411764705882, + 60.29411764705882, + 60.29411764705882, + 61.76470588235294, + 61.76470588235294, + 61.76470588235294, + 61.76470588235294, + 61.76470588235294, + 61.76470588235294, + 61.76470588235294, + 61.76470588235294, + 61.76470588235294, + 61.76470588235294, + 61.76470588235294, + 61.76470588235294, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 63.23529411764706, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 64.70588235294117, + 66.17647058823529, + 66.17647058823529, + 66.17647058823529, + 66.17647058823529, + 66.17647058823529, + 66.17647058823529, + 66.17647058823529, + 66.17647058823529, + 66.17647058823529, + 66.17647058823529, + 66.17647058823529, + 66.17647058823529, + 67.64705882352942, + 67.64705882352942, + 67.64705882352942, + 67.64705882352942, + 67.64705882352942, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 69.11764705882352, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 70.58823529411765, + 72.05882352941177, + 72.05882352941177, + 72.05882352941177, + 72.05882352941177, + 72.05882352941177, + 72.05882352941177, + 72.05882352941177, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 73.52941176470588, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 76.47058823529412, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 77.94117647058823, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 79.41176470588235, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 80.88235294117648, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 82.35294117647058, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 83.82352941176471, + 100 + ] + } + ], + "layout": { + "autosize": true, + "height": 600, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Cumulative Error Distribution" + }, + "updatemenus": [ + { + "buttons": [ + { + "args": [ + { + "xaxis.type": "linear" + } + ], + "label": "Linear Scale", + "method": "relayout" + }, + { + "args": [ + { + "xaxis.type": "log" + } + ], + "label": "Log Scale", + "method": "relayout" + } + ], + "direction": "down", + "type": "dropdown", + "x": 1, + "y": 1.1 + } + ], + "width": 1200, + "xaxis": { + "showspikes": true, + "title": { + "text": "Mean squared error" + } + }, + "yaxis": { + "showspikes": true, + "title": { + "text": "The proportion of the sample to the total sample [%]" + } + } + } + }, + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "hovertemplate": "F1: %{y:.3f}
Confidence: %{x:.3f}
", + "mode": "lines", + "name": "F1-Confidence", + "showlegend": true, + "type": "scatter", + "x": [ + 0.8770491988640093, + 0.8770491988640093, + 0.8669724982899131, + 0.8555045935055295, + 0.8555045935055295, + 0.8539823159081444, + 0.8536036284447363, + 0.8536036284447363, + 0.8532110244132709, + 0.8502216765859935, + 0.8502216765859935, + 0.8469827482088766, + 0.8466981220317422, + 0.8466981220317422, + 0.8454545632678142, + 0.8378378462348404, + 0.837405568485196, + 0.837405568485196, + 0.8347826155407965, + 0.8340909126535628, + 0.8340909126535628, + 0.83333686534658, + 0.8299180401723787, + 0.8299180401723787, + 0.8291009702825642, + 0.8280059714278117, + 0.8280059714278117, + 0.8270236939156952, + 0.826446266417243, + 0.8256880766599867, + 0.8256880766599867, + 0.8256302369562283, + 0.8243801588117039, + 0.8243801588117039, + 0.8208333369256761, + 0.8202770609714033, + 0.8202770609714033, + 0.8193277134364069, + 0.8166577490136832, + 0.8166577490136832, + 0.8155737806287552, + 0.8151260582588365, + 0.8151260582588365, + 0.815040640433711, + 0.8144884328896114, + 0.8137288743318718, + 0.8137288743318718, + 0.8135246082656342, + 0.813349095053002, + 0.813349095053002, + 0.8128867104363982, + 0.812500017382303, + 0.812500017382303, + 0.8110619000381428, + 0.8104166927111511, + 0.8104166927111511, + 0.8094262370385038, + 0.8090280008578195, + 0.8089430771073715, + 0.8089430771073715, + 0.8088235347390151, + 0.8057851280154124, + 0.8057851280154124, + 0.8051180968726798, + 0.80156080940293, + 0.80156080940293, + 0.8004032294511281, + 0.7990230022338877, + 0.7990230022338877, + 0.7967625932747874, + 0.7956521927371903, + 0.7956521927371903, + 0.7931034364224134, + 0.7909482724982525, + 0.7870950348958757, + 0.7870950348958757, + 0.7815126175991072, + 0.7815125994864556, + 0.7815125994864556, + 0.7750000197578847, + 0.772522532144088, + 0.772522532144088, + 0.7641479929882528, + 0.7501480279383034, + 0.7501480279383034, + 0.7390078506457206, + 0.7333250367805633, + 0.7315051476549976, + 0.7315051476549976, + 0.730955603198065, + 0.7275309230134186, + 0.7275309230134186, + 0.7246038698847924, + 0.7228355146439156, + 0.7228355146439156, + 0.7204743691053372, + 0.7175907573437832, + 0.7175907573437832, + 0.716898144922148, + 0, + 0, + 0.8770491988640093, + 0.8770491988640093, + 0.8669724982899131, + 0.8555045935055295, + 0.8555045935055295, + 0.8539823159081444, + 0.8536036284447363, + 0.8536036284447363, + 0.8532110244132709, + 0.8502216765859935, + 0.8502216765859935, + 0.8469827482088766, + 0.8466981220317422, + 0.8466981220317422, + 0.8454545632678142, + 0.8378378462348404, + 0.837405568485196, + 0.837405568485196, + 0.8347826155407965, + 0.8340909126535628, + 0.8340909126535628, + 0.83333686534658, + 0.8299180401723787, + 0.8299180401723787, + 0.8291009702825642, + 0.8280059714278117, + 0.8280059714278117, + 0.8270236939156952, + 0.826446266417243, + 0.8256880766599867, + 0.8256880766599867, + 0.8256302369562283, + 0.8243801588117039, + 0.8243801588117039, + 0.8208333369256761, + 0.8202770609714033, + 0.8202770609714033, + 0.8193277134364069, + 0.8166577490136832, + 0.8166577490136832, + 0.8155737806287552, + 0.8151260582588365, + 0.8151260582588365, + 0.815040640433711, + 0.8144884328896114, + 0.8137288743318718, + 0.8137288743318718, + 0.8135246082656342, + 0.813349095053002, + 0.813349095053002, + 0.8128867104363982, + 0.812500017382303, + 0.812500017382303, + 0.8110619000381428, + 0.8104166927111511, + 0.8104166927111511, + 0.8094262370385038, + 0.8090280008578195, + 0.8089430771073715, + 0.8089430771073715, + 0.8088235347390151, + 0.8057851280154124, + 0.8057851280154124, + 0.8051180968726798, + 0.80156080940293, + 0.80156080940293, + 0.8004032294511281, + 0.7990230022338877, + 0.7990230022338877, + 0.7967625932747874, + 0.7956521927371903, + 0.7956521927371903, + 0.7931034364224134, + 0.7909482724982525, + 0.7870950348958757, + 0.7870950348958757, + 0.7815126175991072, + 0.7815125994864556, + 0.7815125994864556, + 0.7750000197578847, + 0.772522532144088, + 0.772522532144088, + 0.7641479929882528, + 0.7501480279383034, + 0.7501480279383034, + 0.7390078506457206, + 0.7333250367805633, + 0.7315051476549976, + 0.7315051476549976, + 0.730955603198065, + 0.7275309230134186, + 0.7275309230134186, + 0.7246038698847924, + 0.7228355146439156, + 0.7228355146439156, + 0.7204743691053372, + 0.7175907573437832, + 0.7175907573437832, + 0.716898144922148, + 0, + 0, + 0.8770491988640093, + 0.8770491988640093, + 0.8669724982899131, + 0.8555045935055295, + 0.8555045935055295, + 0.8539823159081444, + 0.8536036284447363, + 0.8536036284447363, + 0.8532110244132709, + 0.8502216765859935, + 0.8502216765859935, + 0.8469827482088766, + 0.8466981220317422, + 0.8466981220317422, + 0.8454545632678142, + 0.8378378462348404, + 0.837405568485196, + 0.837405568485196, + 0.8347826155407965, + 0.8340909126535628, + 0.8340909126535628, + 0.83333686534658, + 0.8299180401723787, + 0.8299180401723787, + 0.8291009702825642, + 0.8280059714278117, + 0.8280059714278117, + 0.8270236939156952, + 0.826446266417243, + 0.8256880766599867, + 0.8256880766599867, + 0.8256302369562283, + 0.8243801588117039, + 0.8243801588117039, + 0.8208333369256761, + 0.8202770609714033, + 0.8202770609714033, + 0.8193277134364069, + 0.8166577490136832, + 0.8166577490136832, + 0.8155737806287552, + 0.8151260582588365, + 0.8151260582588365, + 0.815040640433711, + 0.8144884328896114, + 0.8137288743318718, + 0.8137288743318718, + 0.8135246082656342, + 0.813349095053002, + 0.813349095053002, + 0.8128867104363982, + 0.812500017382303, + 0.812500017382303, + 0.8110619000381428, + 0.8104166927111511, + 0.8104166927111511, + 0.8094262370385038, + 0.8090280008578195, + 0.8089430771073715, + 0.8089430771073715, + 0.8088235347390151, + 0.8057851280154124, + 0.8057851280154124, + 0.8051180968726798, + 0.80156080940293, + 0.80156080940293, + 0.8004032294511281, + 0.7990230022338877, + 0.7990230022338877, + 0.7967625932747874, + 0.7956521927371903, + 0.7956521927371903, + 0.7931034364224134, + 0.7909482724982525, + 0.7870950348958757, + 0.7870950348958757, + 0.7815126175991072, + 0.7815125994864556, + 0.7815125994864556, + 0.7750000197578847, + 0.772522532144088, + 0.772522532144088, + 0.7641479929882528, + 0.7501480279383034, + 0.7501480279383034, + 0.7390078506457206, + 0.7333250367805633, + 0.7315051476549976, + 0.7315051476549976, + 0.730955603198065, + 0.7275309230134186, + 0.7275309230134186, + 0.7246038698847924, + 0.7228355146439156, + 0.7228355146439156, + 0.7204743691053372, + 0.7175907573437832, + 0.7175907573437832, + 0.716898144922148, + 0, + 0, + 0.8770491988640093, + 0.8770491988640093, + 0.8669724982899131, + 0.8555045935055295, + 0.8555045935055295, + 0.8539823159081444, + 0.8536036284447363, + 0.8536036284447363, + 0.8532110244132709, + 0.8502216765859935, + 0.8502216765859935, + 0.8469827482088766, + 0.8466981220317422, + 0.8466981220317422, + 0.8454545632678142, + 0.8378378462348404, + 0.837405568485196, + 0.837405568485196, + 0.8347826155407965, + 0.8340909126535628, + 0.8340909126535628, + 0.83333686534658, + 0.8299180401723787, + 0.8299180401723787, + 0.8291009702825642, + 0.8280059714278117, + 0.8280059714278117, + 0.8270236939156952, + 0.826446266417243, + 0.8256880766599867, + 0.8256880766599867, + 0.8256302369562283, + 0.8243801588117039, + 0.8243801588117039, + 0.8208333369256761, + 0.8202770609714033, + 0.8202770609714033, + 0.8193277134364069, + 0.8166577490136832, + 0.8166577490136832, + 0.8155737806287552, + 0.8151260582588365, + 0.8151260582588365, + 0.815040640433711, + 0.8144884328896114, + 0.8137288743318718, + 0.8137288743318718, + 0.8135246082656342, + 0.813349095053002, + 0.813349095053002, + 0.8128867104363982, + 0.812500017382303, + 0.812500017382303, + 0.8110619000381428, + 0.8104166927111511, + 0.8104166927111511, + 0.8094262370385038, + 0.8090280008578195, + 0.8089430771073715, + 0.8089430771073715, + 0.8088235347390151, + 0.8057851280154124, + 0.8057851280154124, + 0.8051180968726798, + 0.80156080940293, + 0.80156080940293, + 0.8004032294511281, + 0.7990230022338877, + 0.7990230022338877, + 0.7967625932747874, + 0.7956521927371903, + 0.7956521927371903, + 0.7931034364224134, + 0.7909482724982525, + 0.7870950348958757, + 0.7870950348958757, + 0.7815126175991072, + 0.7815125994864556, + 0.7815125994864556, + 0.7750000197578847, + 0.772522532144088, + 0.772522532144088, + 0.7641479929882528, + 0.7501480279383034, + 0.7501480279383034, + 0.7390078506457206, + 0.7333250367805633, + 0.7315051476549976, + 0.7315051476549976, + 0.730955603198065, + 0.7275309230134186, + 0.7275309230134186, + 0.7246038698847924, + 0.7228355146439156, + 0.7228355146439156, + 0.7204743691053372, + 0.7175907573437832, + 0.7175907573437832, + 0.716898144922148, + 0, + 0, + 0.8770491988640093, + 0.8770491988640093, + 0.8669724982899131, + 0.8555045935055295, + 0.8555045935055295, + 0.8539823159081444, + 0.8536036284447363, + 0.8536036284447363, + 0.8532110244132709, + 0.8502216765859935, + 0.8502216765859935, + 0.8469827482088766, + 0.8466981220317422, + 0.8466981220317422, + 0.8454545632678142, + 0.8378378462348404, + 0.837405568485196, + 0.837405568485196, + 0.8347826155407965, + 0.8340909126535628, + 0.8340909126535628, + 0.83333686534658, + 0.8299180401723787, + 0.8299180401723787, + 0.8291009702825642, + 0.8280059714278117, + 0.8280059714278117, + 0.8270236939156952, + 0.826446266417243, + 0.8256880766599867, + 0.8256880766599867, + 0.8256302369562283, + 0.8243801588117039, + 0.8243801588117039, + 0.8208333369256761, + 0.8202770609714033, + 0.8202770609714033, + 0.8193277134364069, + 0.8166577490136832, + 0.8166577490136832, + 0.8155737806287552, + 0.8151260582588365, + 0.8151260582588365, + 0.815040640433711, + 0.8144884328896114, + 0.8137288743318718, + 0.8137288743318718, + 0.8135246082656342, + 0.813349095053002, + 0.813349095053002, + 0.8128867104363982, + 0.812500017382303, + 0.812500017382303, + 0.8110619000381428, + 0.8104166927111511, + 0.8104166927111511, + 0.8094262370385038, + 0.8090280008578195, + 0.8089430771073715, + 0.8089430771073715, + 0.8088235347390151, + 0.8057851280154124, + 0.8057851280154124, + 0.8051180968726798, + 0.80156080940293, + 0.80156080940293, + 0.8004032294511281, + 0.7990230022338877, + 0.7990230022338877, + 0.7967625932747874, + 0.7956521927371903, + 0.7956521927371903, + 0.7931034364224134, + 0.7909482724982525, + 0.7870950348958757, + 0.7870950348958757, + 0.7815126175991072, + 0.7815125994864556, + 0.7815125994864556, + 0.7750000197578847, + 0.772522532144088, + 0.772522532144088, + 0.7641479929882528, + 0.7501480279383034, + 0.7501480279383034, + 0.7390078506457206, + 0.7333250367805633, + 0.7315051476549976, + 0.7315051476549976, + 0.730955603198065, + 0.7275309230134186, + 0.7275309230134186, + 0.7246038698847924, + 0.7228355146439156, + 0.7228355146439156, + 0.7204743691053372, + 0.7175907573437832, + 0.7175907573437832, + 0.716898144922148, + 0, + 0, + 0.8770491988640093, + 0.8770491988640093, + 0.8669724982899131, + 0.8555045935055295, + 0.8555045935055295, + 0.8539823159081444, + 0.8536036284447363, + 0.8536036284447363, + 0.8532110244132709, + 0.8502216765859935, + 0.8502216765859935, + 0.8469827482088766, + 0.8466981220317422, + 0.8466981220317422, + 0.8454545632678142, + 0.8378378462348404, + 0.837405568485196, + 0.837405568485196, + 0.8347826155407965, + 0.8340909126535628, + 0.8340909126535628, + 0.83333686534658, + 0.8299180401723787, + 0.8299180401723787, + 0.8291009702825642, + 0.8280059714278117, + 0.8280059714278117, + 0.8270236939156952, + 0.826446266417243, + 0.8256880766599867, + 0.8256880766599867, + 0.8256302369562283, + 0.8243801588117039, + 0.8243801588117039, + 0.8208333369256761, + 0.8202770609714033, + 0.8202770609714033, + 0.8193277134364069, + 0.8166577490136832, + 0.8166577490136832, + 0.8155737806287552, + 0.8151260582588365, + 0.8151260582588365, + 0.815040640433711, + 0.8144884328896114, + 0.8137288743318718, + 0.8137288743318718, + 0.8135246082656342, + 0.813349095053002, + 0.813349095053002, + 0.8128867104363982, + 0.812500017382303, + 0.812500017382303, + 0.8110619000381428, + 0.8104166927111511, + 0.8104166927111511, + 0.8094262370385038, + 0.8090280008578195, + 0.8089430771073715, + 0.8089430771073715, + 0.8088235347390151, + 0.8057851280154124, + 0.8057851280154124, + 0.8051180968726798, + 0.80156080940293, + 0.80156080940293, + 0.8004032294511281, + 0.7990230022338877, + 0.7990230022338877, + 0.7967625932747874, + 0.7956521927371903, + 0.7956521927371903, + 0.7931034364224134, + 0.7909482724982525, + 0.7870950348958757, + 0.7870950348958757, + 0.7815126175991072, + 0.7815125994864556, + 0.7815125994864556, + 0.7750000197578847, + 0.772522532144088, + 0.772522532144088, + 0.7641479929882528, + 0.7501480279383034, + 0.7501480279383034, + 0.7390078506457206, + 0.7333250367805633, + 0.7315051476549976, + 0.7315051476549976, + 0.730955603198065, + 0.7275309230134186, + 0.7275309230134186, + 0.7246038698847924, + 0.7228355146439156, + 0.7228355146439156, + 0.7204743691053372, + 0.7175907573437832, + 0.7175907573437832, + 0.716898144922148, + 0, + 0, + 0.8770491988640093, + 0.8770491988640093, + 0.8669724982899131, + 0.8555045935055295, + 0.8555045935055295, + 0.8539823159081444, + 0.8536036284447363, + 0.8536036284447363, + 0.8532110244132709, + 0.8502216765859935, + 0.8502216765859935, + 0.8469827482088766, + 0.8466981220317422, + 0.8466981220317422, + 0.8454545632678142, + 0.8378378462348404, + 0.837405568485196, + 0.837405568485196, + 0.8347826155407965, + 0.8340909126535628, + 0.8340909126535628, + 0.83333686534658, + 0.8299180401723787, + 0.8299180401723787, + 0.8291009702825642, + 0.8280059714278117, + 0.8280059714278117, + 0.8270236939156952, + 0.826446266417243, + 0.8256880766599867, + 0.8256880766599867, + 0.8256302369562283, + 0.8243801588117039, + 0.8243801588117039, + 0.8208333369256761, + 0.8202770609714033, + 0.8202770609714033, + 0.8193277134364069, + 0.8166577490136832, + 0.8166577490136832, + 0.8155737806287552, + 0.8151260582588365, + 0.8151260582588365, + 0.815040640433711, + 0.8144884328896114, + 0.8137288743318718, + 0.8137288743318718, + 0.8135246082656342, + 0.813349095053002, + 0.813349095053002, + 0.8128867104363982, + 0.812500017382303, + 0.812500017382303, + 0.8110619000381428, + 0.8104166927111511, + 0.8104166927111511, + 0.8094262370385038, + 0.8090280008578195, + 0.8089430771073715, + 0.8089430771073715, + 0.8088235347390151, + 0.8057851280154124, + 0.8057851280154124, + 0.8051180968726798, + 0.80156080940293, + 0.80156080940293, + 0.8004032294511281, + 0.7990230022338877, + 0.7990230022338877, + 0.7967625932747874, + 0.7956521927371903, + 0.7956521927371903, + 0.7931034364224134, + 0.7909482724982525, + 0.7870950348958757, + 0.7870950348958757, + 0.7815126175991072, + 0.7815125994864556, + 0.7815125994864556, + 0.7750000197578847, + 0.772522532144088, + 0.772522532144088, + 0.7641479929882528, + 0.7501480279383034, + 0.7501480279383034, + 0.7390078506457206, + 0.7333250367805633, + 0.7315051476549976, + 0.7315051476549976, + 0.730955603198065, + 0.7275309230134186, + 0.7275309230134186, + 0.7246038698847924, + 0.7228355146439156, + 0.7228355146439156, + 0.7204743691053372, + 0.7175907573437832, + 0.7175907573437832, + 0.716898144922148, + 0, + 0, + 0.8770491988640093, + 0.8770491988640093, + 0.8669724982899131, + 0.8555045935055295, + 0.8555045935055295, + 0.8539823159081444, + 0.8536036284447363, + 0.8536036284447363, + 0.8532110244132709, + 0.8502216765859935, + 0.8502216765859935, + 0.8469827482088766, + 0.8466981220317422, + 0.8466981220317422, + 0.8454545632678142, + 0.8378378462348404, + 0.837405568485196, + 0.837405568485196, + 0.8347826155407965, + 0.8340909126535628, + 0.8340909126535628, + 0.83333686534658, + 0.8299180401723787, + 0.8299180401723787, + 0.8291009702825642, + 0.8280059714278117, + 0.8280059714278117, + 0.8270236939156952, + 0.826446266417243, + 0.8256880766599867, + 0.8256880766599867, + 0.8256302369562283, + 0.8243801588117039, + 0.8243801588117039, + 0.8208333369256761, + 0.8202770609714033, + 0.8202770609714033, + 0.8193277134364069, + 0.8166577490136832, + 0.8166577490136832, + 0.8155737806287552, + 0.8151260582588365, + 0.8151260582588365, + 0.815040640433711, + 0.8144884328896114, + 0.8137288743318718, + 0.8137288743318718, + 0.8135246082656342, + 0.813349095053002, + 0.813349095053002, + 0.8128867104363982, + 0.812500017382303, + 0.812500017382303, + 0.8110619000381428, + 0.8104166927111511, + 0.8104166927111511, + 0.8094262370385038, + 0.8090280008578195, + 0.8089430771073715, + 0.8089430771073715, + 0.8088235347390151, + 0.8057851280154124, + 0.8057851280154124, + 0.8051180968726798, + 0.80156080940293, + 0.80156080940293, + 0.8004032294511281, + 0.7990230022338877, + 0.7990230022338877, + 0.7967625932747874, + 0.7956521927371903, + 0.7956521927371903, + 0.7931034364224134, + 0.7909482724982525, + 0.7870950348958757, + 0.7870950348958757, + 0.7815126175991072, + 0.7815125994864556, + 0.7815125994864556, + 0.7750000197578847, + 0.772522532144088, + 0.772522532144088, + 0.7641479929882528, + 0.7501480279383034, + 0.7501480279383034, + 0.7390078506457206, + 0.7333250367805633, + 0.7315051476549976, + 0.7315051476549976, + 0.730955603198065, + 0.7275309230134186, + 0.7275309230134186, + 0.7246038698847924, + 0.7228355146439156, + 0.7228355146439156, + 0.7204743691053372, + 0.7175907573437832, + 0.7175907573437832, + 0.716898144922148, + 0, + 0, + 0.8770491988640093, + 0.8770491988640093, + 0.8669724982899131, + 0.8555045935055295, + 0.8555045935055295, + 0.8539823159081444, + 0.8536036284447363, + 0.8536036284447363, + 0.8532110244132709, + 0.8502216765859935, + 0.8502216765859935, + 0.8469827482088766, + 0.8466981220317422, + 0.8466981220317422, + 0.8454545632678142, + 0.8378378462348404, + 0.837405568485196, + 0.837405568485196, + 0.8347826155407965, + 0.8340909126535628, + 0.8340909126535628, + 0.83333686534658, + 0.8299180401723787, + 0.8299180401723787, + 0.8291009702825642, + 0.8280059714278117, + 0.8280059714278117, + 0.8270236939156952, + 0.826446266417243, + 0.8256880766599867, + 0.8256880766599867, + 0.8256302369562283, + 0.8243801588117039, + 0.8243801588117039, + 0.8208333369256761, + 0.8202770609714033, + 0.8202770609714033, + 0.8193277134364069, + 0.8166577490136832, + 0.8166577490136832, + 0.8155737806287552, + 0.8151260582588365, + 0.8151260582588365, + 0.815040640433711, + 0.8144884328896114, + 0.8137288743318718, + 0.8137288743318718, + 0.8135246082656342, + 0.813349095053002, + 0.813349095053002, + 0.8128867104363982, + 0.812500017382303, + 0.812500017382303, + 0.8110619000381428, + 0.8104166927111511, + 0.8104166927111511, + 0.8094262370385038, + 0.8090280008578195, + 0.8089430771073715, + 0.8089430771073715, + 0.8088235347390151, + 0.8057851280154124, + 0.8057851280154124, + 0.8051180968726798, + 0.80156080940293, + 0.80156080940293, + 0.8004032294511281, + 0.7990230022338877, + 0.7990230022338877, + 0.7967625932747874, + 0.7956521927371903, + 0.7956521927371903, + 0.7931034364224134, + 0.7909482724982525, + 0.7870950348958757, + 0.7870950348958757, + 0.7815126175991072, + 0.7815125994864556, + 0.7815125994864556, + 0.7750000197578847, + 0.772522532144088, + 0.772522532144088, + 0.7641479929882528, + 0.7501480279383034, + 0.7501480279383034, + 0.7390078506457206, + 0.7333250367805633, + 0.7315051476549976, + 0.7315051476549976, + 0.730955603198065, + 0.7275309230134186, + 0.7275309230134186, + 0.7246038698847924, + 0.7228355146439156, + 0.7228355146439156, + 0.7204743691053372, + 0.7175907573437832, + 0.7175907573437832, + 0.716898144922148, + 0, + 0, + 0.8770491988640093, + 0.8770491988640093, + 0.8669724982899131, + 0.8555045935055295, + 0.8555045935055295, + 0.8539823159081444, + 0.8536036284447363, + 0.8536036284447363, + 0.8532110244132709, + 0.8502216765859935, + 0.8502216765859935, + 0.8469827482088766, + 0.8466981220317422, + 0.8466981220317422, + 0.8454545632678142, + 0.8378378462348404, + 0.837405568485196, + 0.837405568485196, + 0.8347826155407965, + 0.8340909126535628, + 0.8340909126535628, + 0.83333686534658, + 0.8299180401723787, + 0.8299180401723787, + 0.8291009702825642, + 0.8280059714278117, + 0.8280059714278117, + 0.8270236939156952, + 0.826446266417243, + 0.8256880766599867, + 0.8256880766599867, + 0.8256302369562283, + 0.8243801588117039, + 0.8243801588117039, + 0.8208333369256761, + 0.8202770609714033, + 0.8202770609714033, + 0.8193277134364069, + 0.8166577490136832, + 0.8166577490136832, + 0.8155737806287552, + 0.8151260582588365, + 0.8151260582588365, + 0.815040640433711, + 0.8144884328896114, + 0.8137288743318718, + 0.8137288743318718, + 0.813349095053002, + 0.8128867104363982, + 0.8128867104363982, + 0.812500017382303, + 0.8110619000381428, + 0.8110619000381428, + 0.8104166927111511, + 0.8094262370385038, + 0.8094262370385038, + 0.8090280008578195, + 0.8089430771073715, + 0.8088235347390151, + 0.8088235347390151, + 0.8057851280154124, + 0.8051180968726798, + 0.8051180968726798, + 0.80156080940293, + 0.8004032294511281, + 0.8004032294511281, + 0.7990230022338877, + 0.7967625932747874, + 0.7967625932747874, + 0.7956521927371903, + 0.7931034364224134, + 0.7931034364224134, + 0.7909482724982525, + 0.7870950348958757, + 0.7815126175991072, + 0.7815126175991072, + 0.7815125994864556, + 0.7750000197578847, + 0.7750000197578847, + 0.772522532144088, + 0.7641479929882528, + 0.7641479929882528, + 0.7501480279383034, + 0.7390078506457206, + 0.7390078506457206, + 0.7333250367805633, + 0.7315051476549976, + 0.7275309230134186, + 0.7275309230134186, + 0.7246038698847924, + 0.7228355146439156, + 0.7228355146439156, + 0.7204743691053372, + 0.7175907573437832, + 0.7175907573437832, + 0.716898144922148, + 0, + 0, + 0, + 0, + 0 + ], + "y": [ + 0, + 0.019801980198019802, + 0.0392156862745098, + 0.058252427184466014, + 0.07692307692307693, + 0.09523809523809523, + 0.11320754716981131, + 0.13084112149532712, + 0.14814814814814814, + 0.16513761467889906, + 0.18181818181818182, + 0.19819819819819817, + 0.21428571428571425, + 0.23008849557522126, + 0.24561403508771928, + 0.2608695652173913, + 0.2758620689655173, + 0.2905982905982906, + 0.3050847457627119, + 0.319327731092437, + 0.33333333333333337, + 0.34710743801652894, + 0.36065573770491804, + 0.3739837398373984, + 0.3870967741935484, + 0.4, + 0.41269841269841273, + 0.4251968503937008, + 0.43750000000000006, + 0.44961240310077516, + 0.4615384615384615, + 0.47328244274809156, + 0.48484848484848486, + 0.49624060150375937, + 0.5074626865671642, + 0.5185185185185185, + 0.5294117647058824, + 0.5401459854014599, + 0.5507246376811594, + 0.5611510791366906, + 0.5714285714285715, + 0.5815602836879432, + 0.5915492957746479, + 0.6013986013986015, + 0.6111111111111112, + 0.6206896551724138, + 0.6301369863013699, + 0.6394557823129252, + 0.6486486486486487, + 0.6577181208053691, + 0.6666666666666666, + 0.6754966887417219, + 0.6842105263157895, + 0.6928104575163399, + 0.7012987012987013, + 0.7096774193548387, + 0.717948717948718, + 0.7261146496815287, + 0.7341772151898733, + 0.7421383647798743, + 0.7499999999999999, + 0.7577639751552795, + 0.7654320987654321, + 0.7730061349693252, + 0.7804878048780487, + 0.787878787878788, + 0.7951807228915663, + 0.8023952095808384, + 0.8095238095238095, + 0.8165680473372782, + 0.8235294117647058, + 0.8304093567251462, + 0.8372093023255813, + 0.8439306358381503, + 0.8505747126436781, + 0.8571428571428571, + 0.8636363636363636, + 0.8700564971751412, + 0.8764044943820225, + 0.8826815642458101, + 0.888888888888889, + 0.8950276243093923, + 0.9010989010989011, + 0.907103825136612, + 0.9130434782608696, + 0.9189189189189189, + 0.924731182795699, + 0.9304812834224598, + 0.9361702127659575, + 0.9417989417989417, + 0.9473684210526316, + 0.9528795811518325, + 0.9583333333333334, + 0.9637305699481865, + 0.9690721649484537, + 0.9743589743589743, + 0.9795918367346939, + 0.9847715736040609, + 0.98989898989899, + 0.9949748743718593, + 1 + ] + } + ], + "layout": { + "autosize": true, + "height": 600, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "F1-Confidence" + }, + "width": 1200, + "xaxis": { + "range": [ + -0.01, + 1.01 + ], + "showspikes": true, + "title": { + "text": "Confidence" + } + }, + "yaxis": { + "range": [ + -0.01, + 1.01 + ], + "showspikes": true, + "title": { + "text": "F1" + } + } + } + }, + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cur = Curves(cocoGt, cocoDt, iouType=iouType, kpt_oks_sigmas=[0.025] * 4)\n", + "\n", + "cur.plot_ced_metric()\n", + "cur.plot_f1_confidence()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 7709bd02fab1ba858e3d8eff0ff0b7af3033fed1 Mon Sep 17 00:00:00 2001 From: MiXaiLL76 Date: Tue, 11 Jun 2024 18:23:54 +0300 Subject: [PATCH 7/7] bump version --- faster_coco_eval/version.py | 2 +- history.md | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/faster_coco_eval/version.py b/faster_coco_eval/version.py index fffa662..c9e2b21 100644 --- a/faster_coco_eval/version.py +++ b/faster_coco_eval/version.py @@ -1,2 +1,2 @@ -__version__ = "1.5.4" +__version__ = "1.5.5" __author__ = "MiXaiLL76" diff --git a/history.md b/history.md index 9f090f2..44fa8c7 100644 --- a/history.md +++ b/history.md @@ -1,6 +1,13 @@ # history +## v1.5.5 +- [x] Add CED MSE curve +- [x] Review tests +- [x] Review **COCOeval_faster.math_matches** function and **COCOeval_faster.compute_mIoU** function +- [x] Add img+category to ann ids mapping via **COCO.img_cat_ann_idx_map** +- [x] Add img to ann ids mapping via **COCO.img_ann_idx_map** + ## v1.5.3 - v1.5.4 - [x] Worked out the ability to work with skeletons and various key points - [x] ```eval.state_as_dict``` Now works for key points