고양이 vs 사람 — 사진은 숫자 행렬이다

사람은 한눈에 고양이와 사람을 가르지만, 컴퓨터가 받는 것은 0~255 숫자가 빽빽한 표다. 사진이 행렬이 되는 과정을 픽셀 하나까지 따라가고, 픽셀 거리가 왜 "닮음"을 재지 못하는지 확인한 뒤, 3 × 3 필터로 경계를 찾는 합성곱을 손으로 계산한다. 마지막으로 사람이 정한 특징(얼굴 상자·특징점·경계 세기)의 장점과 한계를 본다.

0~255채널 값 하나의 범위 (8비트)
9,40856 × 56 컬러 사진의 숫자 개수
3 × 3필터 하나의 크기
2001Viola–Jones 얼굴 검출 [R4]
14% → 90%2칸 민 숫자: MLP 대 CNN (코드 2)
2개Colab에서 바로 돌리는 코드
1문제

고양이 vs 사람 — 사람에게는 가장 쉬운 문제

뾰족한 귀와 털, 매끈한 피부. 사람은 한눈에 가른다. 컴퓨터는 이 사진을 무엇으로 받고, 어떤 단서부터 찾을 수 있을까?

왼쪽은 고양이 얼굴 사진 위에 이마·눈·코를 잇는 빨간 선, 오른쪽은 긴 머리 여성 얼굴 사진에 초록 얼굴 상자와 빨간 특징점, 분홍 핵심점이 찍힌 이미지
저자가 직접 만든 이미지. 선과 점은 사람이 미리 정해 둔 얼굴 특징점이다.

왼쪽 고양이 위의 빨간 선은 이마·눈·코를 잇는 얼굴 뼈대, 오른쪽 사람 위의 초록 상자는 "여기 얼굴이 있다"는 검출 결과, 빨간 점은 턱선·눈썹·입술 둘레의 특징점, 분홍 점은 두 눈·코·입의 핵심 위치입니다. 모두 사람이 "무엇을 볼지" 미리 정해 둔 단서입니다.

이 편은 두 가지를 봅니다. 첫째, 컴퓨터가 받는 것은 이런 선과 점이 아니라 숫자 행렬이라는 것(섹션 2~3). 둘째, 그 숫자에서 경계 같은 단서를 찾는 필터와, 사람이 정한 단서의 한계(섹션 4~6).

숫자 예시는 시리즈 내내 같은 치와와 사진 한 장(4-4의 주인공)으로 따라갑니다. 픽셀과 필터는 어떤 사진에나 똑같이 작동하기 때문입니다. 실습에서는 고양이·사람·강아지·치와와·머핀 다섯 장을 모두 고를 수 있습니다.

초보자를 위한 풀이

사람에게 쉬운 문제가 컴퓨터에게도 쉬운 것은 아닙니다. 사람은 사진을 보는 순간 "털이 있다", "귀가 뾰족하다"를 알아차리지만, 컴퓨터는 그 단서를 숫자에서 하나씩 계산해 내야 합니다. 고양이 vs 사람은 그 단서가 뚜렷한 편이라, 이미지 분류의 첫 연습으로 좋습니다.

2픽셀

픽셀과 행렬 — 컴퓨터가 받는 가장 작은 정보

사진은 숫자 격자이고, 컬러 사진은 그 격자가 세 장 겹친 것이다. 모델이 입력으로 받는 가장 작은 단위는 채널 값 하나(0~255)다.

1정의

디지털 사진은 가로·세로로 촘촘하게 나뉜 작은 칸의 모음입니다. 이 칸 하나를 픽셀(pixel, picture element)이라고 합니다. 픽셀 하나에는 색이 하나만 들어 있고, 그 색은 빨강(R)·초록(G)·파랑(B) 빛의 세기 세 개로 적힙니다. 세기는 0(빛 없음)부터 255(가장 밝음)까지의 정수입니다. 그래서 컬러 사진은 세로 × 가로 × 3개의 숫자가 늘어선 표, 즉 행렬(정확히는 3층짜리 텐서)이 됩니다.

모양세로 H × 가로 W × 채널 3
값 하나0 ~ 255 정수 (8비트)
가장 작은 의미 단위채널 값 하나

쉽게 말하면모눈종이 색칠 놀이입니다. 모눈 한 칸에 물감 세 통(빨강·초록·파랑)을 각각 몇 방울 넣었는지 0~255로 적어 두면, 그 쪽지만으로 누구나 같은 그림을 다시 칠할 수 있습니다. 컴퓨터가 가진 것은 그림이 아니라 이 쪽지입니다.

2수식
X[y, x, c] ∈ {0, 1, …, 255},   y = 1…H,  x = 1…W,  c ∈ {R, G, B}주의: 이 0~255는 화면 표시용으로 보정된(감마 부호화된) 값입니다. 숫자가 두 배라고 빛의 물리적 세기가 정확히 두 배인 것은 아닙니다.
흑백 밝기  Y = 0.299·R + 0.587·G + 0.114·B사람 눈이 초록에 가장 민감하다는 점을 반영한 가중합입니다(ITU-R BT.601). 컬러 칸 하나가 숫자 하나로 줄어듭니다.
모델에 넣기 전:  x′ = x / 255  (0 ~ 1 사이로)
H, W
세로 칸 수, 가로 칸 수. 둘을 합쳐 해상도라고 부름
c (채널)
색 층. 컬러는 R, G, B 세 장, 흑백은 한 장
X[y, x, c]
y번째 줄, x번째 칸, c 채널의 숫자 하나. 모델이 받는 가장 작은 입력
Y
세 채널을 섞어 만든 흑백 밝기
수식 한 조각씩 읽기
  1. {0, 1, …, 255}값이 정수 256가지라는 뜻입니다. 2⁸ = 256이므로 숫자 하나가 정확히 8비트(1바이트)에 들어갑니다.
  2. H × W × 3숫자의 개수입니다. 이 페이지의 실습 사진은 56 × 56 × 3 = 9,408개, 흔한 모델 입력 224 × 224 × 3은 150,528개, 1,200만 화소 휴대폰 사진은 약 3,600만 개입니다.
  3. 0.299R + 0.587G + 0.114B퍼셉트론의 가중합과 같은 모양입니다. 세 숫자에 비중을 곱해 더하면 밝기 하나가 됩니다. 세 비중을 더하면 1이라 결과도 0~255 안에 있습니다.
  4. x / 255큰 숫자를 0~1로 줄여 모델이 다루기 쉽게 합니다. 앞 편에서 본 정규화와 같은 목적입니다.
