108. YOLO (You Only Look Once), SSD (1-Stage 탐지기)

⚠️ 이 문서는 고양이가 어디 있는지 후보(2,000개)를 1차로 쪼개서 찾고 2차로 CNN을 돌리느라 사진 1장 판독에 40초가 걸려 자율주행차가 벽에 다 박아버리던 2-Stage(R-CNN)의 끔찍한 굼벵이 속도를 박살 내기 위해, **사진을 쪼개지 않고 단 한 번만(Look Once) 딥러닝 뇌세포에 통과시켜 위치 박스(Bounding Box)와 개인지 고양이인지(Class)를 1타 2피로 동시에 뱉어내는 초광속 스나이퍼, '1-Stage 객체 탐지기(YOLO, SSD)'**를 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 문제를 복잡하게 풀지 않는다. 이미지를 투명한 바둑판(Grid)으로 나누고, 각 바둑판 칸의 담당자에게 "네 칸 안에 물체 중심점 있으면 니가 박스 그리고 이름 맞춰!"라고 하청을 줘서 한 번의 딥러닝 렌더링으로 끝내버리는 회귀(Regression) 문제로 퉁친다.
  2. 가치: 인류 최초로 초당 45장 이상(Real-Time 45 FPS)의 속도로 영상을 판독할 수 있게 되었다. 이 미친 속도 덕분에 드론, 자율주행차, 공장 CCTV 로봇 등 '현실 세계의 움직이는 눈' 역할을 하는 산업 현장의 99%를 완벽하게 장악했다.
  3. 기술 체계: 격자를 쪼개서 직관적으로 때려 맞추는 스피드 깡패 YOLO와, YOLO가 뭉툭하게 작게 멀리 있는 물체를 못 잡는 단점을 보완하기 위해 여러 층의 특성 맵(Feature Map)에서 크기별로 그물을 여러 번 쳐서 꼼꼼하게 건져 올리는 **SSD(Single Shot MultiBox Detector)**가 양대 산맥을 이룬다.

Ⅰ. YOLO (You Only Look Once)의 파괴적 발상

두 번 보지 마라. 뇌(CNN)를 한 번 스치는 순간 결론이 나와야 한다.

  1. 바둑판(Grid Cell)의 분할과 책임 할당:
    • YOLOv1은 들어온 $448 \times 448$ 사진에 투명한 $7 \times 7$ 바둑판 선을 긋는다(총 49칸).
    • "고양이 사진의 정중앙(Center) 좌표가 3행 4열 칸(Grid)에 떨어졌다!"
    • 3행 4열 담당 세포에게 절대 권력이 부여된다. "야, 고양이 중심이 네 칸에 들어갔으니, 네가 고양이 전체 크기를 감싸는 네모 박스(X, Y, W, H)를 치고, 저게 고양이일 확률(Class)을 책임지고 예측해 뱉어내라!"
  2. 원샷(1-Stage) 동시 출력:
    • 이 49개의 칸이 각자 박스를 2개씩 마구잡이로 예측해서 던진다(총 98개 박스).
    • 그리고 각 칸은 자기가 감싼 게 개인지, 고양이인지 20개 동물 확률 점수도 같이 뱉는다.
    • 이 모든 짓이 R-CNN처럼 후보를 오려내는 기다림 없이, 단 1번의 딥러닝 통과(Forward Pass)의 끝자락(Output Tensor)에서 1개의 거대한 숫자로 된 직육면체 덩어리($7 \times 7 \times 30$)로 광속으로 툭 떨어져 나온다.
  3. NMS (지우개)로 화면 정리:
    • 49명이 박스를 98개나 마구 쳐대니 고양이 얼굴에 빨간 박스 10개가 겹쳐져 지저분하다.
    • 마지막에 **NMS (Non-Maximum Suppression)**라는 필터 뜰채로 "제일 확률 높은 박스 딱 1개만 살려두고, 걔랑 너무 많이 겹친(IoU 큼) 잡다한 쓰레기 박스 9개는 싹 다 지워버려라!"라고 빗자루질을 해버려 가장 예쁘고 정확한 박스 1개만 화면에 남긴다.

📢 섹션 요약 비유: **R-CNN(2-Stage)**은 경찰 2,000명이 강남구 지도를 1장씩 오려 들고 현미경으로 "여기에 도둑 있냐?"고 한 명씩 확인하는 굼벵이 수사입니다. **YOLO(1-Stage)**는 강남구를 $7 \times 7$ 바둑판 49구역으로 나누고, 각 구역 파출소장 49명에게 무전기를 때립니다. "니네 구역에 도둑 있냐? 딱 한 번만 훑어보고(Look Once) 있으면 즉시 좌표(박스)랑 얼굴(이름) 1초 만에 다 불어!" 파출소장 49명이 동시에(병렬 연산) 무전을 쳐서 본부에 단 1초 만에 범인 위치를 동시다발적으로 찍어버리는 초광속 레이더 탐지술입니다.


Ⅱ. YOLO의 치명적 맹점: 멀리 있는 새는 보이지 않는다

