KNOWLEDGE · 물체 탐지
사진 한 장에서 물체를 모두 찾으려면, 몇 번 봐야 할까?
YOLOv1은 사진을 7×7 칸으로 나누고, 신경망을 한 번만 통과시켜 모든 물체의 위치와 종류를 한꺼번에 맞힌다.
YOLO 이전의 탐지기는 물체가 있을 법한 후보 영역을 약 2,000개 뽑아 하나씩 검사했다. YOLO는 이 과정을 한 번의 예측으로 바꿨다. 이름도 그래서 You Only Look Once다. 네 장면을 직접 만져 보며 어떻게 가능한지 따라가 보자.
01 격자
물체의 중심이 떨어진 칸이 맡는다
사진을 가로세로 7칸, 모두 49칸으로 나눈다. 물체의 중심이 들어간 칸 하나가 그 물체를 맡는다. 칸마다 박스 2개와 클래스 확률 20개, 모두 30개의 숫자를 내놓는다.
개나 자전거를 끌어 보자. 키보드로는 그림을 선택한 뒤 화살표로 움직이고(Shift는 한 칸씩), 스페이스로 물체를 바꾼다.
선택한 물체
개 → 5행 3열 칸
- x, y (칸 안에서)
- 0.10, 0.48
- w, h (사진 대비)
- 0.36, 0.30
- √w, √h (예측하는 값)
- 0.60, 0.55
이 칸이 내놓는 숫자 30개 중 채워지는 곳
박스 두 개 중 정답과 더 많이 겹치는 쪽이 물체를 맡고, 신뢰도는 그 겹침(IOU)을 배운다. 나머지 박스와 48칸은 신뢰도 0을 배운다.
두 중심이 같은 칸에 있다. 칸마다 클래스가 하나뿐이라 한 물체만 배울 수 있다. 붙어 있는 작은 물체 무리에 약한 이유다.
출처: 논문 §2, 그림 2, §2.4
02 구조
448 × 448 사진이 7 × 7 × 30이 되기까지
합성곱 24층이 가로세로를 64분의 1로 줄이며 특징을 뽑고, 완전연결 2층이 7 × 7 × 30개의 숫자를 만든다. 앞 20층은 ImageNet 사진 분류로 미리 배우고, 나머지 4층과 완전연결 층은 탐지를 위해 붙였다.
블록 하나가 한 층의 출력이다. 정사각형 면은 가로세로 크기, 두께는 채널 수다(둘 다 로그 척도).
합성곱 24 · 완전연결 2 · 파라미터 271,703,550 · 한 장에 곱셈-덧셈 약 203억 번
가로세로는 448에서 7로 64분의 1이 되고, 채널은 3에서 1024로 늘어난다. 층을 고르면, 입력의 어느 창이 모든 채널을 거쳐 출력 한 칸이 되는지 선으로 보인다.
끌어서 돌리고, 휠이나 두 손가락으로 확대한다. 블록을 누르면 그 층으로 간다. 키보드: 화살표로 회전, +/−로 확대, [ ]로 층 이동.
0 / 31 · 입력
448 × 448 크기의 사진, RGB 3채널. 원본 사진을 이 크기로 바꿔 넣는다.
출처: 논문 §2.1, §2.2, 그림 3 · 수치는 이 구조를 PyTorch로 구현해 센 값
03 추론
98개의 박스가 몇 개로 줄어드나
신경망을 한 번 통과시키면 칸마다 박스 2개, 모두 98개가 나온다. 박스의 점수는 클래스 확률 × 신뢰도다. 점수가 낮은 박스를 버리고, 같은 물체를 겹쳐 잡은 박스는 NMS(겹침 제거)로 점수가 가장 높은 하나만 남긴다.
점수 기준을 올려 보고, NMS를 켜 보자.
이 박스들은 논문대로 직접 구현한 YOLO(합성곱 8층의 작은 구성)를 사각형·원·삼각형 그림으로 학습시킨 뒤, 처음 보는 장면에서 낸 실제 출력이다.
출처: 논문 §2, 식 1, §2.3
04 학습
무엇을 틀리면 벌점이 큰가
학습은 다섯 가지 오차의 제곱합을 줄인다. 박스 중심, 박스 크기, 물체가 있는 박스의 신뢰도, 물체가 없는 박스의 신뢰도, 클래스다. 그런데 제곱합을 그대로 쓰면 두 군데서 어긋난다.
크기 오차: 같은 오차도 작은 박스에 더 치명적이다
Δw는 예측 너비와 정답 너비 w의 차이다. √w의 차이가 아니라, 사진 너비를 1로 둔 w 자체를 얼마나 틀렸는지다. 같은 Δw라도 작은 박스는 겹침(IOU)이 크게 떨어지고 큰 박스는 거의 그대로다. 그래서 YOLO는 w 대신 √w를 예측하고, 벌점도 √w끼리의 차이로 매긴다.
예측 너비 w + Δw 0.15겹침 IOU 0.667
Δw를 0.05에 고정하고 정답 너비 w만 바꾼 벌점
같은 Δw(0.05)에서 √w의 차이는 작은 박스(w = 0.1)가 0.071, 큰 박스(w = 0.8)가 0.028이다. 벌점은 이 차이의 제곱이라 작은 박스 쪽이 6.7배 크다. w를 그대로 쓰면 두 벌점이 같다(0.0125).
빈 박스: 98개 중 대부분은 물체가 없다
7 × 7 칸마다 박스가 2개씩, 모두 98개다. 물체의 중심이 있는 칸에서 박스 하나만 그 물체를 맡고, 나머지 박스는 모두 신뢰도 0을 배운다. 빈 박스가 압도적으로 많아 그대로 두면 물체를 맡은 박스의 신호를 덮는다. 논문은 빈 박스의 벌점에 λnoobj = 0.5를 곱한다.
막대 높이가 신뢰도 벌점의 무게다. 끌어서 돌리고, 칸을 누르면 물체를 놓거나 뺀다(누른 박스가 맡는다). 키보드: 화살표로 회전.
물체를 맡은 박스 2 · 빈 박스 96
칸을 눌러 물체를 놓으면, 그 칸의 두 박스가 각각 무엇을 배우는지 여기에 나온다.
신뢰도 벌점의 무게
빈 박스 하나의 무게(λnoobj = 0.50)는 작아도 96개를 모두 합하면 신뢰도 벌점 무게의 96.0%를 차지한다(λnoobj = 1이면 98.0%). 논문은 λnoobj = 0.5로 빈 박스의 벌점을 줄이는 동시에, 좌표 벌점에는 λcoord = 5를 곱해 키운다.
출처: 논문 §2.2, 식 3
한계
한 번에 보는 대가
- 칸마다 박스 2개와 클래스 1개만 예측한다. 새 떼처럼 붙어 있는 작은 물체는 놓치기 쉽다.
- 박스 모양을 데이터에서 배우므로 처음 보는 비율이나 배치의 물체에 약하다.
- 여러 번 줄어든 거친 특징으로 박스를 맞히므로, 가장 흔한 오류는 부정확한 위치다.
오해한 번만 본다는 건 대충 본다는 뜻이다.
실제로는사진 전체를 한 번에 보기 때문에 주변 맥락을 쓴다. 논문에서 배경을 물체로 착각하는 실수는 Fast R-CNN의 절반 이하였다.
출처: 논문 §1, §2.4, §4.2
질문
자주 묻는 질문
YOLO는 무슨 뜻인가?
You Only Look Once의 줄임말이다. 사진 속 물체의 위치와 종류를 찾는 물체 탐지(객체 탐지, object detection) 방법으로, 후보 영역을 하나씩 검사하지 않고 사진 전체를 신경망에 한 번만 통과시켜 모든 물체를 한꺼번에 예측한다.
YOLOv1은 어떤 구조인가?
합성곱 24층과 완전연결 2층으로 이루어진다. 448 × 448 사진을 받아 7 × 7 × 30을 낸다. 논문 구조대로 구현해 세면 파라미터는 약 2억 7천만 개이고, 그중 약 76%가 첫 완전연결 층에 있다.
출력은 왜 7 × 7 × 30인가?
사진을 7 × 7 칸으로 나누고, 칸마다 박스 2개와 클래스 확률 20개를 내기 때문이다. 박스 하나는 x, y, w, h, 신뢰도의 5개 숫자라서 2 × 5 + 20 = 30이다.
한 장에서 박스는 몇 개 나오고, 어떻게 줄이나?
7 × 7 칸 × 2개 = 98개가 나온다. 박스마다 클래스 확률 × 신뢰도로 점수를 매겨 낮은 것을 버리고, 같은 물체를 겹쳐 잡은 박스는 NMS(겹침 제거)로 점수가 가장 높은 하나만 남긴다.
왜 너비 대신 √너비를 예측하나?
같은 크기의 오차라도 작은 박스에서는 겹침(IOU)이 크게 떨어지고, 큰 박스에서는 거의 그대로이기 때문이다. √w의 차이로 벌점을 매기면, 너비를 똑같이 0.05 틀렸을 때 작은 박스(w = 0.1)의 벌점이 큰 박스(w = 0.8)의 약 6.7배가 된다. 논문도 이 방법이 문제를 일부만 해결한다고 쓴다.
손실의 λcoord와 λnoobj는 무엇인가?
손실(식 3)에 곱하는 가중치다. 박스 좌표 오차에는 λcoord = 5를 곱해 키우고, 물체가 없는 박스의 신뢰도 오차에는 λnoobj = 0.5를 곱해 줄인다. 대부분의 칸에는 물체가 없어서, 그대로 두면 신뢰도를 0으로 끌어내리는 신호가 물체가 있는 칸의 신호를 압도해 학습이 불안정해지기 때문이다.
YOLOv1은 얼마나 빠른가?
논문 기준으로 Titan X GPU에서 초당 45장을 처리하고, 더 작은 Fast YOLO는 초당 155장을 처리한다. 스트리밍 영상을 25밀리초 이내의 지연으로 실시간 처리할 수 있는 속도다.
YOLOv1의 한계는 무엇인가?
칸마다 박스 2개와 클래스 1개만 예측해서, 새 떼처럼 붙어 있는 작은 물체는 놓치기 쉽다. 학습에서 보지 못한 비율이나 배치의 물체에 약하고, 가장 흔한 오류는 부정확한 위치다.
출처: 논문 초록, §1, §2, §2.2, §2.3, §2.4, 표 1 · 파라미터 수와 벌점 배율은 이 페이지의 구현과 계산
더 보기
이 페이지의 층 구조와 계산량, 예측 박스는 논문대로 직접 구현한 PyTorch 코드에서 뽑았다.