숫자로 한 번 해 보기 (치와와 사진을 14 × 14로 줄였을 때)눈 칸 (R, G, B) = (39, 37, 43) → Y = 0.299×39 + 0.587×37 + 0.114×43 = 38.3 ≈ 38 (거의 검정)
털 칸 (R, G, B) = (212, 161, 115) → Y = 0.299×212 + 0.587×161 + 0.114×115 = 171.0 ≈ 171 (밝은 베이지)
두 칸의 차이 171 − 38 = 133. 이 급격한 차이가 섹션 4에서 "경계"로 잡힙니다.
3다이어그램 · 가장 작은 정보까지 쪼개 보기
사진에서 비트까지사진 한 장, 픽셀 한 칸, 채널 값 세 개, 숫자 하나, 비트 여덟 개로 점점 쪼개지며, 채널 값 하나가 이미지에서 의미를 가진 가장 작은 단위로 강조된다 사진픽셀 1칸채널 값 3개숫자 1개비트 8개 R = 39 G = 37 B = 43 39 00100111 "치와와"라는 뜻"거의 검은색"빛의 세기 셋빨강 세기 하나켜짐/꺼짐뿐 모델이 받는 가장 작은 입력 ← 의미가 크다 (사람이 이해)의미가 작다 (기계가 저장) → 왼쪽으로 갈수록 뜻이 생기고, 오른쪽으로 갈수록 숫자만 남습니다
4해석

사진을 계속 쪼개면 픽셀 한 칸, 그 안의 R·G·B 숫자, 숫자 하나를 이루는 비트 여덟 개까지 내려갑니다. 비트는 컴퓨터가 저장하는 가장 작은 단위지만, 비트 하나는 색도 밝기도 아닌 켜짐/꺼짐일 뿐입니다.

그래서 이미지 딥러닝에서 의미를 가진 가장 작은 정보는 채널 값 하나, 즉 "이 칸의 빨강 세기는 39"라는 숫자입니다. 모델의 첫 층은 정확히 이 숫자들(X[y, x, c])을 입력으로 받습니다.

하지만 이 숫자 하나에는 "치와와"라는 뜻이 전혀 없습니다. 눈의 픽셀 (39, 37, 43)과 블루베리 픽셀 (37, 31, 37)은 숫자로 보면 거의 같습니다. 뜻은 여러 픽셀이 어떻게 모여 있느냐에서 생기고, 그 모임을 찾는 것이 섹션 4의 특징 추출입니다.

5움직이는 다이어그램 · 사진이 숫자가 되기까지

치와와 사진을 가로세로 14칸으로 자르고, 눈 한 칸을 골라 숫자로 바꾸는 과정입니다. 오른쪽 숫자는 사진의 실제 픽셀에서 계산한 값입니다.

  1. 원본 사진
  2. 격자로 자르기
  3. 한 칸 고르기
  4. R·G·B 세 숫자
  5. 흑백 숫자 하나
  6. 행렬로 펼치기
6픽셀 돋보기 · 직접 눌러 숫자 보기

사진과 해상도를 고르고, 그림의 칸을 누르거나 마우스를 올려 보세요. 옆(모바일에서는 아래) 표는 고른 칸과 그 주변 7 × 7칸의 실제 숫자입니다. 그림을 누른 뒤에는 방향키로 칸을 옮길 수 있습니다.

사진
해상도
보기

7주요 특징 · 픽셀 그대로 쓰면
강점
  • 사진의 정보가 하나도 빠지지 않은, 가장 정직한 입력
  • 모든 사진이 같은 모양(H × W × 3)이라 한 모델에 똑같이 넣을 수 있음
  • 숫자라서 곱하기·더하기로 바로 계산할 수 있음
한계
  • 숫자가 너무 많음: 224 × 224 사진 한 장에 150,528개
  • 사진을 한두 칸만 옮기거나 조금 밝게 해도 거의 모든 숫자가 바뀜
  • 숫자 하나에는 뜻이 없음. 눈과 블루베리가 같은 숫자일 수 있음 (섹션 4와 4-3·4-4에서 다룸)
위치: 딥러닝 이전에는 사람이 픽셀에서 특징을 뽑는 규칙을 직접 만들었고(04의 랜드마크), 2012년 이후 CNN은 픽셀을 그대로 받아 특징까지 스스로 배웁니다.
✓확인 문제

Q1. 가로 10칸, 세로 10칸짜리 컬러 사진에는 숫자가 몇 개 들어 있나요?

Q2. 픽셀 값 (R, G, B) = (0, 0, 0)은 무슨 색인가요?

Q3. 같은 사진을 오른쪽으로 두 칸 밀면, 같은 자리의 숫자는?

Q4. 이미지 딥러닝 모델이 입력으로 받는 가장 작은 정보는?

초보자를 위한 풀이

픽셀은 사진을 이루는 작은 칸이고, 칸마다 빨강·초록·파랑 빛의 세기가 0~255 숫자로 적혀 있습니다. 4-1의 표에 비유하면 사진 한 장은 "세로 × 가로 × 3"칸짜리 한 줄입니다. 픽셀 돋보기에서 칸을 눌러 실제 숫자를 확인하고, 해상도를 바꿔 숫자 개수가 어떻게 달라지는지 보세요.

3픽셀 거리

픽셀 거리의 함정 — 한 칸만 밀어도 "다른 사진"

두 사진의 같은 자리 숫자를 빼서 거리를 재면 "닮음"을 잴 수 있을까? 같은 치와와를 밀거나 어둡게 하고, 다섯 장의 거리를 모두 재 본다.

1한 칸만 옮겨도 "다른 사진"이 된다 이 페이지 사진 기준

