본문 바로가기
AIML 분야/Object Detection

Object Detection의 Ensemble 기법 조사

by 포숑은 맛있어 2022. 8. 17.
반응형

하다보니 앙상블의 필요성을 느껴서 조사 시작.

 

논문을 읽어요
https://www.unirioja.es/cu/joheras/papers/ensemble.pdf.   
https://github.com/ancasag/ensembleObjectDetection.   code

 

object detection?

[output] bbox, category, confidence score

 

detection의 앙상블?

  • 그냥 알고리즘적으로 고안한 다양한 기법들
    • 모델 내에서: RPN에 들어가기 전 이미지 피쳐에 적용, classification stage에 앙상블 적용 ...
    • primary 결과를 두고, secondary 결과를 가지고 조정하는 경우: YOLO랑 Faster-RCNN output을 같이 섞는 방법을 예로 들수 있다.
    • 등등...
  • detection output들을 모은 다음 중복이 되는 bbox를 제거하는 기법
    • NMS, soft-NMS, NMW, WBF 등...
    • 얘네가 제일 익숙함
  • Test-time Augmentation?
    • 원래 학습중에 데이터를 다양하게 줘서 배우려고 쓰는데, test시에도 augmentation을 적용할 수 있다.
    • 그러면 input에 다양한 modification을 주고, 이걸 앙상블하여 최종 결과를 냄
    • cost 때문에 random scaling, cropping 같은 기법이 널리 쓰인다.

 

Ensemble of object detectors

m개의 bbox가 있다. (method의 m)

 

1. 아래 세가지 중에서 하나를 고른다.

 

  • Affirmative
    일단 모든 박스 유지
  • Consensus
    m/2개 이상이 탐지한 박스만 유지하는 것 (majority voting)
  • Unanimous
    m개 모두가 탐지한 영역만 bbox를 유지

2. NMS 돌리기

그러면 이렇게 나온다.

 

Test-time Augmentation

1. 여러가지 transformation을 적용하고 인퍼런스 한다.

2. flip처럼 좌표가 바뀌는 경우, detection 결과의 위치를 올바르게 바꿔줌 (그림에 inverse 연산으로 표시됨)

3. 위에서 consensus 방법을 가지고 여러가지 결과를 합쳐줬음

 

성능?

이런 단순한 기법을 적용했을때 얼마나 오르는지 알아보자.

좋은 모델끼리 affirmative (탐지된거 일단 다 쓰면서 NMS를 돌리는게 좋음)가 가장 좋다.

 

그런데 드는 생각이, NMS야 중복되는 것들 제거하니까 좋은것끼리가 아니라 그냥 모든 모델을 써도 별 차이가 없었지만, WBF를 사용하는 경우에는 모든 bbox output을 결합해서 쓰는 방식이라서 좋은것끼리 합해야하지 않나 싶다.

 

아, 그리고 같은 데이터셋에서 test-time aug 결과를 봤는데 그냥 모델 여러개가 짱인 것 같다.

 

 

참고: WBF (Weighted Box Fusion)는?

NMS보다 좋은 것으로 알려져 있다.

https://lv99.tistory.com/74 참고

NMS나 WBF 등 구현 https://github.com/boostcampaitech2/object-detection-level2-cv-06/blob/master/utils/final_ensemble.py (pip install ensemble-boxes)

 

 

test-time augmentation의 결과도 한번 보자.

- 위에 3개: 9가지 종류의 augmentation 기법 다 씀. 얘네를 affirmative 하느냐, consensus 하느냐, unanimous 하느냐의 차이.

- 아래 6개: 하나 혹은 두가지의 aug 기법을 사용. consensus 사용.

 

9가지 종류의 augmentation 기법을 다 쓴 경우보다는, 맨 아래에 있는 6개의 row처럼 딱 하나 or 두개를 사용하는 것이 낫다.

물론 TP, FP, FN 등의 경우는 다 썼을때 좋은 것들이 있지만... (affirmative, unanimous. 당연하다.) mAP나 F1이 아무래도 중요하니까, color aug + consensus가 가장 좋은 것 같다.

 

모델 여러개랑 aug 여러개를 같이 실험한건 없나?

 

결론

- 모델은 여러개를 쓰자 (TTA보다 나음)

- test-time augmentation? 그냥 color jittering 짱짱

- consensus 쓰겠습니다

- 근데 모델을 여러개 쓰는거면, 어차피 학습성능 대충 알테니까 consensus + NMS로 이것저것 막쓰기 보다는 그냥 좋은거 몇개 딱 골라서 WBF 쓰는게 좋을 듯

 

 

그냥 앙상블스타즈나 하겠습니다

반응형

댓글