$7 \times 7$ 격자의 저주. 한 칸에 물체가 2개 있으면 어떡할 건가?

  1. 작은 객체(Small Object) 인식 불가:
    • 큰 개나 자동차는 기가 막히게 찾는다. 하지만 하늘에 날아가는 아주 작은 철새 떼 사진을 넣으면 멘붕이 터진다.
    • 철새 5마리가 재수 없게 $7 \times 7$ 바둑판 중 딱 '1칸(Grid Cell)' 안에 옹기종기 모여있다고 치자.
    • 욜로의 헌법: "1칸의 담당자는 오직 1개의 물체만(엄밀히는 1개의 Class만) 예측할 수 있다."
    • 결과: 철새 5마리가 있어도 그 칸 담당자는 박스 1개만 치고 "여기 새 1마리!"라고 바보 같은 결론을 뱉는다. 작게 뭉쳐있는 물체(Small & Clustered Object) 탐지율이 0%로 수렴하는 끔찍한 해상도의 맹점이다.
  2. 정확도(mAP)의 희생 (Trade-off):
    • 욜로는 R-CNN보다 속도는 10배 빠르지만, 저런 뭉툭하고 과감한 바둑판 예측 방식 때문에 테두리 박스를 예쁘게 딱 맞게 치는 정확도(Localization Accuracy)나 작은 물체 인식률이 눈물 나게 떨어졌다. (자율주행 중 멀리 있는 보행자를 못 볼 위험 존재)

📢 섹션 요약 비유: 욜로는 촘촘한 그물이 아니라 코끼리 잡는 듬성듬성한 '대물용 그물($7 \times 7$ 바둑판)'을 바다에 한 번 딱 던지는 낚시입니다. 고래(자동차)나 상어(큰 개)는 그물에 완벽하게 딱 걸려 1초 만에 낚아 올립니다. 하지만 정어리 수백 마리(작은 새 떼 무리)가 그물 한 칸에 들어오면, 그물이 너무 커서 정어리 99마리는 다 빠져나가고 재수 좋게 1마리만 건져 올리는 심각한 '소형 타겟 탐지 불능'의 시각장애를 앓게 됩니다.


Ⅲ. SSD (Single Shot MultiBox Detector): 욜로의 단점을 메꾸다

큰 그물만 던지지 마라. 층(Layer)마다 눈금 크기가 다른 그물을 6번 던져라!

  1. SSD의 파괴적 발상 (다중 스케일 특성 맵):
    • 욜로(Yolo v1)의 바보짓에 빡친 학자들이 2016년에 SSD를 발표했다.
    • "왜 멍청하게 CNN 다 끝나고 맨 마지막에 나온 $7 \times 7$ 크기의 요약 지도 딱 1장만 보고 바둑판 예측을 하냐? 그땐 이미 픽셀이 다 뭉개져서 작은 물체는 사라지고 없잖아!"
  2. 다양한 깊이에서의 동시 사격 (MultiBox):
    • CNN을 통과할 때, 초반 층(Layer)에서는 사진 크기가 $38 \times 38$로 커서 디테일(작은 물체)이 살아있다. 뒷 층으로 갈수록 $1 \times 1$로 쪼그라든다(큰 물체용).
    • SSD는 중간 층($38 \times 38$)부터 맨 끝 층($1 \times 1$)까지 총 6개의 층에서 나오는 '크기가 다른 특성 맵' 지도를 몽땅 다 뽑아내어 각자 동시에 예측(박스 그리기)을 빵빵 쏴댄다(Single Shot).
  3. 결과: 작은 물체 사냥꾼의 탄생:
    • 얕은 층($38 \times 38$ 촘촘한 바둑판)에서는 저 멀리 날아가는 작은 철새 떼를 귀신같이 촘촘하게 잡아낸다.
    • 깊은 층($5 \times 5$ 거대한 바둑판)에서는 화면을 다 가리는 코끼리를 기가 막히게 잡아낸다.
    • 속도는 욜로처럼 1-Stage(Single Shot)라 미친 듯이 빠르면서도(59 FPS), 정확도는 무거운 Faster R-CNN 멱살을 잡을 정도로 끌어올린 실전 최강의 밸런스 붕괴 아키텍처다. (물론 이후 자존심 상한 욜로가 v2, v3... 현재 v11까지 진화하며 이 SSD의 다중 맵 아이디어를 싹 다 베껴 훔쳐 가서 결국 현재는 욜로가 왕좌를 100% 되찾았다.)

📢 섹션 요약 비유: YOLO v1이 바다의 수심 100m 밑바닥(CNN 맨 마지막 층)에서 구멍이 엄청 큰 거대 그물 딱 1개만 던져서 고래(큰 물체)만 잡는 원시적인 방식이었다면, SSD는 배에서 수심 10m, 20m, 50m, 100m마다(CNN의 각기 다른 6개 층) 촘촘한 그물부터 듬성듬성한 그물까지 각기 다른 6개의 그물을 한 번에 촤라락! 펼쳐서 쏘는(Single Shot) 최첨단 싹쓸이 어선입니다. 얕은 층에선 촘촘한 그물로 정어리(작은 물체)를 다 건져 올리고 깊은 층에선 거대 그물로 고래를 건져 올려, 1타 6피로 속도와 정확도를 모두 씹어먹은 어업 혁명입니다.