pyEdgeEval.common.multi_label package¶
Submodules¶
pyEdgeEval.common.multi_label.calculate_metrics module¶
pyEdgeEval.common.multi_label.edge_decoding module¶
Decoding functions for multi-label edges
- pyEdgeEval.common.multi_label.edge_decoding.binary_multilabel_decoding(edge_path: str, h: int, w: int, num_classes: int)[source]¶
- Load binary file to edge map - Assumes that the input file is a 32-bit array 
- The saved file does not have shape information 
- output type is uint32 
 - TODO: currently not used (deprecated) 
- pyEdgeEval.common.multi_label.edge_decoding.load_scaled_edge(edge_path: str, scale: float)[source]¶
- Load edge from file and scale it - Returns
- edge – PIL.Image.Image (height, width): tuple of int 
 
pyEdgeEval.common.multi_label.edge_encoding module¶
Encoding functions for multi-label edges
- default: encodes into binary format 
- RGB: encodes into binary format that is compatible with image fs 
- pyEdgeEval.common.multi_label.edge_encoding.default_multilabel_encoding(edges: ndarray)[source]¶
- Encode multi-label edges to binary format - For now we use uint32 as the base (PIL can save uint32). Therefore, we can save at most 32 classes. - However, RGB encoding is efficient unless you need more classes. 
- pyEdgeEval.common.multi_label.edge_encoding.rgb_multilabel_encoding(edges: ndarray)[source]¶
- Encode multi-label edges to RGB format - Each channel is 8-bit, so the RGB format can encode the edges into 24-bit (maximum of 24 classes). - This format is useful for training data where edges need to be transformed (compatible with various 3-channel augmentations). 
pyEdgeEval.common.multi_label.evaluate_boundaries module¶
- pyEdgeEval.common.multi_label.evaluate_boundaries.evaluate_boundaries_threshold(thresholds: ndarray, pred: ndarray, gt: ndarray, gt_seg: Optional[ndarray] = None, max_dist: float = 0.02, apply_thinning: bool = True, kill_internal: bool = False, skip_if_nonexistent: bool = False, apply_nms: bool = False, nms_kwargs={'half_prec': False, 'm': 1.01, 'r': 1, 's': 5})[source]¶
- Evaluate the accuracy of a predicted boundary and a range of thresholds - Parameters
- thresholds – a 1D array specifying the thresholds 
- pred – the predicted boundaries as a (H,W) floating point array where each pixel represents the strength of the predicted boundary 
- gt – ground truth boundary, as returned by the load_boundary or boundary methods 
- gt_seg – ground truth segmentation data needed for kill_internal 
- max_dist – (default=0.02) maximum distance parameter used for determining pixel matches. This value is multiplied by the length of the diagonal of the image to get the threshold used for matching pixels. 
- apply_thinning – (default=True) if True, apply morphologial thinning to the predicted boundaries before evaluation 
- kill_internal – (default=True) remove countors inside the segmentation mask 
- skip_if_nonexistent – (default=True) this will skip the evaluation and disregards all false positives if there are no boundaries in the GT 
- apply_nms – (default=False) apply a fast nms preprocess 
- nms_kwargs – arguments for nms process 
 
- Returns
- tuple (count_r, sum_r, count_p, sum_p, thresholds) where each
- of the first four entries are arrays that can be used to compute recall and precision at each threshold with: - ` recall = count_r / (sum_r + (sum_r == 0)) precision = count_p / (sum_p + (sum_p == 0)) `
 
 - NOTE: compared to BSDS500, we don’t have multiple GTs 
pyEdgeEval.common.multi_label.io module¶
- pyEdgeEval.common.multi_label.io.save_sample_metrics(root_dir: str, sample_metrics, file_name: str = 'eval_bdry_img.txt')[source]¶
- pyEdgeEval.common.multi_label.io.save_threshold_metrics(root_dir: str, threshold_metrics, file_name: str = 'eval_bdry_thr.txt')[source]¶
- pyEdgeEval.common.multi_label.io.save_overall_metric(root_dir: str, overall_metric, file_name: str = 'eval_bdry.txt')[source]¶
pyEdgeEval.common.multi_label.options module¶
- pyEdgeEval.common.multi_label.options.kill_internal_prediction(pred: ndarray, gt: ndarray, seg: ndarray, max_dist: float = 0.02) ndarray[source]¶
- Remove predicted pixels inside boundaries - NOTE: the distance transform may differ from MATLAB implementation NOTE: might not work correctly when using instance sensitive boundaries 
Module contents¶
- pyEdgeEval.common.multi_label.calculate_metrics(eval_single, thresholds, samples, nproc=8)[source]¶
- Main function to calculate boundary metrics - Parameters
- Returns
- dict of metrics 
 
