5-3. 로직 구현 코드

V1.

  • bbox_area와 mask_area가 겹치면 최종 결과값 내에 IN

  • overlap_threshold로 겹치는 정도를 조정할 수 있음

# V1.
""" overlap_threshold : 객체 검출 Bbox와 바다영역 분할 Mask가 상호 겹치는 정도 (단위 %) """
def check_overlap(bbox: List[float], mask_polygon: Polygon, overlap_threshold: float = 0.2) -> bool:
    '''Check if bbox and mask polygon overlap significantly.'''
    bbox_polygon = box(bbox[0], bbox[1], bbox[0] + bbox[2], bbox[1] + bbox[3])
    intersection_area = bbox_polygon.intersection(mask_polygon).area
    return (intersection_area / bbox_polygon.area > overlap_threshold or
            intersection_area / mask_polygon.area > overlap_threshold)

V2.

  • 기존 코드(V1.)보다 더 관대하게 최종 결과값 내에 IN하는 로직을 대안으로 구현

  • 겹치는 영역이 존재하거나, 겹치는 면 없이 경계선이 맞닿은 경우도 포함하여 오버랩

# V2.
""" overlap_threshold : 객체 검출 Bbox와 바다영역 분할 Mask가 상호 겹치는 정도 (단위 %) """
def check_overlap_or_touch(bbox: List[float], mask_polygon: Polygon, overlap_threshold: float = 0.0) -> bool:
    bbox_polygon = box(bbox[0], bbox[1], bbox[0] + bbox[2], bbox[1] + bbox[3])
    intersection_area = bbox_polygon.intersection(mask_polygon).area
    bbox_area = bbox_polygon.area
    mask_area = mask_polygon.area
    return (intersection_area / bbox_area > overlap_threshold or 
            intersection_area / mask_area > overlap_threshold or 
            bbox_polygon.touches(mask_polygon))

V3.

  • 바다영역 mask가 경계부가 부정확하게 검출되는 경우를 고려함

  • 겹치는 영역이 없이 이격 되었더라도 거리(픽셀기준)가 경미할 경우, IN

  • distance_threshold로 거리기준을 조정할 수 있음

V4.

  • OBB Detection Bbox로 검출된 영역을 Polygon으로 추출할 수 있도록 수정

  • 배 또는 선박이 바다 mask 보다 큰 경우에는 FP 일 확률이 높아 해당 부분 반영

GitHub


[참고] 로직별 Threshold 설정

  • V1, V2에서는 overlap_threshold*을 적용하였음

    • V1 의 초기값 0.2는 본 실험을 위해 구축한 custom data를 기반으로 설정한 것으로, 추론하고자 하는 상황 및 Image의 특성에 따라 사용자가 변경할 수 있음

    • V2는 기존 코드(V1.)보다 더 관대하게 최종 결과값 내에 객체 검출결과를 포함하는 로직으로, 겹치는 면 없이 경계선이 맞닿은 경우도 포함하기 위해 0.0으로 설정함

circle-info

*overlap_threshold : 객체 검출 Bbox와 바다영역 분할 Mask가 상호 겹치는 정도 (단위 %)

  • V3 distance_threshold**을 적용하였음

  • 초기값은 본 실험을 위해 구축한 custom data를 기반으로 설정한 것으로, 추론하고자 하는 상황 및 Image의특성에 따라 변경이 적합할 수 있음

circle-info

**distance_threshold : 모델 성능의 한계를 고려하여, 객체 검출 Bbox와 바다영역 분할 Mask가 겹치지 않더라도 포함시키는 상호 이격거리의 임계값 (단위 pixel)

Bbox와 Mask가 distance_threshold 이내의 거리에 위치할 경우를 포함시키도록 설정

Last updated