해당 포스팅은 네이버 부스트캠프 P-stage를 위해 개인 학습 내용을 정리했습니다.
1. 목표
- FCN8s.py 만들어보기
- mAP에 대해 이해하기
2. 진행 내용
1) FCN8s.py 만들어보기
FCN8s는 Backbone으로 VGG16을 사용하면서, FC layer 대신 Convolution layer로 바꿔줘서 위치의 정보를 잃지 않도록 만들어주는 방법입니다. 특히, semantic segmentation의 경우, 위치 정보를 보존하는 것이 중요합니다. FCN32s, FCN16s, FCN8s 등 여러 가지 종류가 존재하지만, 가장 성능이 좋은 FCN8s를 만들어 봤습니다. github를 참고하면서 fc6에서 kernel size가 7인 conv layer를 넣었습니다. 이외에도 크기를 맞춰주기 위해서 zero padding을 100이나 해야합니다. 아마 zero padding이 100이나 들어가서 kernel size가 1인 conv layer가 더 좋은 성능을 보일 것 같습니다.
2) mAP(mean Average Precision)
mAP는 쉽게 말하면, 정확도와 검출율을 모두 반영하는 metric입니다. 아무리 정확도가 좋아도 오검출하는 경우가 많다면 mAP값은 떨어지게 됩니다. 이처럼 정확하게 클래스를 검출하면서 오검출하는 확률을 줄이는 것이 우리의 목표가 될 것입니다.
3. 회고
오늘은 서버에 문제가 생겨서 직접 데이터를 확인해보지는 못했습니다. FCN8s를 구현하면서 생각보다 많은 오류에서 디버깅하는 과정이 있었는데, 직접 print문으로 확인하면서 그래도 어떻게 FCN이 작동하는지 확인할 수 있었습니다. 내일은 baseline을 살펴보고, FCN에서 base model인 FCN 대신에 다른 모델을 넣어보겠습니다.