두 사진의 픽셀 거리는 같은 자리 흑백 숫자끼리 뺀 값을 제곱해 평균 내고 제곱근을 씌운 값입니다(0이면 완전히 같음). 치와와를 옆으로 밀거나 어둡게 만들어 보세요. 사람 눈에는 여전히 같은 치와와인데, 숫자로는 머핀보다 더 먼 사진이 되기도 합니다.

거리(A, B) = √( (1/N) Σ (Ai − Bi)² )N = 56 × 56 = 3,136칸. 흑백 밝기로 비교합니다.
치와와 (원본)
바꾼 치와와
머핀

2픽셀 거리 표: 치와와는 누구와 가까운가 이 페이지 사진 기준

이 페이지의 다섯 사진끼리 픽셀 거리를 모두 쟀습니다. 숫자가 작을수록 "닮았다"고 계산된 것입니다. 가장 작은 값에는 색을 칠했습니다.

이 표의 값은 이 페이지의 다섯 장(얼굴 부분만 잘라 56 × 56으로 줄인 것)으로 잰 것입니다. 다른 사진을 쓰면 배경·조명·구도에 따라 값이 크게 달라지지만, "픽셀 거리가 뜻의 거리와 다르다"는 결론은 실제 사진에서도 널리 알려진 성질입니다.

3Colab 코드 1의 결과 · 다른 사진으로 재 보면

코드 1은 scikit-image에 들어 있는 고양이 사진(chelsea)과 사람 사진(astronaut)의 얼굴 부분을 56 × 56으로 줄여 같은 실험을 합니다. 같은 고양이를 1칸 밀면 거리 16.9, 2칸이면 27.1, 8칸이면 40.5로 커졌고, 고양이와 사람의 거리는 85.3이었습니다. 몇 칸 밀기만 해도 다른 동물과의 거리의 절반 가까이가 됩니다.

픽셀 거리는 "같은 자리 숫자가 비슷한가"만 잽니다. 그래서 위치·밝기·구도에 민감하고, 무엇이 찍혔는지는 모릅니다. 이 한계가 섹션 4의 필터와 4-3의 CNN이 필요한 이유입니다.

초보자를 위한 풀이

4-1의 k-NN은 "가까운 이웃"에게 물었습니다. 사진에서 같은 일을 하려면 사진 사이의 거리가 뜻을 반영해야 합니다. 그런데 픽셀 거리로는 치와와가 같은 개(골든 리트리버)보다 머핀에 더 가깝고, 같은 치와와도 4칸만 밀면 머핀보다 멀어집니다. 사진에서는 픽셀 그대로의 거리로 이웃을 찾으면 안 된다는 뜻입니다.

4합성곱

합성곱과 필터 — 이웃한 픽셀이 만드는 무늬 찾기

3 × 3 숫자 표(필터)를 사진 위에 미끄러뜨리며 곱하고 더한다. 무늬와 닮은 곳에서 큰 수가 나오고, 그 결과를 모은 것이 특징 맵이다.

1모델

특징은 "여기서 밝았다가 갑자기 어두워진다(경계)", "주변보다 둥글게 어둡다(점)", "가는 선이 촘촘하다(털 결)"처럼 여러 픽셀이 함께 만드는 패턴입니다. CNN은 3 × 3 같은 작은 숫자 표, 필터(커널)를 사진 위에 올려놓고 한 칸씩 미끄러뜨리며 겹친 숫자끼리 곱해 모두 더합니다. 필터 무늬와 닮은 곳에서는 큰 수가, 다른 곳에서는 작은 수가 나오고, 이 결과를 모은 새 행렬이 특징 맵입니다. 이 계산을 합성곱이라고 부릅니다.

입력픽셀 행렬 X
도구작은 필터 K (예: 3 × 3)
출력특징 맵 F

쉽게 말하면무늬 도장 찾기 놀이입니다. "왼쪽은 어둡고 오른쪽은 밝은" 무늬가 새겨진 도장을 사진 위 모든 자리에 대 보고, 무늬가 잘 겹치는 자리마다 높은 점수를 적습니다. 점수표를 다 채우면 사진 속 세로 경계가 어디 있는지 한눈에 보입니다. 도장을 바꾸면 찾는 무늬도 바뀝니다.

2수식
(X ∗ K)(i, j) = Σu=0…2 Σv=0…2 K(u, v) · X(i+u, j+v) + b수학의 합성곱은 필터를 뒤집어 곱하지만, 딥러닝에서는 이처럼 뒤집지 않고 곱하는 계산(교차상관)을 관례적으로 "합성곱"이라 부릅니다. 필터 숫자를 학습으로 찾으므로 결과는 같습니다.
F(i, j) = ReLU((X ∗ K)(i, j)) = max(0, (X ∗ K)(i, j))ReLU는 음수를 0으로 바꿉니다. "무늬가 반대로 나타난 곳"은 버리고 "무늬가 있는 곳"만 남깁니다.
최대 풀링:  P(i, j) = max { F(2i, 2j), F(2i+1, 2j), F(2i, 2j+1), F(2i+1, 2j+1) }2 × 2 칸 가운데 가장 큰 값만 남겨 가로세로를 절반으로 줄입니다. 특징이 한두 칸 움직여도 결과가 덜 흔들립니다.
K(u, v)
필터의 숫자 9개. 퍼셉트론의 가중치 w와 같은 역할이며, 학습으로 찾는 대상
X(i+u, j+v)
필터 아래에 겹친 픽셀 9개
b
편향. 필터마다 하나
F, P
특징 맵, 풀링한 특징 맵
수식 한 조각씩 읽기
  1. Σ Σ K·X3 × 3 = 9쌍을 같은 자리끼리 곱해 모두 더합니다. 4-1에서 본 퍼셉트론의 가중합 w · x와 똑같은 계산이며, 입력이 사진의 작은 조각이라는 점만 다릅니다.
  2. (i, j)필터를 올려놓은 자리입니다. i, j를 바꿔 가며 같은 필터로 사진 전체를 훑습니다. 같은 가중치를 모든 자리에서 다시 쓰기 때문에 사진 어디에 눈이 있어도 같은 방식으로 찾습니다.
  3. max(0, ·)활성화 함수 ReLU입니다. 꺾임이 있어 층을 쌓을 의미가 생깁니다.
  4. max { 4칸 }최대 풀링입니다. 56 × 56 특징 맵이 28 × 28이 되어 계산량이 4분의 1로 줄어듭니다.
