물체 검출 알고리즘의 성능 평가법
안녕하세요. 코딩벅스입니다.
물체 검출 알고리즘들, 종류가 다양합니다. 얼굴 검출, 차량 검출 등등.. 이러한 수 많은 알고리즘들의 성능은 어떻게 매겨질까요? 도대체 “이 알고리즘 쓰면 물체 검출이 잘 된다”라는 말을 할 수 있는 객관적인 기준은 무엇일까요?
예로, A라는 사람이 자신이 만든 얼굴 검출 알고리즘을 검출율 100%라고 홍보합니다. 그런데 정작 써보니 사진에 존재하는 사람 얼굴을 검출은 했지만, 거기다 보태어 엉뚱한 물건 5개도 사람 얼굴이라고 검출해버린 것이죠. “어쨋든 얼굴은 검출했잖소?”라고 A라는 사람이 호통을 치면, 우리는 어떻게 대답할까요? A의 주장은 맞는 말이라고 봐야할까요? 아닙니다. 오검출(False Positive)이 많으니 결코 좋은 알고리즘이라고 하기에는 부족함이 큽니다.
그래서 보다 객관적이고 정량적인 성능에 대한 평가 기준이 필요합니다. 이를 위해, 두가지 용어를 필히 알고 넘어가야합니다.
- Precision
- Recall
Recall은 재현률이라고도 하고, 실제 정답 가운데서 얼마나 검출에 성공했는 지를 나타내는 수치입니다. Precision은 알고리즘이 검출한 결과에서, 과연 정답이 차지하는 비율입니다. 둘이 유사하지만, 관점이 다릅니다. Recall은 실제 정답에 초점이 맞추어져 있는 반면, Precision은 검출한 결과에 맞추어져 있죠.
예로, 사진에 세 사람의 얼굴이 존재하는데, B라는 알고리즘을 돌린 결과 총 5개의 얼굴을 검출했다고 가정해보죠. 검출 결과를 보니, 제대로 얼굴로 검출한 건은 2개, 나머지 3건은 전혀 엉뚱한 물체를 가리키고 있다고 해보죠. 이러한 결과를 토대로 B 검출 알고리즘의 Recall과 Precision은 어떻게 나올까요? Recall은 2 / 3 = 0.66, Precision은 2 / 5 = 0.4가 나오는 것이죠. 결론적으로 A 알고리즘의 검출 성능은 학술적으로 표현할 때, Recall 은 0.66이고 Precision은 0.4라고 표현합니다.
이정도면 Recall과 Precision은 어느정도 이해하셨다고 생각이 듭니다. 그렇다면, 검출 알고리즘 평가에서 정답을 맞췄다, 못 맞추었다를 판별하는 기준은 무엇일까요? 영상에서의 물체 검출이라는 것이, 해당 영상에서 물체가 존재하는 영역을 찾는 것이기에 단순히 Yes 또는 No로 답하는 문제는 아닙니다. 그렇다면, A라는 얼굴 검출 알고리즘이 뱉어놓은 결과는 영역에 대한 좌표일 것이고, 이 영역이 정답과 가까움을 나타내는 지표가 있어야할 것입니다. 이때 사용되는 지표가 바로 IoU(Area of Intersection / Area of Union)입니다. 즉, 정답 영역과 검출된 영역의 겹쳐지는 비율을 가지고 판단하는 것이죠.
보통 IoU가 0.5, 즉 검출 영역이 실제 정답과 겹쳐지는 비율이 50% 이상인 경우를 정답으로 봅니다. 물론, 이는 상황마다 달리지기도 합니다.
이제 정량적으로 알고리즘 간의 성능을 비교하는 방법을 살펴보죠. 앞에서 설명한, Precision과 Recall을 가지고 대략적인 알고리즘의 성능 파악은 가능합니다. 하지만, 비교 우위를 판단하려면 뭔가 대표 점수가 있어야합니다. 이때 사용되는 정량적 단위가 바로 AP(Average Precision)입니다.
위 그림에서 붉은색 면적이 AP를 나타냅니다. 바로, Precision-Recall 상관관계 그래프에서 차지하는 면적이 바로 AP입니다. 이러한 AP가 각 물체의 Type에 따라 존재하고, 이들을 평균한 것이 mAP(mean Average Precision)입니다.