[AIB 18기] Section 3 - Sprint 3 - Note1 - 합성곱 신경망(Convolutional Neural Network)과 전이 학습(Transfer Learning)

ysk1230·2023년 5월 2일
0
post-custom-banner

1. CNN(Convolutional Neural Network, 합성곱 신경망)과 CNN의 구조

  • 특징이 추출되는 부분인 합성곱 층(Convolution Layer)와 풀링 층(Pooling Layer)

1). 합성곱

합성곱 층에서는 합성곱 필터가 슬라이딩하며 이미지 부분부분의 특징을 읽어 나갑니다.

위 이미지에서 볼 수 있듯 필터가 왼쪽 위부터 차례로 슬라이딩하며 합성곱을 진행해나갑니다.

한번에 여러개가 보이니, 보기 어려울 수 있으니 정지된 상황에서의 예시를 한번 보겠습니다.

같은 방식으로 9번의 연산이 이뤄지면서, 9칸이 모두 채워지는 것을 위 Gif를 통해서 확인하실 수 있습니다.

아래 그림은 각 패치(Patch)단위로 어떠한 방식으로 합성곱이 연산되는 지를 보여주고 있습니다.

여기까지 이해하시면, 가장 기본적인 Convolution에 대해서 이해하신 것입니다. 그림으로 이해하더라도, 실제 코드로 한번 실습해보시는 것는 추천드립니다

2). 패딩

다음으로는 Convolution에 적용할 수 있는 패딩(Padding)과 스트라이드(Stride)에 대해서 알아보도록 하겠습니다.

패딩(Padding)은 이미지 외부를 특정한 값으로 둘러싸서 처리해주는 방식입니다.
아래 그림처럼 '0'으로 둘러싸주는 제로-패딩(Zero-Padding)이 가장 많이 사용됩니다.

3). 스트라이드(Stride)

스트라이드(Stride)는 '보폭'이라는 뜻을 가진 단어입니다.

Stride 를 조절하면 슬라이딩(Sliding)시에 몇 칸 씩 건너뛸지를 나타냅니다.

위에서 살펴본 것처럼 필터가 한 칸씩 슬라이딩하려면 Stride=1 로 해주어야 하며

두 칸씩 슬라이딩하려면 Stride=2 로 설정해주어야 합니다.

두 가지 경우에 대해 아래 그림을 보며 알아보도록 하겠습니다.

  • Stride = 1
  • Stride = 2
  • 필터 크기(Filter size), 패딩(Padding), 스트라이드(Stride)에 따른 Feature map 크기 변화
Nout=[Nin+2pks]+1N_{\text{out}} = \bigg[\frac{N_{\text{in}} + 2p - k}{s}\bigg] + 1

NinN_{\text{in}} : 입력되는 이미지의 크기(=피처 수)

NoutN_{\text{out}} : 출력되는 이미지의 크기(=피처 수)

kk : 합성곱에 사용되는 커널(=필터)의 크기

pp : 합성곱에 적용한 패딩 값

ss : 합성곱에 적용한 스트라이드 값

4). 폴링(Pooling)

가로, 세로 방향의 공간을 줄이기 위한 풀링(Pooling)을 수행합니다.

풀링 방법에는 최대 풀링(Max pooling)평균 풀링(Average pooling)이 있습니다.

최대 풀링은 정해진 범위 내에서 가장 큰 값을 꺼내오는 방식이며 평균 풀링은 정해진 범위 내에 있는 모든 요소의 평균을 가져오는 방식입니다.

일반적으로 이미지를 처리할 때에는 각 부분의 특징을 최대로 보존하기 위해서 최대 풀링을 사용합니다.

아래 그림은 2×22×2 크기의 최대 풀링과 평균 풀링을 처리하는 과정을 비교하여 나타낸 것입니다.

위 그림에서 왼쪽은 최대 풀링으로 각각의 2×2의 범위 내에서 가장 큰 요소인 100,184,12,45 출력 데이터로 가져옵니다.

오른쪽은 평균 풀링으로 각각의 2×2의 범위 내 요소의 평균값인 36,80,12,15 를 출력 데이터로 가져옵니다.

풀링 층은 학습해야 할 가중치가 없으며 채널 수가 변하지 않는다는 특징을 가지고 있습니다.

참고자료) 수직,수평 sobel필터

Sobel 필터는 영상 처리 분야에서 엣지 검출(edge detection)에 널리 사용되는 필터 중 하나입니다. Sobel 필터는 2x2 혹은 3x3 크기의 커널(kernel)을 사용하여 영상의 엣지 정보를 추출합니다. 이 중에서도 가장 일반적으로 사용되는 것이 3x3 크기의 Sobel 필터입니다.
3x3 Sobel 필터는 수평 방향의 엣지와 수직 방향의 엣지를 각각 검출하기 위해 두 개의 커널을 사용합니다. 수직 방향의 엣지를 검출하기 위한 수직(Sobel) 커널은 다음과 같습니다.

-1  0  1
-2  0  2
-1  0  1

이 커널은 수직 방향의 엣지를 검출하기 위해, 현재 위치에서 오른쪽, 왼쪽 픽셀과의 차이를 계산합니다. 이를 수평 방향의 엣지 검출을 위한 수평(Sobel) 커널과 조합하여, 이미지의 모든 픽셀에서 수직과 수평 방향의 엣지 정보를 추출할 수 있습니다.

수평(Sobel) 커널은 수직(Sobel) 커널을 전치(transpose)한 것과 같은 형태로 구성됩니다.

-1 -2 -1
 0  0  0
 1  2  1

