Skip to content
PART 6 · 33장

컴퓨터 비전과 CNN

컴퓨터는 이미지를 어떻게 보는가?

숫자 행렬에서 고양이를 보다

사람은 고양이 사진을 0.1초에 인식합니다. 하지만 컴퓨터에게 이것은 숫자 수백만 개의 행렬입니다. 가로 224픽셀, 세로 224픽셀, 색상 3채널(RGB)이면 총 224 x 224 x 3 = 150,528개의 숫자입니다.

일반 신경망(완전 연결층)으로 이 모든 픽셀을 처리하면 파라미터가 수천만 개가 됩니다. 비효율적이고, 이미지의 공간 구조(인접 픽셀 간의 관계)를 전혀 활용하지 못합니다.

합성곱 신경망(CNN)은 작은 필터를 이미지 위에 슬라이드시켜 국소적 패턴을 추출하는 방식으로 이 문제를 해결합니다. 이 장에서는 픽셀, 필터, 풀링의 동작 원리를 직접 실험합니다.

이미지 = 숫자의 격자

디지털 이미지는 격자(grid) 형태의 숫자 배열입니다. 흑백 이미지에서 각 칸(픽셀)은 0(검정)~255(흰색) 사이의 밝기 값을 가집니다. 컬러 이미지는 빨강(R), 초록(G), 파랑(B) 세 채널을 겹친 것입니다.

비유: 모자이크 타일
이미지는 아주 작은 색 타일(픽셀)을 촘촘히 배열한 모자이크와 같습니다. 멀리서 보면 그림이지만, 확대하면 각각 숫자가 적힌 타일이 보입니다. CNN은 이 타일 패턴에서 의미 있는 특징(가장자리, 질감, 형태)을 자동으로 찾아냅니다.

실습 1: 픽셀 뷰어

8x8 이미지를 숫자 격자와 시각적 이미지로 번갈아 봅니다. 마우스를 올리면 해당 픽셀의 위치와 밝기 값을 확인할 수 있습니다. 프리셋을 선택하거나 "랜덤" 버튼으로 새 이미지를 생성하세요.

행 (row)
-
열 (col)
-
밝기 값
-
0 = 검정 (배경)
255 = 흰색 (밝은 부분)
중간값 = 회색 농도
관찰: "숫자 3" 프리셋에서 밝은 픽셀(높은 값)이 숫자의 획을 형성하고, 어두운 픽셀(낮은 값)이 배경입니다. CNN은 이러한 밝기 패턴의 공간적 배치를 학습하여 "이것은 3이다"라고 판단합니다.

합성곱: 필터로 특징을 뽑아낸다

합성곱(convolution)은 작은 행렬(커널/필터)을 이미지 위에서 한 칸씩 밀면서 대응하는 픽셀과 곱한 뒤 합산하는 연산입니다. 필터의 값에 따라 가장자리, 질감, 윤곽 등 다양한 특징이 추출됩니다.

쉽게 말하면 -- 돋보기로 이미지의 작은 부분씩 살펴보기: 이미지 전체를 한꺼번에 보는 대신, 작은 돋보기(3x3 필터)를 들고 왼쪽 위부터 오른쪽 아래까지 한 칸씩 이동하며 살펴봅니다. 이 돋보기는 보통 돋보기가 아니라 특정 패턴을 감지하는 탐지기입니다. 가로선 탐지기, 세로선 탐지기, 대각선 탐지기 등 다양한 필터가 있어서 각각이 이미지에서 자기가 맡은 패턴을 찾아냅니다. 가로선 필터를 적용하면 가로 경계가 밝게 나타나고, 세로선 필터를 적용하면 세로 경계가 밝게 나타납니다.
합성곱 연산:
output[i][j] = SUM(image[i+m][j+n] * kernel[m][n])
m, n은 커널의 행/열 인덱스. 커널이 3x3이면 9번 곱하고 더한다.
비유: 돋보기 이동
합성곱은 특수한 돋보기를 이미지 위에서 한 칸씩 옮기는 것과 같습니다. 이 돋보기는 특정 패턴(예: 세로선)에 반응하도록 설계되어 있어서, 그 패턴이 있는 곳에서 높은 값을, 없는 곳에서 낮은 값을 출력합니다.

실습 2: 합성곱 커널 탐색기

3x3 커널을 직접 설계하거나 프리셋을 선택한 뒤, 8x8 이미지에 합성곱을 적용합니다. 필터가 슬라이드하는 애니메이션을 관찰하고, 출력(특징 맵)이 어떻게 생기는지 확인하세요.

입력 이미지 (8x8)

3x3 커널

셀을 클릭하여 값 변경

출력 특징 맵 (6x6)

직접 해보기: (1) "가로 엣지" 프리셋을 적용하세요. 가로 방향의 경계가 강조됩니다. (2) "세로 엣지"로 바꾸세요. 세로 방향의 경계가 나타납니다. (3) "블러"를 적용하면 이미지가 흐려집니다. 인접 픽셀의 평균을 내기 때문입니다. (4) 커널 값을 직접 바꿔서 나만의 필터를 만들어보세요.

풀링: 핵심만 남기고 줄인다

