검출기를 하나씩 만져 보기 전에, 모든 검출기가 공통으로 내놓는 결과물의 생김새부터 익혀 둡니다. 검출기는 종류가 달라도 결국 같은 질문에 답합니다. "이 사진의 어디에, 얼마나 확실하게 얼굴이 있는가." 이 장에서 좌표·신뢰도·바운딩 박스라는 세 단어의 뜻을 확실히 잡아 두면, 다음 장부터 어떤 검출기를 만나도 결과를 똑같은 눈으로 읽을 수 있습니다.
검출기의 입력과 출력
얼굴 검출기의 입력은 한 장의 이미지(또는 영상의 한 프레임)이고, 출력은 "얼굴이 있는 사각형 영역들의 목록"입니다. 사진에 얼굴이 셋 있으면 사각형 셋이, 하나도 없으면 빈 목록이 돌아옵니다. 이 사각형 하나하나를 바운딩 박스(bounding box), 우리말로 경계 상자라고 부릅니다.
바운딩 박스를 적는 두 가지 방식
바운딩 박스는 화면 위 사각형이므로 숫자 네 개로 표현할 수 있습니다. 그런데 라이브러리마다 이 네 숫자를 적는 방식이 둘로 갈립니다. 이 차이를 모르면 박스가 엉뚱한 곳에 그려지는 실수를 하게 됩니다.
| 표기 방식 | 네 숫자의 의미 | 주로 쓰는 라이브러리 |
|---|---|---|
(x, y, w, h) |
좌상단 x·y, 너비·높이 | OpenCV Haar, MediaPipe, MTCNN |
(x1, y1, x2, y2) |
좌상단 x·y, 우하단 x·y | dlib, RetinaFace, YOLO |
두 방식은 서로 변환됩니다. (x, y, w, h)에서 우하단은 (x + w, y + h)이고, 반대로 (x1, y1, x2, y2)에서 너비·높이는 (x2 - x1, y2 - y1)입니다. 이 책에서는 화면에 사각형을 그릴 때 OpenCV의 cv2.rectangle을 쓰는데, 이 함수는 좌상단과 우하단 두 점을 받으므로, 어떤 검출기를 쓰든 결과를 (x1, y1, x2, y2) 형태로 맞춰 그리면 헷갈리지 않습니다.
여기서 한 가지 중요한 약속이 있습니다. 이미지 좌표계에서 원점 (0, 0)은 왼쪽 위 모서리이고, x는 오른쪽으로, y는 아래로 갈수록 커집니다. 학교에서 배운 수학 좌표계와 y 방향이 반대라는 점을 기억해 두세요.
신뢰도 — "얼마나 확실한가"
고전 검출기를 제외한 대부분의 딥러닝 검출기는 박스마다 신뢰도(confidence)라는 0과 1 사이의 점수를 함께 내놓습니다. 0.99라면 "거의 확실히 얼굴", 0.55라면 "얼굴 같긴 한데 애매함"이라는 뜻입니다.
이 점수가 중요한 이유는 임계값(threshold)으로 결과의 품질을 조절할 수 있기 때문입니다. 예를 들어 임계값을 0.9로 두면 점수가 0.9 미만인 박스는 버려서, 벽지 무늬나 옷 주름을 얼굴로 오인하는 오검출을 줄입니다. 반대로 임계값을 낮추면 작거나 흐릿한 얼굴까지 잡지만 오검출도 늘어납니다. 이 책의 검출기들을 다룰 때 자주 등장하는 score_threshold, min_detection_confidence 같은 옵션이 바로 이 임계값입니다.
실무 팁. 처음에는 임계값을 라이브러리 기본값 그대로 두고 결과를 본 다음, 오검출이 많으면 조금 올리고 놓치는 얼굴이 많으면 조금 내리는 식으로 조정하세요. "정답 임계값"은 없습니다. 조명, 카메라, 얼굴 크기에 따라 적정값이 달라지므로, 내 데이터로 직접 맞추는 것이 정석입니다.
겹친 박스를 정리하는 NMS
검출기는 같은 얼굴 하나를 조금씩 다른 위치의 박스 여러 개로 중복 검출할 때가 많습니다. 이 겹친 박스들을 하나로 정리하는 후처리가 NMS(Non-Maximum Suppression, 비최대 억제)입니다. 이름은 거창하지만 원리는 단순합니다. 많이 겹치는 박스들 중 신뢰도가 가장 높은 하나만 남기고 나머지를 지웁니다. YuNet의 nms_threshold 같은 옵션이 이 겹침 정도의 기준을 정합니다. 대부분의 라이브러리가 NMS를 내부에서 알아서 처리하므로, 지금은 "겹친 박스를 정리하는 단계가 있다"는 정도만 알아 두면 됩니다.
이 장에서 기억할 것
검출기는 종류와 상관없이 바운딩 박스의 목록을 내놓고, 박스는 (x, y, w, h) 또는 (x1, y1, x2, y2) 두 방식으로 표기되며 서로 변환됩니다. 딥러닝 검출기는 박스마다 0~1의 신뢰도를 주고, 임계값으로 결과 품질을 조절하며, 겹친 박스는 NMS로 정리합니다. 이 공통 언어를 손에 쥐었으니, 다음 장부터 가장 고전적인 검출기인 Haar Cascade를 시작으로 검출기들을 하나씩 직접 돌려 봅니다.