관리 메뉴

나는 문어~ 꿈을 꾸는 문어~

[Object Detection] 데이콘 - 병변검출 (4) WBF 앙상블~제출 본문

대회 & 프로젝트

[Object Detection] 데이콘 - 병변검출 (4) WBF 앙상블~제출

harrykur139 2022. 3. 30. 13:41

전체 코드 : https://github.com/euiraekim/dacon-lesion-detection

 

GitHub - euiraekim/dacon-lesion-detection

Contribute to euiraekim/dacon-lesion-detection development by creating an account on GitHub.

github.com

 

목표

mmdetection을 사용하여 2개의 모델을 학습시키고, yolov5 라이브러리를 사용해 학습하여 총 3개의 모델이 탄생했다.

3개의 모델의 제출 점수를 확인해보고, 3개를 WBF 앙상블하여 제출하고 성능이 얼마나 향상됐는지 비교해본다.

 

 

학습된 모델 점수 확인

우선 지금까지 만든 3개 모델의 submission 파일들을 모두 root/result_csv 폴더 아래에 넣어주자.

 

각각의 점수는 다음과 같다.

 

Faster RCNN + Swin Transformer L

public score : 0.7302202662
private score : 0.7839559367

 

RetinaNet + Swin Transformer T

public score : 0.7306795314
private score : 0.783346738

 

YOLOv5

public score : 0.7133540038
private score : 0.7666140273

 

 

WBF (Weighted Boxes Fusion)

WBF는 Object Detection 분야에서 많이 사용되는 앙상블 기법이다. 속도 측면에서 좀 느리긴하지만 대회에서는 그런거 고려하지 않는다.

위 사진에서 빨간 box가 prediction, 파란박스가 ground truth라고 하자. NMS는 3개의 예측 중 가장 맞는 box를 제외하고 다 버린다. 반면에 WBF는 모든 예측을 이용하여 최종 예측을 만들어낸다. 따라서 더 정확하다고한다. 진짜 정확한지 확인해보자.

 

nms, soft nms, wbf 등을 시원하게 지원해주는 라이브러리가 있다. 이를 먼저 설치하자.

pip install ensemble-boxes

 

프로젝트 루트 폴더 아래 result_csv 폴더에 3개 모델의 제출 파일들이 들어있는 상태에서 시작한다. test 이미지 폴더의 모든 이미지에 대해 3개 모델의 추론 결과를 wbf한다.

 

이에 대한 코드는 최상단 프로젝트 코드 링크의 utils/wbf_ensemble.py에서 확인할 수 있다. 다음 명령어를 통해 코드를 실행하자.

cd utils
python wbf_ensemble.py --img-path ../data/data_splited/data_coco/test_images/ --result-path ../result_csv/
  • --img-path : test 이미지 폴더
  • --result-path : 앙상블 결과 csv 파일이 저장될 폴더. 이 폴더 아래에 ensemble.csv라는 이름으로 저장된다.

 

ensemble을 완료하고 제출 파일을 저장했으니 제출을 해보도록 할까??!

 

제출

두구두구두구두구두구...

짠!

위가 public 아래가 private 점수다.

효과(은)는 굉장했다.

Comments