
CNN(Convolutional Neural Network)은 입력 영상이나 신호에 대해 합성곱(convolution) 연산을 수행하는 신경망 구조
기존의 linear 계층 대신(또는 추가로) convolution layer과 pooling layer을 사용하여 지역적 특징을 추출하고 파라미터 수 절감
① 완전 연결 신경망(FC Network)
각 계층의 모든 뉴런이 이전 계층의 모든 뉴런과 연결되는 구조
입력 영상을 1차원 벡터로 펼쳐(flatten) 처리하기 때문에 공간적·채널 정보 활용이 어려움
픽셀 간 멀리 떨어진 관계까지 모두 모델링하나 실제 유의미한 상관관계는 적어 비효율적
파라미터 수가 급격히 증가하여 메모리·연산 비용이 과도해지고, 오버피팅 위험이 높아짐
② CNN
지역 수용 영역(local receptive field)을 통해 이웃 픽셀 간의 공간 정보를 보존하며 특징 추출
필터(커널) 파라미터를 공유(weight sharing)하여 모델 복잡도를 크게 줄임
pooling layer로 특징 맵(feature map)의 크기를 축소해 연산량을 줄이고, 불변성(invariance) 확보
결과적으로 FC 네트워크보다 효율적이고 강력한 이미지 특징 학습 可
합성곱 연산은 입력 영상 와 필터(커널) 의 원소별 MAC(Multiply-Accumulate) 연산을 통해 출력 영상 를 계산
수식:
여기서 필터 크기가 일 때 각 위치 에서 주변 픽셀 가중합을 수행
입력 크기 , 필터 크기 , 패딩 , 스트라이드 를 적용하면 출력 크기는 다음과 같이 계산됨:
① 패딩(Padding)
입력 가장자리 픽셀에도 필터를 적용하기 위해 등을 추가
로 설정하면 출력 크기 유지 가능
② 스트라이드(Stride)
필터를 이동시키는 보폭
면 두 칸씩 건너뛴 위치에서 연산
스트라이드 증가 → 출력 크기·연산량 감소
③ 편향(Bias)
합성곱 결과에 더해지는 스칼라
각 특성 맵마다 학습 가능한 오프셋 제공
Spatial Filtering은 입력 영상의 국소 영역에 마스크를 적용하여 원하는 특징(에지, 블러 등)을 추출하는 기법
출력 이미지는 입력 신호와 필터 마스크 간의 correlation 또는 weighted sum을 통해 생성
컬러 영상 입력은 형태의 3차원 텐서로 표현되고, 배치 처리는 형태로 다룸
각 필터는 크기의 4차원 텐서로 구현
합성곱 연산 시, 입력 채널 별로 커널과 MAC 연산을 수행한 뒤 채널 축을 따라 합산하여 하나의 출력 채널(feature map)을 생성
여러 개의 필터 세트를 사용해 다수의 출력 채널을 얻으면, 최종 출력은 크기의 feature map 묶음이 됨
개별 feature map 하나의 크기 변화는 이전 장의 출력 크기 공식과 동일하게 계산:
채널 축 관점에서 보면,
입력 → 출력
(은 사용된 필터 세트의 개수(출력 채널 수))
Feature map은 CNN 내부에서 합성곱 및 풀링 등 계층별 입·출력을 통칭하는 용어
① Max Pooling
일정 크기 윈도우 내 최댓값을 추출
가장 두드러진 특징을 강조
② Average Pooling
같은 윈도우 내 픽셀 값의 평균을 계산
부드러운 요약, 노이즈 저감
③ Pooling Layer의 역할
특성 맵 크기 축소 → 연산량·모델 복잡도 감소
국소적 특징 요약 → 불변성(invariance) 확보
수용 영역(receptive field) 확대 → 더 넓은 문맥 학습 가능
① 정의
특정 계층의 한 픽셀이 입력 영상에서 영향받는 영역 크기
② 증가 요인
풀링 계층 사용 빈도 ↑ 또는 스트라이드 (>1) 계층 ↑ → 수용 영역 확대
③ 의미
수용 영역이 클수록 더 글로벌한 특징 분석 가능
① 학습 파라미터 존재 여부
Linear 계층, Conv2d 계층 등 ② Conv2d 레이어의 파라미터 수
ⓢ 곱셈 연산 수 (MAC 관점)
② 덧셈 연산
곱셈 결과를 누적(accumulate)하므로 덧셈 수도 유사하게 계산
③ 참고
GPU 구조는 Fused Multiply–Add(FMA) 연산을 효율적으로 처리하도록 설계됨
in_channels: 입력 채널 수 (예: 흑백 영상은 , 컬러 영상은 )
out_channels: 출력 채널(필터) 수 (feature map 개수)
kernel_size: 필터 크기. 정수 하나면 , 튜플이면
stride: 필터 이동 간격. 기본값
padding: 입력 테두리에 추가하는 ‘제로 패딩’ 크기. 기본값
dilation: 필터 요소 간격(확장). 기본값
groups: 채널 분할 수. 기본값 (채널별 완전 연결)
bias: 편향 사용 여부. 기본값 True
① FC 모델
class My_Model(nn.Module):
def __init__(self):
super().__init__()
self.layer = nn.Sequential(
nn.Linear(784, 50),
nn.ReLU(),
nn.Linear(50, 10)
)
def forward(self, x):
x = x.view(bs, -1) # [bs, 1, 28, 28] → [bs, 784]
return self.layer(x) # [bs, 10]
② CNN 모델: 학습 데이터 정확도 거의 100% 수렴, 시험 데이터 정확도 95% 이상
class My_Model(nn.Module):
def __init__(self):
super().__init__()
self.conv_layer = nn.Sequential(
nn.Conv2d(1, 16, 5), # [bs, 1, 28, 28] → [bs, 16, 24, 24]
nn.ReLU(),
nn.MaxPool2d(2, 2), # → [bs, 16, 12, 12]
nn.Conv2d(16, 32, 5), # → [bs, 32, 8, 8]
nn.ReLU(),
nn.MaxPool2d(2, 2) # → [bs, 32, 4, 4]
)
self.fc_layer = nn.Linear(32*4*4, 10) # [bs, 512] → [bs, 10]
def forward(self, x):
x = self.conv_layer(x)
x = x.view(bs, -1) # → [bs, 512]
return self.fc_layer(x)
첫 번째 합성곱 계층의 가중치(필터)들은 보통 크기로 구성됨
흑백 입력에서는 단일 채널 필터 세트에 각기 다른 30 개의 필터를 적용할 수 있음
시각화 시에는 필터 계수 값을 스케일링하여 그레이스케일 이미지 형태로 표시
초반부 레이어에서는 주로 에지(edge)나 간단한 패턴 같은 로컬 정보가 검출됨
중·심층부로 갈수록 점차 복잡하고 글로벌한 형태(텍스처, 형태 등)를 학습함
Zeiler & Fergus(2014)의 연구는 각 레이어별 활성화 deconvolutional visualization을 통해 이 변화를 명확히 보여줌
<참고 자료>
유성욱 교수님, 지능형 영상처리, 중앙대학교 전자전기공학부, 2024