합성곱으로 추출한 특징 맵은 여전히 크기가 큽니다. 풀링(pooling)은 특징 맵을 작은 영역으로 나누어 각 영역의 대표값(최댓값 또는 평균)만 남기는 연산입니다.

쉽게 말하면 -- 축소 복사: A4 문서를 A5 크기로 축소 복사하면 글자는 작아지지만 내용은 그대로입니다. 풀링도 마찬가지입니다. 중요한 것만 남기고 크기를 줄입니다. 최대 풀링 (Max Pooling): 2x2 영역에서 가장 큰 값만 취합니다. 크기는 절반으로 줄고, 가장 강한 특징만 살아남습니다. 평균 풀링 (Average Pooling): 2x2 영역의 평균을 취합니다. 부드러운 특징 요약에 적합합니다.

실습 3: 풀링 시각화

4x4 특징 맵에 2x2 풀링을 적용합니다. 최대 풀링과 평균 풀링의 결과를 비교하세요. "새 데이터" 버튼으로 다양한 값을 실험할 수 있습니다.

입력 (4x4)

최대 풀링 (2x2)

평균 풀링 (2x2)

입력 크기
4 x 4 = 16
출력 크기
2 x 2 = 4
압축률
75%
왜 풀링이 필요한가? (1) 연산량 감소: 특징 맵 크기가 줄어 다음 층의 계산이 빨라집니다. (2) 위치 불변성: 특징의 정확한 위치가 아니라 "존재 여부"에 집중합니다. 고양이 귀가 왼쪽에 있든 오른쪽에 있든, 최대 풀링이 그 특징을 보존합니다.

CNN의 전체 흐름

실제 CNN은 합성곱과 풀링을 여러 번 반복한 뒤, 마지막에 완전 연결층(Dense)으로 분류 결과를 출력합니다.

입력 이미지
  -> [Conv + ReLU] -> [Pooling]
  -> [Conv + ReLU] -> [Pooling]
  -> Flatten (1차원으로 펼침)
  -> [Dense + ReLU]
  -> [Dense + Softmax] -> 분류 결과
CNN 전체 구조는 "부분 -> 조합 -> 판단"입니다: 사람이 고양이를 인식하는 과정을 생각해보세요. 먼저 부분을 봅니다 -- 선, 곡선, 가장자리 같은 기초 특징. 다음으로 이 부분들을 조합합니다 -- "이 곡선과 저 선이 합쳐지면 귀 모양이다." 마지막으로 조합된 패턴으로 판단합니다 -- "귀 + 수염 + 동그란 눈 = 고양이." CNN의 층도 정확히 이 순서를 따릅니다. 첫 번째 합성곱층은 가장자리(edge)를 감지하고, 두 번째 층은 가장자리를 조합하여 질감(texture)과 모서리를 인식하며, 깊은 층으로 갈수록 눈, 코, 얼굴 같은 고수준 특징을 학습합니다.
CNN의 실제 응용:
의료 영상에서 종양 탐지, 자율주행 차량의 물체 인식, 제조 라인의 불량 검출, 농업의 작물 질병 진단 등 이미지가 관련된 거의 모든 분야에서 CNN이 활용됩니다.

실습 4: CNN 아키텍처 빌더

CNN의 층 구성을 직접 설계합니다. 합성곱층의 필터 수와 크기, 풀링 적용 여부를 선택하면 각 단계의 출력 크기와 파라미터 수가 자동으로 계산됩니다. 간단한 숫자 인식 시뮬레이션으로 성능을 확인할 수 있습니다.

유형출력 크기파라미터 수
총 파라미터
-
총 층 수
-
최종 출력
-
실험 과제: (1) 가장 작은 구조(Conv1: 2필터, Conv2: 없음, Dense: 16)로 시작하세요. 파라미터가 매우 적습니다. (2) Conv2를 추가하고 필터를 늘리세요. 파라미터가 급증하는 것을 관찰하세요. (3) 풀링을 제거하면 Dense 층에 전달되는 크기가 커져 파라미터가 폭증합니다. 풀링의 중요성을 체감하세요.
파라미터 수와 연산량: CNN의 장점은 파라미터 공유입니다. 하나의 3x3 필터는 9개의 파라미터로 이미지 전체를 스캔합니다. 완전 연결층이었다면 픽셀마다 별도의 가중치가 필요하여 파라미터가 수백 배 많아집니다.
이 장의 핵심
  • 디지털 이미지는 픽셀 값(숫자)의 2D 격자이다.
  • 합성곱(convolution)은 작은 필터를 슬라이드시켜 국소적 특징을 추출하는 연산이다.
  • 필터 값에 따라 가장자리, 블러, 선명화 등 다양한 특징이 추출된다.
  • 풀링은 특징 맵을 축소하여 연산량을 줄이고 위치 불변성을 부여한다.
  • CNN은 [Conv -> Pool]을 반복하여 계층적으로 특징을 학습한다.
  • 파라미터 공유 덕분에 CNN은 완전 연결 신경망보다 훨씬 효율적이다.

다음 장 예고: 이미지 다음은 텍스트입니다. 기계가 언어를 처리하려면 단어를 숫자로 바꾸고, 순서 정보를 유지해야 합니다. 다음 장에서는 자연어처리와 순환신경망(RNN)을 배웁니다.