숫자로 한 번 해 보기 (치와와 눈 오른쪽 가장자리, 흑백 3 × 3 조각)X = [92 129 174 ; 38 74 137 ; 55 119 176],  세로 경계 필터 K = [−1 0 1 ; −1 0 1 ; −1 0 1]
곱해서 더하기: (−92 + 174) + (−38 + 137) + (−55 + 176) = 82 + 99 + 121 = 302 → ReLU(302) = 302 (강한 경계)
털만 있는 평평한 조각 [175 176 175 ; 174 175 176 ; 175 175 174]이라면: (175 − 175) + (176 − 174) + (174 − 175) = 1 → 거의 0 (경계 없음)
3다이어그램 · 필터 한 번 찍기
합성곱 한 번5 곱하기 5 입력의 왼쪽 위 3 곱하기 3 영역과 3 곱하기 3 필터를 같은 자리끼리 곱해 더한 값이 3 곱하기 3 특징 맵의 첫 칸이 된다 입력 X (5 × 5)필터 K (3 × 3)특징 맵 (3 × 3) −101−101−101 겹쳐서 곱해서 더함 302 보라 창이 한 칸씩 오른쪽 → 아래로 이동 "왼쪽 어둡고 오른쪽 밝음" 창 위치마다 숫자 하나 출력 크기 = (5 − 3) / 1 + 1 = 3.가장자리에 0을 한 줄 둘러(패딩) 두면 입력과 같은 5 × 5를 유지할 수 있습니다.
4해석

필터는 "찾고 싶은 무늬"를 숫자로 적어 둔 것입니다. 왼쪽 열이 −1, 오른쪽 열이 +1인 필터는 오른쪽이 왼쪽보다 밝을수록 큰 수를 냅니다. 그래서 치와와 눈(어두움)과 털(밝음) 사이의 세로 경계에서 302처럼 큰 값이 나오고, 털만 있는 평평한 곳에서는 0에 가까운 값이 나옵니다.

중요한 점은 같은 필터를 사진 모든 자리에 다시 쓴다는 것입니다. 필터 하나의 숫자는 9개뿐인데 사진 어디의 경계든 찾아냅니다. 섹션 3에서 본 "한 칸만 밀어도 모든 숫자가 바뀌는" 문제도 줄어듭니다. 사진이 밀리면 특징 맵도 함께 밀릴 뿐, 경계가 있다는 사실은 그대로이기 때문입니다.

실제 CNN의 첫 층은 이런 필터를 수십 개 씁니다. 필터마다 특징 맵이 한 장씩 나오므로, 출력은 "사진 크기 × 필터 수"의 두꺼운 행렬이 됩니다.

5움직이는 다이어그램 · 필터가 미끄러지며 특징 맵을 채우는 과정

치와와 눈 부근의 흑백 8 × 8 조각(28 × 28로 줄인 사진에서 잘라 냄)에 세로 경계 필터를 한 칸씩 올려 봅니다. 파란 숫자는 "오른쪽이 더 밝다", 주황 숫자는 "왼쪽이 더 밝다"는 뜻입니다.

  1. 필터 올리기
  2. 9쌍 곱하기
  3. 모두 더하기
  4. 한 칸씩 이동
  5. ReLU로 음수 지우기
6필터 실험실 · 도장을 바꿔 가며 찍어 보기

사진과 필터를 골라 보세요. 필터 칸의 숫자를 직접 고쳐도 됩니다. 오른쪽 특징 맵에서 밝은 곳이 "무늬를 찾은 곳"입니다. 특징 맵의 칸을 누르면 그 자리의 계산이 아래에 나옵니다. 출력 크기를 56 × 56으로 유지하려고 가장자리 바깥은 가장 가까운 가장자리 픽셀을 복제해 채웠습니다. 3번 다이어그램의 0 패딩과 방식이 달라, 테두리 칸의 값은 0 패딩일 때와 다를 수 있습니다.

사진
필터
입력 (흑백 56 × 56)
특징 맵 (누르면 계산)
필터 K (3 × 3)
7주요 특징
강점
  • 필터 하나(숫자 9개)를 사진 전체에 다시 써서 가중치가 매우 적음
  • 사진이 조금 밀려도 특징은 함께 밀릴 뿐이라 판단이 흔들리지 않음
  • 층을 쌓으면 선 → 부분 → 전체로 저절로 계층이 생김
한계
  • 필터는 가까운 픽셀만 보므로, 멀리 떨어진 부분끼리의 관계는 여러 층을 거쳐야 알 수 있음
  • 회전이나 크기 변화에는 그대로는 약해, 다양한 사진으로 학습해야 함
  • 앞쪽 층의 특징은 비슷한 무늬(눈과 블루베리)를 구분하지 못함
위치: 1980년 후쿠시마의 네오코그니트론이 "국소 필터 + 층 쌓기" 구조를 처음 제안했고, LeCun의 LeNet(1989, 1998)이 이를 역전파로 학습해 손글씨 숫자를 읽었습니다. 2012년 AlexNet이 대규모 사진 분류에서 큰 차이로 이기며 딥러닝 시대를 열었습니다.
✓확인 문제

Q1. 합성곱에서 필터 한 자리의 값은 어떻게 만드나요?

Q2. 모든 칸이 10인 평평한 조각에 세로 경계 필터 [−1 0 1]×3을 찍으면?

Q3. 56 × 56 특징 맵에 2 × 2 최대 풀링을 하면 크기는?

Q4. CNN의 필터 숫자는 누가 정하나요?

초보자를 위한 풀이

합성곱은 4-1 퍼셉트론의 가중합(w·x + b)을 사진의 작은 조각마다 되풀이하는 계산입니다. 필터의 9개 숫자가 가중치이고, 같은 필터를 사진 모든 자리에 다시 쓰기 때문에 눈이 어디에 있어도 같은 방식으로 찾습니다. 코드 2에서는 손계산이 scipy 결과와 같은지 확인하고, 손글씨 숫자를 2칸 밀었을 때 픽셀을 그대로 쓰는 신경망은 14.2%로 무너진 반면 작은 CNN은 90.4%를 지키는 것을 봅니다.

5사람이 정한 특징

사람이 정한 특징 — 얼굴 상자, 특징점, 경계 세기

딥러닝 이전에는 사람이 "무엇을 잴지" 정했다. 그 방법의 장점과, 사진이 바뀌면 판단이 뒤집히는 한계를 본다.

1사람이 정한 특징의 역사 · 얼굴 검출과 특징점

딥러닝 이전의 얼굴 인식은 사람이 정한 특징으로 했습니다. 2001년 Viola와 Jones는 "눈 부분이 뺨보다 어둡다" 같은 밝기 차이를 재는 단순한 사각형 특징(Haar 특징) 수천 개를 빠르게 계산해 사진 속 얼굴 상자를 찾았습니다 [R4]. 2005년의 HOG는 작은 칸마다 경계의 방향을 세어 사람의 윤곽을 찾았습니다 [R5]. 섹션 1 이미지의 빨간 점처럼 눈꼬리·코끝·턱선의 위치를 찾는 얼굴 특징점은 이렇게 찾은 얼굴 상자 안에서 다시 계산합니다 [R6].

이 방법들은 빠르고 설명하기 쉽지만, 무엇을 잴지 사람이 먼저 알아야 하고 조명·각도·가림에 약했습니다. CNN은 같은 종류의 필터를 데이터로 배우면서 이 한계를 넘었습니다 [R7].

2사람이 정한 특징 vs 모델이 배운 특징
고양이 얼굴의 기하 구조 선과 사람 얼굴의 특징점

섹션 1의 이미지. 초록 상자는 "여기 얼굴이 있다"는 검출 결과, 빨간 점은 턱선·눈썹·입술 둘레의 얼굴 특징점, 분홍 점은 두 눈·코·입의 핵심 위치입니다. 고양이의 빨간 선은 이마·눈·코를 잇는 얼굴 뼈대입니다.

사람이 정한 특징

"눈 사이 거리", "귀 끝의 각도"처럼 무엇을 잴지 사람이 먼저 정합니다.

  • 이유를 설명하기 쉬움
  • 데이터가 적어도 동작
  • 조명·각도·가림에 약함
  • 사람이 떠올리지 못한 단서는 못 씀
CNN이 배운 특징

필터 숫자 K를 처음엔 무작위로 두고, 정답을 맞히는 쪽으로 학습이 고칩니다.

  • 털 결, 빵 결, 코의 반짝임까지 스스로 찾음
  • 조명·각도가 달라도 비교적 튼튼함
  • 사진이 수천~수백만 장 필요
  • 왜 그렇게 판단했는지 설명이 어려움
①고양이 vs 사람 쉬움

"경계 세기" 보기로 바꿔 보세요. 흥미롭게도 사진 전체의 경계 세기 평균은 둘이 거의 같습니다. 사람 사진도 긴 머리카락에 가는 선이 많기 때문입니다. 차이는 경계가 어디에 있느냐입니다. 고양이는 털 결과 줄무늬가 얼굴 한가운데까지 촘촘하고, 사람은 뺨과 이마가 매끈해 경계가 눈·코·입과 머리카락에 몰립니다. 아래 "가운데 영역" 값이 이 차이를 보여 줍니다. 평균 숫자 하나가 아니라 위치별 지도, 곧 특징 맵이 필요한 이유입니다.

3층쯤의 부분 특징도 확실히 갈립니다. 머리 위의 뾰족한 삼각형 귀, 이마의 줄무늬, 작은 분홍 코와 긴 수염은 사람 얼굴에 없습니다. 섹션 1 이미지의 빨간 선과 점은 사람이 이런 단서를 직접 정해 둔 방식이고, CNN은 같은 단서를 필터로 스스로 찾습니다.

섹션 3의 표에서 고양이와 사람의 흑백 픽셀 거리는 고양이와 강아지의 거리와 비슷한 수준입니다. 사람에게는 가장 쉬운 대결인데 픽셀 거리로는 그 차이가 드러나지 않습니다. 픽셀 거리는 뜻을 모른다는 또 하나의 증거입니다.

3Colab 코드 1의 결과 · 경계 세기 하나는 사진마다 뒤집힌다

위 쌍 비교에서는 이 페이지의 사진으로 고양이 쪽의 가운데 경계가 더 컸습니다. 그런데 코드 1에서 scikit-image의 고양이·사람 사진으로 재 보면 반대로 나옵니다(얼굴 부분 경계 세기: 고양이 101.5, 사람 123.6). 사람 사진의 머리카락과 웃는 입의 치아가 강한 경계를 만들기 때문입니다.

"경계가 많으면 고양이" 같은 사람이 정한 단일 특징은 사진이 바뀌면 쉽게 뒤집힙니다. 그래서 하나의 특징이 아니라 여러 특징의 조합을, 그것도 데이터에서 배우는 방법이 필요합니다. 이것이 4-3의 주제입니다.

초보자를 위한 풀이

사람이 정한 특징은 "왜 그렇게 판단했나"를 설명하기 쉽고, 데이터가 적어도 동작합니다. 대신 사람이 미리 알아야 하고, 사진의 조건이 바뀌면 잘 무너집니다. 쌍 비교에서 "경계 세기" 보기로 바꿔, 고양이와 사람의 경계가 어디에 모이는지 비교해 보세요.

6뒤쪽 층

층이 깊어질수록 찾는 것이 커진다

첫 층의 필터는 선과 경계를 찾는다. 층을 쌓으면 선이 모여 모서리가, 모서리가 모여 눈과 귀가, 눈과 귀가 모여 얼굴이 된다.

