본문 바로가기
  • 비둘기다
  • 비둘기다
  • 비둘기다
AI/pytorch

[파이토치] 합성곱 신경망 (1)

by parzival56 2023. 2. 9.

이전에 언급한 여러 가지 신경망의 종류 중 합성곱 신경망입니다.

 

합성곱층의 필요성

 

합성곱층을 사용하는 이유는 합성곱 신경망을 사용하는 이유와 같이 이미지와 영상 처리에 유용하기 때문입니다. 먼저 간략하게 이미지를 분석하는 방법을 예시로 알아보자면 일단 네모난 이미지를 3x3 배열로 나타낼 때 이후에 이걸 일자로 펼쳐서 가중치를 도입한 후 은닉층에 전달하게 됩니다. 

그러나 위처럼 이미지를 펼쳐서 분석하게 되면 데이터의 공간적 구조를 무시하게 되는데, 이를 방지하기 위해 도입된 것이 합성곱층입니다.

 

 합성곱 신경망의 구조

 

합성곱 신경망은 기존의 여타 신경망과는 다르게 많은 층으로 구성됩니다.

나열하자면 입력층 / 합성곱층 / 풀링층 / 완전연결층 / 출력층으로 구성됩니다.

 

합성곱 신경망의 전체적인 흐름을 보면 먼저 입력층으로 우리가 보고자 하는 이미지나 영상, 음성 데이터가 들어오면 합성곱층과 풀링층을 거치면서 입력 이미지의 주요 특성 벡터를 추출합니다. 그 후 추출된 주요 특성 벡터들은 완전연결층을 거치면서 1차원 벡터로 변환되고, 마지막으로 출력층에서 소프트맥스 함수를 이용하여 최종 결과가 출력됩니다. 

 

▷입력층

 

입력층은 입력 데이터가 최초로 거치는 층입니다. 이미지는 단순한 1차원 데이터가 아닌 높이, 너비, 채널의 값을 갖는 3차원 데이터입니다. 이때 채널은 이미지가 그레이스케일이면 1 값을 가지고, 컬러면 3 값을 갖습니다. 

예를 들어 어떤 이미지가 높이 4, 너비 4의 정사각형 모양이고 채널은 RGB를 가지고 있으면 이미지의 형태는 (4, 4, 3)으로 표현할 수 있습니다.

 

▷합성곱층

 

합성곱층은 입력 데이터에서 특성을 추출하는 역할을 합니다.

특성을 추출하는 방법은 입력 이미지가 들어왔을 때 이미지에 대한 특성을 감지하기 위해 커널이나 필터를 사용합니다. 커널이나 필터는 이미지의 모든 영역을 훑으면서 특성을 추출하게 되는데, 이렇게 추출된 결과물이 특성 맵입니다.

 

이때 보통 커널은 3x3, 5x5 크기로 적용되는 것이 일반적이며, 스트라이드라는 지정된 간격에 따라 순차적으로 이동합니다.

위 그림이 합성곱층에서 일어나는 과정입니다. 여기서 입력 데이터의 크기는 경우에 따라 달라질 수 있고,  커널/필터의 크기는 5x5가 될 수도 있습니다. 위의 사진으로 예를 들면 필터가 3x3이기 때문에 입력 데이터에 3x3 만큼의 영역을 잡습니다. 첫 영역은 반드시 왼쪽 위부터 시작합니다. 위치를 잡으면 입력 데이터의 영역과 필터에서 각 칸에 대응하는 숫자끼리 곱해줍니다. 그리고 이들을 모두 더하면 출력의 첫 칸에 들어갈 숫자가 됩니다. 같은 방식으로 먼저 오른쪽으로 쭉 가고, 끝에 다다르면 한 칸 밑으로 내려가 다시 왼쪽부터 시작합니다. 

위에서도 그렇듯 한 칸씩 움직인 이유는 스트라이드를 1로 지정했기 때문입니다.

 

그런데 위의 사진처럼 입력 데이터의 채널 수가 1개인 이유는 그레이스케일이기 때문입니다. 컬러는 반면에 채널수가 3이기 때문에 쉽게 말해 3개의 판을 가지는데 이들을 모두 연산하기 위해 필터도 서로 다른 값으로 3개가 필요하지만 실제로는 3개의 필터가 아닌 채널이 3인 필터가 적용되는 것입니다.

그렇다면 필터 자체가 2개 이상일 때에는 어떤 방식으로 이루어질까요?

결과는 바로 적용되는 필터의 개수가 특성 맵의 채널 수가 된다는 것입니다. 컬러 이미지로 예를 들어보겠습니다.

 

합성곱층을 요약하면 다음과 같습니다.

 

입력 데이터 : W1 x H1 x D1 (순서대로 가로, 세로, 채널)

 

<하이퍼 파라미터>

필터 개수 : K

필터 크기 : F

스트라이드 : S

패딩 : P

 

(패딩이란, 예를 들어, 기존의 입력 데이터의 크기와 동일한 크기의 출력을 만들고 싶을 때 커널을 거치면 어쨋든 크기가 줄어들기 때문에 이를 위해 빈 공간이라더라도 입력 데이터의 사이즈를 일부러 늘리는 것을 의미합니다. 입력이 4x4라고 할 때 이를 겉에 빈 데이터를 두 겹 둘러싸 6x6으로 만들면 출력은 원하는 대로 4x4가 될 것입니다.)

 

<출력 데이터>

· W2 = (W1 - F + 2P) / S + 1

· H2 = (H1 - F + 2P) / S + 1

· D2 = K

 

 

▷풀링층

 

풀링층은 특성 맵의 차원을 다운 샘플링하여 연산량을 감소시키고, 주요한 특성 벡터를 추출하여 학습을 효과적으로 할 수 있게 합니다. 다운 샘플링이란 이미지를 축소시키는 것을 의미합니다. 

 

풀링 연산에는 두 가지가 사용되는데 최대 풀링과 평균 풀링이 있습니다.

최대 풀링은 최댓값을 추출하는 것이고 평균 풀링은 평균을 반환하는 것입니다.

 

위 사진이 최대 풀링을 하는 과정입니다. 두 칸 씩 이동하기 때문에 스트라이드는 2인 것을 알 수 있습니다.

간단하게 평균 풀링도 계산해보시면 알겠지만 도출되는 값이 살짝 다르다는 것을 알 수 있습니다. 

여기서 얻을 수 있는 결과는 두 가지 과정 모두 계산 과정은 다르지만 사용하는 파라미터는 동일하다는 것입니다.

 

마찬가지로 정라하자면 다음과 같습니다.

 

입력 데이터 : W1 x H1 x D1 (순서대로 가로, 세로, 채널)

 

<하이퍼 파라미터>

필터 크기 : F

스트라이드 : S

 

<출력 데이터>

· W2 = (W1 - F) / S + 1

· H2 = (H1 - F) / S + 1

· D2 = D1

 

▷완전연결층, 출력층

 

완전연결층은 합성곱층과 풀링층을 통해 축소된 특성 맵을 3차원에서 1차원으로 펼치게 됩니다. 

그다음 마지막, 출력층에서는 소프트맥스 함수를 이용하여 확률 값으로 출력하고 가장 높은 값을 가지는 레이블이 최종 값으로 선택됩니다. 

 

 


이상으로 합성곱 신경망을 사용하는 이유와 구성에 대해 알아봤습니다.

'AI > pytorch' 카테고리의 다른 글

[파이토치] 딥러닝 시작  (0) 2023.02.08

댓글