2025 학부 인턴/CV

CNN의 구조

dbwls-log 2025. 12. 15. 14:22

CNN의 핵심 및 구조 

CNN의 핵심 아이디어 

CNN의 핵심 아이디어는 최적의 필터를 학습으로 알아내는 것이다. 

일반적으로 비전 영역에서 필터는 사용자가 목적에 맞는 특정 필터를 스스로 만들거나 기존에 설계된 다양한 필터를 선택하여 이미지에 적용하는 방식으로 사용되었다. 

 

하지만 딥러닝 CNN은 필터 값을 사용자가 만들거나 선택할 필요가 없다. 딥러닝 네트워크 구성을 통해 이미지 분류 등의 목적에 부합하는 최적의 필터 값을 학습을 통해 스스로 최적화 한다. 

 

CNN의 구조 

CNN은 분류에 맞는 최적의 특징을 추출한다. 최적의 특징 추출을 위한 취적의 가중치를 계산하는 것이다. 

 

Feature Extractor 

이미지의 특징을 추출하는 부분이다. 

해당 부분은 Convolution Layer와 Pooling Layer를 여러 겹으로 쌓는 형태로 구성되어있다. 

 

Convolution Layer 

입력 데이터에 필터를 적용한 후 활성화 함수를 적용한다. 

필터(커널)은 특징을 찾아내기 위한 공용 파라미터를 의미한다. 

 

Pooling Layer 

Convolution Layer에서 얻어진 출력값에서 특징을 뽑아내는 과정이다. 

각 특징맵의 사이즈를 줄이면서 특징을 뽑아낸다. 

 

 

CNN의 각 Layer는 처음에는 구체적인 정보를, 뒤로 갈수록 넓은 범위의 정보를 가지는 정보를 가진다. 

 

 

Convolution 

단일 채널 Convolution 

 

컨볼루션을 하는 방법은 이미지 위를 필터가 지나가면서 특징맵의 값과 필터의 값을 곱한 후 다 더해주면 된다. 

이 때 가중치 공유라는 개념이 나오는데, 가중치 공유란 입력 특징맵의 모든 화소가 같은 필터를 사용하기 때문에 가중치를 공유한다고 하는 것이다. 

 

다중 채널 Convolution 

단일 채널이 아닌 다중 채널일 때도 동일하게 해주면 된다. 

각 채널에 맞는 커널을 가지고 와서 가중합 연산 해준 특징맵을 하나로 합쳐주면 된다. 

 

따라서 입력 이미지의 채널 수와 필터의 채널 수는 항상 동일해야한다는 특징이 있다. 

 

 

Stride 

Stride란 입력 특징맵에 필터를 적용할 때 슬라이딩 윈도우가 이동시키는 간격을 의미한다. 즉, 필터를 적용하는 간격을 의미하는 것이다. 

기본적으로 stride=1이라서 필터가 이동할 때 한 픽셀 씩 이동하며 Conv를 수행한다. 

stride가 증가하면 출력 크기가 작아지며 연산량도 감소한다. 

하지만 그 값을 너무 크게 잡으면 중요한 특징을 놓칠 수 있다는 단점도 있다. 

 

 

Padding 

패딩은 원본 입력 이미지의 크기를 조정하거나 특징을 보존하기 위하여 입력 데이터 주변에 값을 채워넣는 작업이다. 

CNN 네트워크가 깊어질수록, 즉 Conv가 많이 수행될수록 출력 특징맵이 입력 특징맵 대비 크기가 계속해서 줄어드는 현상이 있는데, 이를 방지할 수 있다. 

0을 넣는 Zero-padding의 경우 모서리 주변에 0값이 입력되어 노이즈가 약간 증가할 수 있지만 큰 영향은 없다. 

 

 

출력 특징맵 크기 구하기 

 

해당 공식을 사용하면 특징맵의 크기를 미리 알 수 있다. 

입력 사이즈와 출력 사이즈가 동일해야하는 경우 Padding, Stride를 해당 공식을 통해 의도적으로 설정할 수 있는 것이다. 

 

 

필터 vs 커널 

CNN에서 Filter와 Kernel은 거의 혼용되어서 사용된다. 

 

굳이 구분을 하자면 필터는 여러개의 커널로 구성되어 있으며, 개별 커널은 한 필터 내에서 다 다른 값을 가질 수 있다.

 

커널의 크기가 크면 클수록 입력 특징맵에서 더 큰 또는 더 많은 특징 정보를 가져올 수 있다. 

하지만 큰 사이즈의 커널을 사용한다는 것은 더 많은 연산량과 파라미터를 의미하기 때문에 적절한 크기로 사용해야 한다. 

 

 

다채널 Conv 

앞서 언급했듯 입력 특징맵의 채널수와 필터의 채널 개수는 항상 동일해야한다. 

출력 특징맵의 채널 수를 결정하는 것은 필터의 채널 수가 아니라 필터 자체의 개수이다. 

 

 

Pooling 

Pooling이란 일정 크기의 블록을 통합하여 하나의 대표값으로 대체하는 연산을 의미한다. 

Conv가 적용된 특징맵의 일정 영역별로 하나의 값을 추출하여 특징맵의 사이즈를 줄인다. 

 

일반적으로 Pooling의 크기와 Stride를 동일하게 부여하여 모든 값이 한번만 처리될 수 있도록 한다. 

일정 영역에서 최대값 또는 평균값을 추출하므로 위치의 변화에 따른 특징값의 변화를 일정 수준 중화시킬 수 있다. 

 

보통은 Conv > ReLU 적용 후 Activation Map에 Pooling을 적용한다. 

 

Max Pooling : 최대 풀링 

지정된 블록 내의 원소들 중에서 최대값을 대표값으로 선택한다. 

 

Average Pooling : 평균 풀링 

지정된 블록 내의 원소들의 평균값을 대표값으로 사용한다. 

 

 

Pooling의 특징 

Pooling은 비슷한 특징들이 서로 다른 이미지에서 위치가 달라지면서 다르게 해석되는 현상을 중화시킨다. 

특징맵의 크기를 줄이므로 계산 연산 성능이 향상된다. 

 

Max Pooling의 경우 엣지와 같은 Sharp 한 특징을 추출하고, Avg Pooling은 Smooth한 특징을 추출한다. 

일반적으로는 Max Pooling이 더 많이 사용된다.

 

빌딩 블록을 쌓아 만드는 컨볼루션 신경망 

빌딩 블록 쌓기 

보통 컨볼루션층과 풀링층을 번갈아가며 쌓는다. 

신경망 앞 부분은 특징 추출, 뒷부분은 분류 담당이다. 

 

Convolution Layer : C 층 

컨볼루션 신경망은 특징 추출에 쓸 마스크를 학습이 자동으로 알아낸다. 

컨볼루션 층에서는 국소 영역에서의 특정 특징을 얻는다. 

따라서 영상의 특성에 따라 에지, 코너, 텍스처 등을 추출하는 마스크가 생성된다. 

 

가중치가 컨볼루션의 마스크 역할을한다. 

기존의 컨볼루션 알고리즘이 고정된 마스크를 이용한 반면 CNN에서는 컨볼루션 마스크가 신경망 가중치로 구성되기 때문에 데이터로부터 자동으로 학습된다. 

 

가중치 공유 

특징맵의 노드들은 연결된 하위 계층 특징맵 중 특정한 위치의 윈도우 내 노드들과 연결이 되어있다. 

동일한 특징맵의 노드들은 동일한 가중치를 공유하여 Conv와 동일한 효과를 낸다. 

 

필터들은 적용되는 위치가 달라도 같은 가중치 값을 공유하며, 픽셀값의 통계적 특성이 이미지 상의 좌표와 무관하다는 이미지의 특성을 반영한 것이다. 

 

각각의 특징맵이 각자 가중치를 가지므로 자신의 고유한 특징을 추출하는 효과가 있다. 

 

 

Pooling Layer : S층 (Downsampling) 

Pooling Layer에서는 차원을 줄이면서도, 변화 불변한 특징을 얻는다. 

입력 특징맵을 그보다 작은 크기의 특징맵으로 매핑시킨다. 

 

표현 차원을 줄이고 이미지 왜곡이나 작은 변환에 영향을 받지 않게 한다. 

 

상위 레이어로 올라갈수록 같은 크기의 컨볼루션 필터가 하위 레이어의 저차원 특징을 조합한 고차원 특징을 학습하는 효과를 가지고온다. 

 

 

Feedforward Layer == Dense Layer 

FC Layer라고 부르기도 한다. 

분류를 위한 일반 신경망이다. 

 

 

유연한 구조 

문제에 따라 C, S, Dense Layer를 다양한 모양으로 조립할 수 있다. 

'2025 학부 인턴 > CV' 카테고리의 다른 글

개선된 딥러닝 학습 알고리즘  (1) 2025.12.15
CNN 학습  (0) 2025.12.15
CNN 등장 배경  (0) 2025.12.15
옵티마이저 : Optimizer  (0) 2025.12.15
손실 함수 : Loss Function  (0) 2025.12.14