이번 프로젝트에서의 목표
시작 전에는 Image Classification 때 흥미를 느꼈던 준지도 학습을 Object Detection에 적용해 보고 싶었습니다. 하지만 모든 외부 데이터 셋을 사용할 수 없게 되었고 준지도 학습이 효율적이지 못할 것이라고 판단했습니다. 대신 비교적 크기가 작은 물체를 탐지하는데 어려움이 있다는 것을 파악해 해당 문제를 해결하는 것을 목표로 삼았습니다.
목표를 달성하기 위한 노력
- 작은 물체를 탐지하기 위해 사용되는 기법들에 대해 조사하고 직접 적용 해 봤습니다.
- 위 과정에서 팀원들과 꾸준히 소통을 하고 의견을 물으며 많은 도움을 받았습니다.
- 최대한 많은 실험들을 하기 위해 시간을 효율적으로 쓰기 위해 노력했습니다.
모델 개선 방법
- 작은 물체에 대한 탐지 성능 향상 방법
- 이미지 크기를 2048 X 2048로 늘려 물체의 크기 자체를 키우는 방법
- 이미지 크기를 원본 이미지의 2배로 늘려 물체의 크기 역시 키우는 방법입니다.
- 연산량이 굉장히 많아져 학습 시간이 매우 길어집니다.
- 길어진 학습 시간 대비 small/medium 물체에 대한 성능 향상이 매우 미비했습니다.
- 물체의 작은 크기도 문제지만 작은 크기의 물체 대부분이 배경과 구분이 힘든 general trash에 속한다는 문제점도 존재한다는 것을 파악했습니다.
- anchor scale을 조절하는 방법
- small/medium 물체 탐지에 어려움이 있기 때문에 region proposal 단계에서 기존보다 작은 scale의 anchor를 생성하면 도움이 될 것이라고 판단했습니다.
- Default로 주어진 8에서 4를 추가해 총 4와 8, 두 개의 anchor scale을 생성하도록 했습니다.
- 이미지 크기를 키우는 방법에 비해 효율적으로 작은 물체 탐지 성능을 올릴 수 있었습니다.
- 작은 물체에 좋은 성능을 보이는 모델 탐색
- Two stage detector 보다 one stage detector가 작은 물체에 대해 더 좋은 성능을 보인다는 글을 읽고 one stage detector들을 탐색하기 시작했습니다.
- VFNet, YoloV5, UniverseNet, 등을 실험해 봤지만 큰 효과를 보지는 못했습니다.
- 오탐률을 줄이기 위한 방법
- 모델들의 confusion matrix를 생성해서 분석한 결과 클래스를 잘못 탐지하는 경우보다 배경으로 착각해 탐지를 못하는 경우가 많았습니다.
- 해결방법으로 주어진 이미지에서 배경 패치들을 얻어 합친 결과 약 700장 정도의 배경 사진을 확보 할 수 있었습니다.
- 확보한 배경 사진들을 학습에 포함시켜 배경에 대한 학습을 높이려고 했지만 오히려 성능이 떨어지는 효과가 있었습니다.
- 특정 클래스에 대한 성능을 높이는 방법
- 모델들을 분석한 결과 모든 모델들이 공통적으로 general trash에 대한 성능이 매우 좋지 못했습니다.
- 해결방법으로 취약한 클래스나 부족한 클래스와 같은 부분 데이터를 추출해 fine tuning을 적용해 성능을 개선 시켰습니다.
- 여러 방법으로 부분 데이터를 추출해서 실험 해 본 결과 전혀 효과적이지 못했습니다.
결과 및 깨달음
- 시도 해 본 거의 모든 개선 방법들이 효과적이지 못했습니다.
- 효과적이지 못했던 이유는 문제를 세밀하게 파악하지 못했기 때문이라고 생각합니다.
- 앞으로 작은 물체를 탐지하는데 어려움이 있다면 왜 작은 물체를 탐지하기 어려워 하는지, 어떤 외부 요인들이 있는지 등에 대한 분석이 필요하다고 생각합니다.
- 각 문제들에 대해 굉장히 다양한 해결 방법들이 존재하기 때문에 정확히 문제점을 파악하지 않으면 적절한 해결 방법을 제시할 수 없다는 것을 깨달았습니다.
한계/교훈을 바탕으로 다음 P-Stage에서 새롭게 시도해볼 것
다음 segmentation p-stage에서는 모든 문제점들을 더욱 깊게 파고 들어 적절한 해결 방법들을 시도하기 위해 노력할 것 같습니다. 너무 추상적으로 문제점들을 제시하니 너무 다양한 해결 방법들이 있었고 효과적인 해결 방법들을 찾는데 어려움이 있었기 때문입니다.