본문 바로가기
전공/딥러닝

[DL] 합성곱 신경망(CNN), 합성곱과 풀링

by mhiiii 2024. 12. 12.
728x90

CNN

이미지 인식과 음성 인식 등 다양한 곳에 사용되는 신경맘

 

합성곱 신경망은 크게 합성곱(Convolution Layer)풀링층(Pooling Layer)으로 구성됨

 

 

 

Affine 계층은 완전히 연결된 계층을 의미

 

CNN에서는 합성곱 계층과 풀링 계층이 추가됨 

CNN의 계층은 '합성곱-ReLU-(Pooling)' 흐름으로 연결됨

 

출력에 가까운 층은 완전연결 신경망에서 사용한 'Affine-ReLU' 구성을 사용 가능

마지막 출력 계층에서는 'Affine-Softmax' 조합을 그대로 사용할 수 있음

 


합성곱 신경망의 대두

 

이미지 처리를 하기 위해서 다층 퍼셉트론을 사용할 수 있지만, 몇가지 픽셀만 값이 달라져도 민감하게 예측에 영향을 받음

 

하지만 이미지는 아래와 같이 같은 대상이라도 휘어지거나, 이동되었거나 등 다양한 변형이 존재함 

 

인간은 같은 'Y'로 인식

 

위 손글씨를 다층 퍼셉트론으로 분류한다고 하면,

이미지를 1차원 텐서인 벡터로 변환하고 다층 퍼셉트론의 입력층으로 사용해야 함

 

 

위와 같이 결과는 변환 전에 가지고 있던 공간적인 구조(spatial structure) 정보가 유실된 상태

 

결국 이미지의 공간적인 구조 정보를 보존하면서 학습할 수 있는 방법이 필요해졌고,

이를 위해 사용하는 것이 합성곱 신경망


 

이미지는 (높이, 너비, 채널)이라는 3차원 텐서

 

여기서 높이는 이미지의 세로 방향 픽셀 수, 너비는 이미지의 가로 방향 픽셀 수, 채널은 색 성분을 의미

 

 왼쪽: 흑백 이미지므로 채널 수가 1임을 고려하면 (28 × 28 × 1) 오른쪽: RGB

 


합성곱(convolution) 연산

합성곱층은 합성곱 연산을 통해서 이미지의 특징을 추출하는 역할

 

합성곱 연산은 ' '로 표현

 

1번째 연산

입력 ∗ 커널

 

(1×1) + (2×0) + (3×1) + (2×1) + (1×0) + (0×1) + (3×0) + (0×1) + (1×0) = 6

 

2번째 연산

 

(2×1) + (3×0) + (4×1) + (1×1) + (0×0) + (1×1) + (0×0) + (1×1) + (1×0) = 9

 

9번쨰 연산까지 다 하게 되면 아래와 같은 특성 맵이 나오게 됨 

최종 출력

최종 결과 값 = 특성 맵(feature map)

 

위의 예제에서는 커널의 크기가 3 × 3이었지만, 커널의 크기는 사용자가 정할 수 있음

 

또한 커널의 이동 범위가 위의 예제에서는 한 칸이었지만, 이 또한 사용자가 정할 수 있음

이러한 이동 범위를 스트라이드(stride)라고 함

 

strid = 2


 

3차원 데이터에서 합성곱 

 

 

3차원의 합성곱에서 중요한 것은

 

  • 입력 데이터의 채널 수 == 필터의 채널 수
  • 모든 채널의 필터는 같은 크기

여기서 출력 데이터는 한장의 특징 맵(채널이 1개인 특징 맵)

 

만약 합성곱의 출력으로 다수의 채널을 내보내고 싶으면 어떻게 할까?

필터를 다수개 사용하는 것이 답

 

FN개의 필터

 

이와 같이 합성곱 연산에는 필터의 수도 고려해야 함

따라서, 필터의 가중치 데이터는 4차원 데이터이며 ( 출력 채널 수 , 입력 채널 수, 높이, 너비)

 


합성곱과 인공 신경망의 차이점 

  • 합성곱 연산에서 사용되는 가중치 개수가 훨씬 적음

패딩

 

위의 예에서 5 × 5 이미지에 3 × 3의 커널로 합성곱 연산을 하였을 때,

스트라이드가 1일 경우에는 3 × 3의 특성 맵을 얻을 수 있었음

 

이와 같이 합성곱 연산의 결과로 얻은 특성 맵은 입력보다 크기가 작아진다는 특징

 

합성곱 연산 이후에도 특성 맵의 크기가 입력의 크기와 동일하게 유지되도록 하고 싶다면 패딩(padding)을 사용

 

 


특성 맵의 크기 계산 방법

 

입력 크기 (H, W)

필터 크기 (FH, FW)

출력 크기 (OH, OW)

패딩 P

스트라이드 S

 


합성곱 신경망의 배치 처리

CNN에서는 4차원 텐서(batch, channel, height, width)를 통해 다차원 텐서로 표현 

 

 

  • : 배치 크기 (처리할 데이터 개수)
  • : 채널 수 (예: RGB 이미지는 C=3)
  • : 이미지의 높이(height)
  • : 이미지의 너비(width)
  1. 개의 이미지를 한 배치로 묶어 4차원 텐서 (N, C, H, W)로 저장
  2. 필터(커널)도 크기의 텐서로 입력 데이터와 합성곱 계산 
  3. 개의 데이터를 동시에 처리하여 새로운 4차원 텐서 를 생성

 


풀링(Pooling)

 

일반적으로 합성곱 층(합성곱 연산 + 활성화 함수) 다음에는 풀링 층을 추가

 

풀링 층에서는 특성 맵을 다운샘플링하여 특성 맵의 크기를 줄이는 풀링 연산

 

Max Pooling

 

종류로는 최대 풀링, 평균 풀링 등이 있음 

 

풀링층의 특징

  • 학습할 매개변수 없음
  • 채널 수 고정
  • 입력의 변화에 영향을 적게 받음

 

References

https://wikidocs.net/64779

 

12-06 파이토치(PyTorch)의 nn.Embedding()

파이토치에서는 임베딩 벡터를 사용하는 방법이 크게 두 가지가 있습니다. 바로 임베딩 층(embedding layer)을 만들어 훈련 데이터로부터 처음부터 임베딩 벡터를 학습하는 …

wikidocs.net

밑바닥부터 시작하는 딥러닝 

728x90