Skip to content

metric

Module diagram

classDiagram
  class metric {
  }
  class segment {
  }

metric

segment

compute_segment_iou

compute_segment_iou(segment1: Segment, segment2: Segment) -> float

두 Segment 사이의 IOU를 계산합니다.

Source code in SaigeToolkit/metric/segment.py
def compute_segment_iou(segment1: Segment, segment2: Segment) -> float:
    """두 Segment 사이의 IOU를 계산합니다."""
    intersection_area = compute_segment_intersection_area(segment1, segment2)
    if intersection_area == 0:
        return 0.0
    union = merge_segments([segment1, segment2])
    return float(intersection_area / np.sum(union.bitmap))

compute_segment_iou_using_all_intersecting_segments

compute_segment_iou_using_all_intersecting_segments(target: Segment, segments: List[Segment]) -> float

Segment 중 target 겹치는 Segment들만 모두 모아서 target과의 IOU를 계산합니다.

Source code in SaigeToolkit/metric/segment.py
def compute_segment_iou_using_all_intersecting_segments(
    target: Segment,
    segments: List[Segment],
) -> float:
    """Segment 중 target 겹치는 Segment들만 모두 모아서 target과의 IOU를 계산합니다."""
    intersecting_segments = [
        candidate for candidate in segments if compute_segment_intersection_area(target, candidate) > 0
    ]
    if not intersecting_segments:
        return 0.0
    return compute_segment_iou(target, merge_segments(intersecting_segments))

compute_segment_recall

compute_segment_recall(target: Segment, prediction: Segment) -> float

target에 대한 prediction의 recall을 계산합니다. (target 영역 중 prediction과 겹치는 영역의 비율)

Source code in SaigeToolkit/metric/segment.py
def compute_segment_recall(target: Segment, prediction: Segment) -> float:
    """target에 대한 prediction의 recall을 계산합니다. (target 영역 중 prediction과 겹치는 영역의 비율)"""
    intersection_area = compute_segment_intersection_area(target, prediction)
    target_area = float(np.sum(target.bitmap))
    if target_area == 0:
        return 0.0
    else:
        return intersection_area / target_area

compute_multi_segment_recall

compute_multi_segment_recall(targets: List[Segment], predictions: List[Segment], multiclass: bool = False) -> List[float]

targets내의 각 target에 대해 predictions의 recall을 계산합니다. multiclass=True인 경우 동일 클래스 segment끼리의 recall을 계산합니다.

Source code in SaigeToolkit/metric/segment.py
def compute_multi_segment_recall(
    targets: List[Segment],
    predictions: List[Segment],
    multiclass: bool = False,
) -> List[float]:
    """targets내의 각 target에 대해 predictions의 recall을 계산합니다. multiclass=True인 경우 동일 클래스 segment끼리의 recall을 계산합니다."""

    if multiclass:
        assert all(segment.class_index is not None for segment in targets)
        assert all(segment.class_index is not None for segment in predictions)
        merged_predictions = {}
    else:
        merged_prediction = merge_segments(predictions) if predictions else None

    recalls = []
    for target in targets:
        if multiclass:
            if target.class_index not in merged_predictions:
                class_prediction = [
                    segment for segment in predictions if segment.class_index == target.class_index
                ]
                class_prediction = merge_segments(class_prediction) if class_prediction else None
                merged_predictions[target.class_index] = class_prediction
            merged_prediction = merged_predictions[target.class_index]

        if merged_prediction is None:
            recall = 0.0
        else:
            recall = compute_segment_recall(target, merged_prediction)
        recalls.append(recall)

    return recalls