- pyEdgeEval.common.multi_label.evaluate_boundaries_threshold(thresholds: ndarray, pred: ndarray, gt: ndarray, gt_seg: Optional[ndarray] = None, max_dist: float = 0.02, apply_thinning: bool = True, kill_internal: bool = False, skip_if_nonexistent: bool = False, apply_nms: bool = False, nms_kwargs={'half_prec': False, 'm': 1.01, 'r': 1, 's': 5})[source]¶
- Evaluate the accuracy of a predicted boundary and a range of thresholds - Parameters
- thresholds – a 1D array specifying the thresholds 
- pred – the predicted boundaries as a (H,W) floating point array where each pixel represents the strength of the predicted boundary 
- gt – ground truth boundary, as returned by the load_boundary or boundary methods 
- gt_seg – ground truth segmentation data needed for kill_internal 
- max_dist – (default=0.02) maximum distance parameter used for determining pixel matches. This value is multiplied by the length of the diagonal of the image to get the threshold used for matching pixels. 
- apply_thinning – (default=True) if True, apply morphologial thinning to the predicted boundaries before evaluation 
- kill_internal – (default=True) remove countors inside the segmentation mask 
- skip_if_nonexistent – (default=True) this will skip the evaluation and disregards all false positives if there are no boundaries in the GT 
- apply_nms – (default=False) apply a fast nms preprocess 
- nms_kwargs – arguments for nms process 
 
- Returns
- tuple (count_r, sum_r, count_p, sum_p, thresholds) where each
- of the first four entries are arrays that can be used to compute recall and precision at each threshold with: - ` recall = count_r / (sum_r + (sum_r == 0)) precision = count_p / (sum_p + (sum_p == 0)) `
 
 - NOTE: compared to BSDS500, we don’t have multiple GTs 
- pyEdgeEval.common.multi_label.binary_multilabel_decoding(edge_path: str, h: int, w: int, num_classes: int)[source]¶
- Load binary file to edge map - Assumes that the input file is a 32-bit array 
- The saved file does not have shape information 
- output type is uint32 
 - TODO: currently not used (deprecated) 
- pyEdgeEval.common.multi_label.load_scaled_edge(edge_path: str, scale: float)[source]¶
- Load edge from file and scale it - Returns
- edge – PIL.Image.Image (height, width): tuple of int 
 
- pyEdgeEval.common.multi_label.decode_png(edge: Image, num_classes: int)[source]¶
- Decode png format Image into multi-label edge 
- pyEdgeEval.common.multi_label.decode_tif(edge: Image, num_classes: int)[source]¶
- Decode tif format Image into multi-label edge 
- pyEdgeEval.common.multi_label.default_multilabel_encoding(edges: ndarray)[source]¶
- Encode multi-label edges to binary format - For now we use uint32 as the base (PIL can save uint32). Therefore, we can save at most 32 classes. - However, RGB encoding is efficient unless you need more classes. 
- pyEdgeEval.common.multi_label.rgb_multilabel_encoding(edges: ndarray)[source]¶
- Encode multi-label edges to RGB format - Each channel is 8-bit, so the RGB format can encode the edges into 24-bit (maximum of 24 classes). - This format is useful for training data where edges need to be transformed (compatible with various 3-channel augmentations). 
- pyEdgeEval.common.multi_label.save_category_results(root: str, category: int, sample_metrics, threshold_metrics, overall_metric)[source]¶
- Save per-category results 
- pyEdgeEval.common.multi_label.save_sample_metrics(root_dir: str, sample_metrics, file_name: str = 'eval_bdry_img.txt')[source]¶
- pyEdgeEval.common.multi_label.save_threshold_metrics(root_dir: str, threshold_metrics, file_name: str = 'eval_bdry_thr.txt')[source]¶