1.4. 패치 처리 방법

본 서비스에서 객체탐지 모델은 patch - detection - merge 단계로 실행되었는데, 그 이유는 아래와 같다.

  • 분석 대상 이미지는 일반적으로 넓은 지역을 촬영한 3840 * 2160 픽셀의 고해상도 이미지임

  • 메모리 & 처리능력의 한계로 원본 해상도를 유지한채 학습 & 추론하기 어려움

  • 이미지 리사이즈시 원본 이미지의 정보가 손실됨

➡️ 원본 이미지를 보다 작은 이미지로 분할하여 학습&추론하며, 추론 결과물을 병합하여 다음 파이프라인에 전달한다.

이 과정에서 학습데이터상의 원본이미지를 분할하여 객체탐지 모델의 입력이 되는 '패치'를 생성하고, 이에 맞추어 bbox 라벨 데이터 또한 패치 좌표계에 맞게 재처리 해주어야 한다.

1. 패치 크기 설정

1-2. 패치 크기 설정시 고려한 사항

패치 처리시 각 패치의 크기 (해상도)와 모양을 설정해야 했다. 모양은 일반적인 이미지 모델의 입력이 다루는 정사각형 모양을 선택하였으며 패치의 크기는 1080, 1440, 1920의 세 가지 크기로 베이스 모델을 기준으로 객체검출 성능을 비교하여 표준 패치 규격을 설정하였다.

아래와 같이 패치 사이즈를 조절함에 따라 각각의 장&단점이 강화되는 트레이드 오프 관계가 있다.

구분
단점
리스크

큰 패치

입력 데이터 크기가 커진다

모델 사이즈 & 배치사이즈 등 학습 제약 발생

작은 패치

패치 경계에 의한 단절 영역이 크다

패치&머지 과정에서의 잘못된 처리 가능성 증가

1-2. 패치 크기별 객체탐지 모델 학습결과

앞서 언급한 3가지 크기의 패치를 원본데이터로부터 생성하여 동일한 세팅에서 객체탐지 모델을 학습한 뒤 평가하였다.

circle-info

비교를 위한 학습에 사용된 모델 및 설정값은 아래와 같다. 언급되지 않은 설정값은 기본 파라미터arrow-up-right를 따른다.

  • 모델: yolo8lobb

  • 사전학습: DOTAv1

  • 데이터셋: DVA_dataset_2024 (train : val : test = 7 : 2 : 1)

  • 배치 사이즈: 8

  • 에폭: 50

학습 결과 선박류(ship, jetski)는 패치 크기가 커질수록 탐지 성능이 올라가고 돌고래는 패치 크기가 작을수록 향상된다. 따라서 특정한 크기가 절대적 우위에 있다는 결론을 내릴 수 없었다.

보다 세밀한 특징을 감지해야 하는 돌고래의 특성상 작은 패치가 유리했을 수 있으며, 선박의 경우 패치 과정에서 객체가 분할되는 일이 빈번하게 발생하는 점도 영향을 준 것으로 보인다.

두 종류의 객체에서 모두 중간정도의 성능을 보이는 1440x1440을 기준패치 사이즈로 설정하였으며 특정 객체에 대한 성능 향상이 요구될 때 패치 사이즈의 변경을 본 실험 내용을 참고하여 조정할 수 있을 것이다.

patch size
AP50(ship)
AP50(jetski)
AP50(dolphin)
mAP50
mAP50-95

1024

0.946
0.88
0.662
0.829
0.676

1440

0.953
0.909
0.616
0.826
0.69

1920

0.983
0.995
0.595
0.857
0.708

2. OBB 라벨 패치 후처리

circle-info

[코드 매핑]

원본 이미지&라벨 데이터를 패치하고 후처리 하는 코드는 각각 아래 스크립트에서 확인할 수 있다.

  1. 패치한 raw_label 후처리: adjust_obb_label.pyarrow-up-right

OBB 라벨을 가진 이미지를 패치로 분할할 경우 패치가 분할되는 경계에 위치하던 bbox를 처리할 방안을 고안해야 한다. 왜냐하면 본 실험에서 사용한 ultlytics의 모델 학습 함수에서는 이미지 경계를 벗어나는 bbox가 존재할 시, 이를 비정상데이터로 간주하고 사용하지 않기 때문이다.

유사한 문의에 대해 개발자 측은 다음과 같이 제안한점을 참고하였다. (링크arrow-up-right)

  1. 이미지 경계로 bbox 잘라 사용

  2. 경계에 걸친 bbox 무시

  3. 객체의 일부만 포함하도록 조정

1번과 3번은 유사한 접근으로 보이나 단순히 이미지 경계로 bbox를 자를경우 bbox가 사각형이 아닌 다각형이 될수있어 모델입력으로 사용할 수 없다. 따라서 다음의 전처리 함수를 개발하여 경계를 넘어선 bbox를 이미지 내로 조정하였다.

2-1. 가공방법

  • bbox의 4개 점을 순회함

    • 점이 이미지 내부에 있을 경우

      • pass

    • 점이 이미지 외부에 있을 경우

      • 1) 두 이웃점이 모두 이미지 내에 있을 경우

        • 이웃점과 만드는 변과 이미지 경계선의 교점까지 이동

          • 두가지 이동중 더 짧은 이동을 채택

      • 2) 한 이웃점이 이미지 내에 있을 경우

        • 이웃점과 만드는 변과 이미지 경계선의 교점까지 이동

      • 3) 어떠한 이웃점도 이미지 내에 있지 않을 경우

        • 두 이동중 가까운 이동을 채택

          • 1) 이웃하지 않은 점과 만드는 변과 이미지 경계선의 교점까지 이동

          • 2) 가장 가까운 이미지 꼭지점으로 이동

2-2. 가공결과 예시

위의 과정에 따라 패치 경계를 벗어나는 bbox를 후처리한 결과의 예시는 아래와 같다.

  • 외부의 두 점을 이웃한 내부 점으로 이동시킨 경우

  • 모든 이웃점이 이미지 내부에 없을 때, 이미지의 꼭지점으로 이동시킨 경우

  • 이 사례는 삼각형처럼 보이나 아주 짧은 변을 가진 사각형이므로 YOLO 모델의 정답 라벨로 사용될 수 있다.

Last updated