Sobel 필터는 엣지 정보를 검출하는데에 있어서 노이즈에 강건하고, 연산 속도가 빠르며, 선명한 엣지 정보를 얻을 수 있다는 장점이 있습니다. 그러나 Sobel 필터는 엣지가 직선 형태를 띄는 경우에는 잘 작동하지만, 곡선 형태의 엣지에서는 부적절한 결과를 보일 수 있습니다. 이러한 한계를 보완하기 위해서는 다른 필터를 조합하여 사용하거나, 또는 머신러닝 기술을 사용하여 엣지 검출을 수행하는 등 다양한 방법이 존재합니다.

2. CNN의 학습

개요 및 학습 순서

CNN(Convolutional Neural Network)은 이미지 처리를 위한 딥 러닝 알고리즘 중 하나입니다. CNN의 핵심 아이디어는 이미지에서 특징을 추출하고 분류하는 데 필요한 정보를 스스로 학습하는 것입니다. 이를 위해 CNN은 여러 층의 컨볼루션(Convolution)과 풀링(Pooling) 층으로 구성됩니다.

CNN을 구성하는 주요 구성 요소는 다음과 같습니다:

  1. 입력 이미지 준비: CNN은 입력 이미지를 2차원 형식으로 받습니다. 따라서 이미지를 2차원 배열로 변환해야 합니다.

  2. 컨볼루션(Convolution) 계층: 이미지의 특징을 추출하기 위해 여러 개의 컨볼루션 계층을 사용합니다. 이 계층은 이미지에서 작은 부분들을 추출하여, 필터(filter)라는 작은 가중치 집합으로 특징 맵(feature map)을 생성합니다.

  3. 활성화 함수: 활성화 함수는 컨볼루션 계층의 결과를 비선형적으로 변환합니다. 대표적인 함수로는 ReLU(Rectified Linear Unit) 함수가 있습니다.

  4. 풀링(Pooling) 계층: 컨볼루션 계층의 출력은 대개 너무 많은 데이터를 포함합니다. 이를 줄이기 위해 풀링 계층을 사용합니다. 이 계층은 특징 맵을 다운샘플링하여 작은 특징 맵으로 변환합니다.

  5. 완전 연결 계층(Fully Connected Layer): 컨볼루션과 풀링 계층을 거친 후, 마지막으로 완전 연결 계층을 추가합니다. 이 계층은 모든 특징들을 하나의 벡터로 모은 후, 분류 작업에 적합한 형태로 출력합니다.

  6. 출력 계층(Output Layer): 출력 계층은 분류 작업을 수행하며, 분류 결과에 대한 확률 값을 출력합니다.

따라서, CNN을 구성하기 위해 다음과 같은 순서로 진행합니다.

  1. 데이터를 불러오고 전처리를 수행합니다.
  2. CNN의 입력 이미지를 2차원 배열로 변환합니다.
  3. 컨볼루션 계층을 구성합니다.
  4. 활성화 함수를 적용합니다.
  5. 풀링 계층을 구성합니다.
  6. 완전 연결 계층을 추가합니다.
  7. 출력 계층을 구성합니다.
  8. 모델을 학습시킵니다.
  9. 모델을 평가하고 테스트

3. 전이학습(Transfer Learning)

전이학습(Transfer Learning)은 딥 러닝 모델을 학습시키기 위해 사용되는 기술 중 하나입니다. 전이학습은 미리 학습된 모델을 이용하여 새로운 데이터셋에 대한 딥 러닝 모델을 학습하는 방법입니다.

전이학습을 사용하면, 적은 양의 데이터셋으로도 높은 성능의 딥 러닝 모델을 구축할 수 있습니다. 일반적으로 딥 러닝 모델은 큰 규모의 데이터셋에서 학습할 때 더 높은 성능을 보이지만, 데이터셋이 적을 때는 과적합(Overfitting) 현상이 발생하기 쉽습니다. 하지만 전이학습을 사용하면 미리 학습된 모델의 일부 또는 전체를 새로운 데이터셋에서 재사용할 수 있기 때문에, 과적합을 방지하면서 높은 성능을 달성할 수 있습니다.

전이학습을 수행하는 방법은 크게 두 가지로 나뉩니다. 첫 번째는 미리 학습된 모델의 일부 또는 전체를 가져와서 새로운 데이터셋에 맞게 Fine-tuning을 수행하는 것이고, 두 번째는 미리 학습된 모델에서 특징 추출기(Feature Extractor)를 가져와서 새로운 분류기(Classifier)를 추가하는 것입니다.

첫 번째 방법에서는 미리 학습된 모델을 가져와서 새로운 데이터셋의 특징을 재학습하는 방법입니다. 새로운 데이터셋에서의 성능을 높이기 위해 기존 모델의 가중치를 초기값으로 사용하고, 새로운 데이터셋에 맞게 가중치를 Fine-tuning합니다.

두 번째 방법에서는 미리 학습된 모델에서 특징 추출기를 가져와서, 새로운 분류기를 추가합니다. 특징 추출기는 이미지에서 특징을 추출하는 역할을 하기 때문에, 새로운 분류기를 추가하기 위해선 미리 학습된 모델의 마지막 층을 제외한 층들의 가중치를 고정하고, 마지막 층을 새로운 분류기로 대체하여 Fine-tuning을 수행합니다.

전이학습은 다양한 분야에서 사용되고 있으며, 이미지 분류, 객체 검출, 언어 모델 등 다양한 딥 러닝 모델에서

post-custom-banner

0개의 댓글