1층이 깊어질수록 찾는 것이 커진다
층별로 찾는 특징1층은 짧은 선과 경계, 2층은 모서리와 곡선과 질감, 3층은 눈과 귀와 코 같은 부분, 4층 이후는 얼굴 전체를 찾는다 1층 · 선과 경계2층 · 모서리·곡선·질감3층 · 부분뒤쪽 층 · 전체 픽셀 3 × 3만 봄선 여러 개를 조합눈, 뾰족한 귀, 코"고양이 얼굴" 치와와·머핀 구분 불가털 결 vs 빵 결이 갈림눈 vs 블루베리가 갈림배치 전체로 판단

풀링으로 사진을 줄여 가며 층을 쌓으면, 뒤쪽 층의 한 칸은 원래 사진의 더 넓은 영역을 봅니다. 그래서 앞쪽 층은 작은 선을, 뒤쪽 층은 선의 조합인 눈과 귀를, 더 뒤쪽 층은 얼굴 전체를 찾게 됩니다. 이 그림은 Zeiler와 Fergus(2014)가 학습된 CNN의 층별 반응을 시각화해 보인 경향을 단순하게 옮긴 것입니다.

초보자를 위한 풀이

풀링으로 사진을 줄여 가며 층을 쌓으면, 뒤쪽 층의 한 칸은 원래 사진의 더 넓은 영역을 봅니다. 그래서 앞쪽 층은 작은 선을, 뒤쪽 층은 그 선의 조합을 찾습니다 [R8]. 4-3에서 이 층들을 쌓은 CNN이 확률을 내는 과정과, 층을 쌓으면 왜 평면 하나로 안 갈리던 것이 갈리는지를 봅니다.

Colab 코드 — 이 페이지를 직접 실행해 보기

두 코드 모두 Colab에 기본으로 설치된 라이브러리와 내장 데이터만 쓴다. "노트북(.ipynb) 내려받기" 후 Colab에서 파일 → 노트북 업로드로 열거나, 복사해서 새 노트북 칸에 붙여 넣는다.

코드 1 · 사진을 숫자 행렬로 열어 보기섹션 2·3·5와 연결 · numpy, scikit-image, scipy, matplotlib (사진 내장) · CPU 수 초

scikit-image에 들어 있는 고양이·사람 사진의 모양과 픽셀 값을 보고, 흑백 밝기·픽셀 거리·경계 세기를 계산한다. 내 데이터로 바꾸려면 io.imread로 내 사진을 읽고, small()의 (위, 왼쪽, 한 변)을 얼굴 위치로 바꾼다.

실행 결과 (2026-10-04 실행, numpy 2.4 · scikit-image 0.26 · scipy 1.17 · CPU). 난수가 없어 언제 실행해도 같다.
코드 2 · 합성곱을 손으로, 그리고 CNN은 정말 밀림에 강한가섹션 4와 연결 · numpy, scipy, tensorflow(Keras), scikit-learn · CPU 약 1분

3 × 3 세로 경계 필터의 합성곱을 손으로 계산해 scipy와 맞춰 보고, 손글씨 숫자를 1~2칸 민 시험 사진에서 MLP와 작은 CNN을 비교한다.

실행 결과 (2026-10-04 실행, TensorFlow 2.21 · Keras 3 · CPU). 시드 2개 평균. 시드·버전·하드웨어에 따라 숫자가 조금 바뀔 수 있다.

AI 응용 프롬프트 — 이 코드를 출발점으로 삼기

ChatGPT, Qwen, Claude 같은 AI 도우미에 붙여 넣는 프롬프트다. "복사"를 누르면 프롬프트 뒤에 고른 코드가 함께 붙는다. 〔 〕 안을 내 상황으로 바꿔 쓰면 된다.

함께 붙일 코드

AI의 답은 출발점일 뿐이다. 제안된 논문·수치·라이브러리 함수는 반드시 원문과 공식 문서로 확인한다. 공모전·논문에 AI 도움을 받았다면 주최 측과 학술지의 규정에 따라 사용 사실과 범위를 밝힌다.

용어 정리

본문의 노란 점선 밑줄과 같은 사전이다. 시리즈 전체에서 같은 표기를 쓴다. 섹션 이름을 누르면 처음 나온 곳으로 간다.

비유 모음 — 그리고 비유가 틀리는 지점

비유는 이해의 첫걸음이지만 오해의 씨앗도 된다. 사람의 눈·뇌 비유에는 강도를 표시했다. 직접 실제로 같은 일을 한다는 근거가 있음 · 부분 일부 성질만 닮음 · 없음 대응하는 것이 알려지지 않음

개념일상 비유사람의 눈·뇌 비유비유가 틀리는 지점
픽셀모자이크 타일 한 장부분 눈의 망막에도 빛을 받는 세포가 촘촘히 있다망막의 세포는 격자로 고르게 놓여 있지 않고, 가운데(중심와)에 몰려 있으며 색 세포의 종류와 비율도 다르다
합성곱 필터무늬가 새겨진 도장부분 시각 피질의 단순 세포는 특정 방향의 경계에 강하게 반응한다뇌의 세포는 학습 방식과 연결이 훨씬 복잡하다. CNN 필터는 같은 숫자를 모든 자리에 다시 쓰지만 뇌는 그렇지 않다
특징 맵보물 지도의 X 표시없음지도는 한 장이지만, 실제 층에는 필터 수만큼 특징 맵이 겹겹이 있다
풀링반 대표 뽑기없음반 대표는 사람이 뽑지만, 최대 풀링은 숫자가 가장 큰 칸을 기계적으로 고른다
얼굴 특징점지도의 이정표없음이정표는 사람이 세우지만, 특징점의 위치는 학습된 모델이 사진마다 계산한다. 가려지면 틀린 곳에 찍힌다

저자 소개와 레퍼런스

E-1 저자 소개 · E-2 학술 레퍼런스 · E-3 그림·데이터 참고 자료

E-1 저자 소개

안상선 ((주)M-Robo 대표)

