[OSAM] 2. computer vision 개발 과정
이 포스트는 이전 포스트를 읽으면 이해하기 더 쉽다. [OSAM] 1. 팀 결정 및 주제&시스템 설계
Object Detection 모델을 선택하는데 몇 가지 기준을 세웠다.
- model train과 evaluation이 빨라야 한다.
- memory를 적게 잡아먹어야 한다.
- 성능이 나쁘지 않아야 한다.
그렇게 SSD, SSDLite, EfficientNet, YOLOv5가 후보에 올랐다. EfficientNet은 학습시간이 너무 오래걸렸고, SSD는 성능이 매우 낮아 YOLOv5를 선택했다.
Dataset준비
우리가 만들 모델은 군사 시설, 장비, 용품 등을 인식하는 문제였다. 데이테셋을 찾아보려고 해도 우리가 원하는 데이터를 찾기 어려웠다. 하지만 다행이 kaggle에 ImageNet Object Localization Challenge가 있었고, 이 데이터 + 직접 크롤링한 데이터를 이용하기로 했다.
모델 학습

일단 다들 알다싶이 precision과 recall은 trade off관계에 있다. 그리고 앞에서 말했 듯 우리가 만들고자 하는 것은 군사보안에 관한 것이다. 물체가 잘못 인식되어서 모자이크가 잘못 쳐지는 것 보다 군관련 사항을 모자이크를 못 하는 것이 치명적인 오류이다. 따라서 평가지표를 recall로 잡고 개발을 진행하기로 했다. 먼저 vanilla yolov5를 이용하여 학습을 진행했고 다음과 같은 결과가 나왔다.
| enhance | model | precision | recall | mAP_0.5 | mAP_0.5:0.95 |
| Vanilla | yolov5m6 | 0.602 | 0.651 | 0.671 | 0.535 |
문제점 분석
데이터

1차적으로 만든 데이터셋의 특성이고 다음과 같이 분석했다.
- bounding box는 한 class당 500개 정도이다.
- bounding box 중심의 위치는 대개 정중앙이다.
- bounding box가 이미지의 크거나 대부분을 차지한다.
모델
경량모델의 문제점이 그대로 나타났다. 모델이 가벼워 training set에 overfitting이 잘 되었고, 모델 자체의 성능도 낮았다. yolov5x6와 같은 같은 계열의 무거운 모델을 쓸 수 있지만 그러면 서비스 자체가 느려질 것이었다
해결방법
해결방안 1 - 데이터 추가
| Orignal Dataset | Add more data |
![]() | ![]() |
누가 뭐라고 하던 데이터가 많으면 최고다. class당 500개의 box는 말도 안되는 개수라 직접 imgenet dataset에서 annotation을 해서 수를 1200개 이상으로 늘렸다. 그러자 bounding box의 중심도 많이 퍼졌고, small object도 많이 생겨났다.
해결방안 2- augmentation 방법 변경
| 기존 | 변경 |
![]() | ![]() |
기존 데이터셋의 문제점이 물체의 중심이 이미지 정가운데이고, 물체가 이미지의 대부분을 차지한다 였다. 이 문제점을 해결하기 위해 yolov5에 있는 mosaic augmentation이 적절했으나 이는 부족했다. 따라서 우리는 lagacy code에 있는 masaic_9 augmentatio을 사용하기로 했다.
해결방안 3 - knowledge distillation(paper link)

경량화 기법 중 하나인 knowledge distillation을 사용했다. yolov5x6를 teacher model로 yolov5m6를 student model로 knowledge distillation을 진행하면 overfitting을 막아주고 성능이 높아 질 것이다
결과
| enhance | model | precision | recall | mAP_0.5 | mAP_0.5:0.95 |
| Before add dataset | yolov5m6 | 0.602 | 0.651 | 0.671 | 0.535 |
| Before add dataset | yolov5m6 | 0.736 | 0.779 | 0.815 | 0.599 |
| None (Add dataset) | yolov5m6 | 0.736 | 0.779 | 0.815 | 0.599 |
| mosaic_9 50% | yolov5m6 | 0.756 | 0.775 | 0.815 | 0.602 |
| mosaic_9 100% | yolov5m6 | 0.739 | 0.813 | 0.806 | 0.594 |
| self-distillation | yolov5m6 | 0.722 | 0.822 | 0.807 | 0.592 |
| Original Image | Result Image |
![]() | ![]() |
결과적으로 recall이 17.1%p를 올리는 결과를 냈다. recall을 높이기 위해 precision이 조금 낮아졌다는 것이 아쉬였다. 사용했던 knowledge distillation code는 여기에 있다. yolov5-knowledge-distillation
[OSAM] 1. 팀 결정 및 주제&시스템 설계 [OSAM] 2. computer vision 개발 과정 [OSAM] 3. 이제 끝나는 건가?
Enjoy Reading This Article?
Here are some more articles you might like to read next:




