컴퓨터 비전과 CNN
컴퓨터는 이미지를 어떻게 보는가?
숫자 행렬에서 고양이를 보다
사람은 고양이 사진을 0.1초에 인식합니다. 하지만 컴퓨터에게 이것은 숫자 수백만 개의 행렬입니다. 가로 224픽셀, 세로 224픽셀, 색상 3채널(RGB)이면 총 224 x 224 x 3 = 150,528개의 숫자입니다.
일반 신경망(완전 연결층)으로 이 모든 픽셀을 처리하면 파라미터가 수천만 개가 됩니다. 비효율적이고, 이미지의 공간 구조(인접 픽셀 간의 관계)를 전혀 활용하지 못합니다.
합성곱 신경망(CNN)은 작은 필터를 이미지 위에 슬라이드시켜 국소적 패턴을 추출하는 방식으로 이 문제를 해결합니다. 이 장에서는 픽셀, 필터, 풀링의 동작 원리를 직접 실험합니다.
이미지 = 숫자의 격자
디지털 이미지는 격자(grid) 형태의 숫자 배열입니다. 흑백 이미지에서 각 칸(픽셀)은 0(검정)~255(흰색) 사이의 밝기 값을 가집니다. 컬러 이미지는 빨강(R), 초록(G), 파랑(B) 세 채널을 겹친 것입니다.
이미지는 아주 작은 색 타일(픽셀)을 촘촘히 배열한 모자이크와 같습니다. 멀리서 보면 그림이지만, 확대하면 각각 숫자가 적힌 타일이 보입니다. CNN은 이 타일 패턴에서 의미 있는 특징(가장자리, 질감, 형태)을 자동으로 찾아냅니다.
실습 1: 픽셀 뷰어
8x8 이미지를 숫자 격자와 시각적 이미지로 번갈아 봅니다. 마우스를 올리면 해당 픽셀의 위치와 밝기 값을 확인할 수 있습니다. 프리셋을 선택하거나 "랜덤" 버튼으로 새 이미지를 생성하세요.
255 = 흰색 (밝은 부분)
중간값 = 회색 농도
합성곱: 필터로 특징을 뽑아낸다
합성곱(convolution)은 작은 행렬(커널/필터)을 이미지 위에서 한 칸씩 밀면서 대응하는 픽셀과 곱한 뒤 합산하는 연산입니다. 필터의 값에 따라 가장자리, 질감, 윤곽 등 다양한 특징이 추출됩니다.
output[i][j] = SUM(image[i+m][j+n] * kernel[m][n])
m, n은 커널의 행/열 인덱스. 커널이 3x3이면 9번 곱하고 더한다.
합성곱은 특수한 돋보기를 이미지 위에서 한 칸씩 옮기는 것과 같습니다. 이 돋보기는 특정 패턴(예: 세로선)에 반응하도록 설계되어 있어서, 그 패턴이 있는 곳에서 높은 값을, 없는 곳에서 낮은 값을 출력합니다.
실습 2: 합성곱 커널 탐색기
3x3 커널을 직접 설계하거나 프리셋을 선택한 뒤, 8x8 이미지에 합성곱을 적용합니다. 필터가 슬라이드하는 애니메이션을 관찰하고, 출력(특징 맵)이 어떻게 생기는지 확인하세요.
입력 이미지 (8x8)
3x3 커널
셀을 클릭하여 값 변경
출력 특징 맵 (6x6)
풀링: 핵심만 남기고 줄인다
합성곱으로 추출한 특징 맵은 여전히 크기가 큽니다. 풀링(pooling)은 특징 맵을 작은 영역으로 나누어 각 영역의 대표값(최댓값 또는 평균)만 남기는 연산입니다.
실습 3: 풀링 시각화
4x4 특징 맵에 2x2 풀링을 적용합니다. 최대 풀링과 평균 풀링의 결과를 비교하세요. "새 데이터" 버튼으로 다양한 값을 실험할 수 있습니다.
입력 (4x4)
최대 풀링 (2x2)
평균 풀링 (2x2)
CNN의 전체 흐름
실제 CNN은 합성곱과 풀링을 여러 번 반복한 뒤, 마지막에 완전 연결층(Dense)으로 분류 결과를 출력합니다.
-> [Conv + ReLU] -> [Pooling]
-> [Conv + ReLU] -> [Pooling]
-> Flatten (1차원으로 펼침)
-> [Dense + ReLU]
-> [Dense + Softmax] -> 분류 결과
의료 영상에서 종양 탐지, 자율주행 차량의 물체 인식, 제조 라인의 불량 검출, 농업의 작물 질병 진단 등 이미지가 관련된 거의 모든 분야에서 CNN이 활용됩니다.
실습 4: CNN 아키텍처 빌더
CNN의 층 구성을 직접 설계합니다. 합성곱층의 필터 수와 크기, 풀링 적용 여부를 선택하면 각 단계의 출력 크기와 파라미터 수가 자동으로 계산됩니다. 간단한 숫자 인식 시뮬레이션으로 성능을 확인할 수 있습니다.
| 층 | 유형 | 출력 크기 | 파라미터 수 |
|---|
- 디지털 이미지는 픽셀 값(숫자)의 2D 격자이다.
- 합성곱(convolution)은 작은 필터를 슬라이드시켜 국소적 특징을 추출하는 연산이다.
- 필터 값에 따라 가장자리, 블러, 선명화 등 다양한 특징이 추출된다.
- 풀링은 특징 맵을 축소하여 연산량을 줄이고 위치 불변성을 부여한다.
- CNN은 [Conv -> Pool]을 반복하여 계층적으로 특징을 학습한다.
- 파라미터 공유 덕분에 CNN은 완전 연결 신경망보다 훨씬 효율적이다.
다음 장 예고: 이미지 다음은 텍스트입니다. 기계가 언어를 처리하려면 단어를 숫자로 바꾸고, 순서 정보를 유지해야 합니다. 다음 장에서는 자연어처리와 순환신경망(RNN)을 배웁니다.