한국전기안전공사, 매일경제신문을 거쳐 현재 매일경제 사외벤처 (주)M-Robo를 창업해 대표로 재직하고 있다. (주)M-Robo는 언론사 사내 벤처로 시작한 미디어 벤처로, 국민일보에 로봇기자(스톡봇)을 서비스 했으며, 한국인터넷진흥원, 한국언론진흥재단, 한국방송통신전파진흥원 등에서 다수의 프로젝트를 진행했다. 이후 자체 A.I 뉴스 신문인 Money-Robo를 서비스 중이다. 대표 재직 중 아시아오픈 데이터 해커톤 우승, 데이터창업 분야 공로로 행정안전부 장관상을 2회 수상했으며, 인공지능 및 블록체인 분야에 대한 5개 특허 발명 및 등록자이다. 저서로는 “AI범죄와 자기방어”가 있으며, 핀테크분야, 통계학, 인공지능 분야에 대해서 한국기술교육대학교 온라인평생교육원 이러닝 콘텐츠 개발을 진행했다. 최종학위는 경제학 박사(동국대, 미시수리경제학)이다. 국민대학교, 호서대학교 등 여러 대학교에서 데이터 및 인공지능과 관련한 과목을 강의하고 있다. 자세한 프로필

강의

  • 안상선 (2025). 「비즈니스를 위한 데이터 과학」 강의안. 한국열린사이버대학교 인공지능융합학과.
  • 안상선 (2025). [K-디지털] 인공지능 자연어 처리. STEP(스마트직업훈련플랫폼), 한국기술교육대학교 온라인평생교육원.
  • 안상선 (2024). [K-디지털] 핀테크 데이터 분석 기초. STEP(스마트직업훈련플랫폼), 한국기술교육대학교 온라인평생교육원.

STEP 강의 바로가기: link.step.or.kr/1qyVoJ · link.step.or.kr/M9na9N · link.step.or.kr/brqEyc
사이트 개편으로 접속이 원활하지 않을 경우에는 www.step.or.kr로 접속 바랍니다.

논문과 발표

  • 안상선 (2025). 국민노후보장패널데이터를 활용한 가구지출 예측 모델 연구: 인공지능 모델 기반 접근. 「미래사회」, 16(2). 원문
  • 안상선 (2025). 국민노후보장패널데이터를 활용한 가구지출 예측 모델 연구: 인공지능 접근. 국민노후보장패널 학술대회 발표자료(2025.05.13), 국민연금공단 국민연금연구원. 발표자료
  • 안상선 (2025). SNS 텍스트 기반 마약 의심 거래 탐지 알고리즘에 대한 연구: 패턴 및 맥락 분석을 중심으로. 「미래사회」, 16(1). 원문
  • 안상선 (2024). 금융분야의 이상탐지 모델 보안을 위한 통계 기반의 적대적 데이터 대응 방안: 실증적 분석과 시뮬레이션 결과. 「미래사회」, 15(3). 원문
  • 안상선 (2024). 인공지능을 활용한 가상 캐릭터 특성 기반 SNS 포스팅 탐지 솔루션. 2024 Summer Newmedia Party 포스터 발표(2024.06.19), 서울미디어대학원대학교.
  • 안상선 (2024). 산업재해 패널 데이터를 활용한 머신러닝 모델. 제10회 산재보험패널 학술대회 포스터 발표(2024.05.17), 근로복지공단 근로복지연구원.
  • 안상선 (2024). 가상 자산 시계열 데이터의 분석과 예측: 시계열 모델 및 인공지능 모델의 비교, 개선점 제시. 「미래사회」, 15(1). 원문

E-2 학술 레퍼런스

  1. [R1] ITU-R Recommendation BT.601. Studio encoding parameters of digital television. — 섹션 2 (흑백 밝기 계수)
  2. [R2] LeCun, Y., Bottou, L., Bengio, Y., & Haffner, P. (1998). Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11), 2278–2324. — 섹션 4
  3. [R3] Fukushima, K. (1980). Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological Cybernetics, 36, 193–202. — 섹션 4
  4. [R4] Viola, P., & Jones, M. (2001). Rapid object detection using a boosted cascade of simple features. CVPR 2001. — 섹션 5
  5. [R5] Dalal, N., & Triggs, B. (2005). Histograms of oriented gradients for human detection. CVPR 2005. — 섹션 5
  6. [R6] Kazemi, V., & Sullivan, J. (2014). One millisecond face alignment with an ensemble of regression trees. CVPR 2014. — 섹션 1·5
  7. [R7] Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). ImageNet classification with deep convolutional neural networks. NeurIPS 2012. — 섹션 5
  8. [R8] Zeiler, M. D., & Fergus, R. (2014). Visualizing and understanding convolutional networks. ECCV 2014. — 섹션 6
  9. [R9] van der Walt, S., et al. (2014). scikit-image: image processing in Python. PeerJ, 2, e453. — 코드 1 (chelsea, astronaut 사진)

E-3 그림·데이터 참고 자료

  • 섹션 1의 이미지는 저자가 직접 만든 것이다. 실습용 고양이·사람 사진은 이 이미지에서 얼굴 부분을 잘라 56 × 56으로 줄이고, 선과 점은 지워서 썼다
  • 섹션 2의 치와와 사진은 4-4의 이미지에서 잘라 낸 것이다
  • 섹션 6의 층별 그림은 [R8]이 보인 경향을 단순하게 옮긴 개념 도식이다

교육자를 위한 TIP

강사, 실무 OJT 담당자, 튜터를 위한 운영 안내다. 시간은 예상치이므로 실제 수업에 맞춰 조정한다.

대상4-1을 마친 대학생·직장인. 이미지 AI가 "사진을 어떻게 받는지" 알고 싶은 실무자
선수 지식4-1의 특징·타겟과 가중합, 곱셈과 덧셈
학습 목표① 컬러 사진의 모양(H × W × 3)과 숫자 개수를 계산한다 ② 3 × 3 합성곱 한 칸을 손으로 계산한다 ③ 픽셀 거리와 사람이 정한 특징의 한계를 예로 설명한다
예상 시간읽기 40~50분 · 실습 시연 25분 · Colab 실습 25분 (코드 1 10분, 코드 2 실행 1분 + 해석 14분)

운영안 세 가지

강의형 50분

개념 중심

도입 5분(섹션 1) → 섹션 2 픽셀 돋보기 15분 → 섹션 3 밀기 실험 10분 → 섹션 4 합성곱 손계산 15분 → 확인 문제 5분.

실무 OJT 90분

업무 적용 중심

섹션 2로 우리 업무 사진(불량품, 서류 스캔 등)의 해상도와 숫자 개수 계산 20분 → 섹션 4 필터 실험실에서 우리 사진에 맞는 필터 찾기 25분 → 섹션 5 사람이 정한 특징의 한계 토론 15분 → 코드 2 실행·해석 30분.

1:1 튜터링

수준별 진도

입문자는 섹션 1·2·4만. 중급자는 섹션 4의 출력 크기 식을 패딩·스트라이드로 바꿔 계산하고, 코드 2의 CNN에서 GlobalMaxPooling을 Flatten으로 바꾸면 밀림에 대한 강함이 어떻게 변하는지 예측하게 한다.

섹션별 운영 포인트

섹션멈춰서 물어볼 질문조작 팁
1 문제"사람은 무엇을 보고 고양이라고 알까?"선과 점이 사람이 정한 단서임을 짚는다
2 픽셀"눈 칸의 숫자 세 개는 무엇일까?"픽셀 돋보기에서 해상도를 7 → 56으로 바꾼다
3 픽셀 거리"같은 치와와인데 왜 머핀보다 멀까?"밀기 슬라이더를 4칸 이상으로 옮긴다
4 합성곱"평평한 털 조각에 세로 경계 필터를 찍으면?"애니메이션을 "모두 더하기"에서 멈추고 손으로 맞춰 본다
5 사람이 정한 특징"경계가 많으면 고양이"는 늘 맞을까?쌍 비교의 경계 세기 보기와 코드 1 결과를 함께 본다
6 뒤쪽 층"눈을 찾는 필터는 몇 번째 층에 있을까?"층별 그림을 왼쪽부터 짚는다

흔한 오해 Top 5

오해바른 설명보여 줄 장면
사진은 그림 파일이라 숫자와 다르다컴퓨터에게 사진은 H × W × 3개의 0~255 숫자다섹션 2 픽셀 돋보기
픽셀이 비슷하면 같은 것이 찍혔다한 칸만 밀어도 거리가 크게 변한다. 픽셀 거리는 뜻을 모른다섹션 3 밀기 실험
합성곱은 복잡한 수학이다겹친 9쌍을 곱해 더하는 것뿐이다. 퍼셉트론의 가중합과 같다섹션 4의 숫자 예
필터는 사람이 설계한다실습의 필터는 예시다. CNN은 필터 숫자를 데이터로 배운다섹션 4 확인 문제 Q4
사람이 정한 특징은 쓸모없다설명이 쉽고 데이터가 적어도 된다. 다만 조건이 바뀌면 약하다섹션 5와 코드 1의 뒤집힌 결과

확인 문제 (해설은 눌러서 펼치기)

Q1. 컬러 56 × 56 사진의 숫자 개수는? 흑백이면?

컬러 56 × 56 × 3 = 9,408개, 흑백 56 × 56 = 3,136개.

Q2. 섹션 2의 치와와 눈 칸 (39, 37, 43)의 흑백 밝기는?

0.299×39 + 0.587×37 + 0.114×43 = 11.661 + 21.719 + 4.902 ≈ 38.3.

Q3. 조각 [92 129 174; 38 74 137; 55 119 176]에 세로 경계 필터 [−1 0 1]×3을 찍으면?

(174−92) + (137−38) + (176−55) = 82 + 99 + 121 = 302. 오른쪽이 밝은 강한 경계다.

Q4. 56 × 56 입력에 3 × 3 필터를 패딩 없이(스트라이드 1) 적용한 출력 크기는?

56 − 3 + 1 = 54, 즉 54 × 54. 패딩 1을 주면 56 × 56을 유지한다.

Q5. 코드 2에서 MLP는 2칸 민 숫자에 14.2%, CNN은 90.4%였다. 차이를 만든 두 가지는?

같은 필터를 모든 자리에 다시 쓰는 합성곱(위치가 바뀌어도 같은 무늬를 찾음)과, 위치를 버리고 가장 큰 반응만 남기는 전역 최대 풀링이다.

Colab 과제

기본

코드 1에서 내 얼굴 사진(또는 반려동물 사진)을 읽어 모양·숫자 개수를 출력하고, 1·2·4칸 밀었을 때의 픽셀 거리를 표로 만든다.

도전

코드 2의 CNN에서 GlobalMaxPooling2D를 Flatten으로 바꿔 다시 학습하고, 1·2칸 민 사진의 정확도 변화를 시드 3개로 보고한다. 섹션 4의 해석과 연결해 이유를 쓴다.

난이도 조절과 더 배우기

입문자섹션 3의 거리 표와 섹션 6은 건너뛰어도 된다. 섹션 2·4의 실습만 확실히 해 본다
심화Haar 특징과 HOG를 조사해, 섹션 4의 필터 실험실에서 비슷한 필터를 만들어 보게 한다. 조사한 논문은 원문으로 확인한다
더 배우기3-3 이미지와 CNN · 4-3 고양이 vs 강아지 (CNN 전체 구조)
강사용 자료확인 문제의 채점 기준과 과제 예시 답안은 교육자용 정답 페이지 (4-2)에서 볼 수 있다

수고하셨습니다!

「4-2 고양이 vs 사람」 편을 끝까지 읽었어요. 연구실 식구들이 한마디씩 정리해 드립니다.

연구실 식구 넷이 카메라 앞에서 기념사진을 찍는 픽셀 아트
박사
박사사진을 숫자로 열어 봤어요.
  • 컴퓨터가 받는 가장 작은 정보는 채널 값 하나
  • 픽셀 거리는 뜻을 모른다
  • 합성곱은 9쌍을 곱해 더하는 도장 찍기
조수
조수한 칸만 밀었는데 머핀보다 멀어졌어요!
초파리 연구원
초파리 연구원다음 편에서 필터를 쌓아 CNN을 만들어 보자.