컴퓨터비전(Computer Vision)

합성곱 신경망 정리 (Convolutional Nueral Network , CNN)

zzoming 2024. 1. 13. 18:54

1. 합성곱층의 필요성 

합성곱 신경망은 이미지나 영상을 처리하는데 유용하다. 예를 들어서 다음과 같이 3x3 흑백 이미지가 있다고 가정할때, 이미지 분석은 3x3 배열을 펼쳐서(flattening) 각 픽셀에 가중치를 곱하여 은닉층으로 전달하게 된다. 하지만 이렇게 분석하면 데이터의 공간적 구조를 무시하게 되는데, 이것을 방지하려고 도입된 것이 합성층이다. 

 


2. 합성곱 신경망 구조 

합성곱 신경망(Convolutional Neural Network , CNN) 은 음성인식이나 이미지/영상 인식에서 주로 사용되는 신경망이다. 다차원 배열 데이터를 처리하도록 구성되어 컬러 이미지와 같은 다차원 배열 처리에 특화되어 있으며 , 다음과 같은 계층으로 구성된다. 

  1. 입력층
  2. 합성곱층
  3. 풀링층
  4. 완전연결층
  5. 출력층 

합성곱 신경망은 합성곱층과 풀링층을 거치면서 입력 이미지의 주요 특성(feature vector)을 추출한다. 그 후 추출된 주요 특성 벡터들은 완전 연결층을 거치면서 1차원 벡터로 변환되며, 마지막으로 출력층에서 활성화 함수인 softmax함수를 사용하여 최종결과가 출력된다. 

 

📈입력층 

 

이미지는 단순 1차원 데이터가 아닌 높이, 너비, 채널 의 값을 갖는 3차원 데이터이다. 이때 채널은 이미지가 흑백이면 1 값을 가지고, 컬러이면 3 값을 갖는다. 

 

📈 합성곱층 

 

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

 

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

이때 스트라이드(stride)란  필터를 적용하는 위치의 간격을 의미한다. 

위의 그림은 같이 이미지 크기는 (5,5,1) 이며 3x3 크기의 커널/필터가 스트라이드 1 간격으로 이동하면서 합성곱 연산을 수행하는 것이다. 커널과 스트라이드의 상호작용으로 5x5x1 크기가 3x3x1 크기의 특성맵으로 줄어들었다.  

 

  • 입력 데이터 : W_1 x H_1 x D_1 (W_1 : 가로 , H_1 : 세로 , D_1 : 채널 또는 깊이)
  • 하이퍼파라미터 
    • 필터개수 ; K 
    • 필터크기 : F 
    • 스트라이드 : S 
    • 패딩 : P 
  • 출력 데이터 
    • W_2 = (W_1 - F + 2P ) / S + 1 
    • H_2 = (H_1 - F + 2P ) / S + 1 
    • D_2 = K

📈 풀링층 

 

합성곱층과 유사하게 특성 맵의 차원을 다운샘플링하여 연산량을 감소시키고, 주요한 특성 벡터를 추출하여 학습을 효과적으로 할 수 있게 한다.  

 

  • 최대 풀링(max pooling) : 대상 영역에서 최댓값을 추출 
  • 평균 풀링(average pooling) : 대상 영역에서 평균을 반환 

대부분의 합성곱 신경망에서는 최대 풀링이 사용되는데, 평균 풀링은 각 커널 값을 평균화 시켜서 중요한 가중치를 갖는 값의 특성이 희미해질 수 있기 때문이다. 

  • 입력 데이터 : W_1 x H_1 x D_1 
  • 하이퍼파라미터 
    • 필터크기 : F 
    • 스트라이드 : S 
  • 출력데이터 
    • W_2 = ( W_1  - F) /  S + 1 
    • H_2 = ( H_1 - F ) / S + 1 
    • D_2 = D_1

📈 완전연결층 

 

합성곱층과 풀링층을 거치면서 차원이 축소된 특성 맵은 최종적으로 완전연결층(fully connected layer)으로 전달된다. 이 과정에서 이미지는 3차원 벡터에서 1차원 벡터로 펼쳐지게(flatten) 된다. 

 

📈 출력층 

 

출력층에서는 소프트맥스  활성화 함수가 사용되는데, 입력받은 값을 0~1 사이의 값으로 출력한다. 따라서 마지막 출력층의 소프트맥스 함수를 사용하여 이미지가 각 레이블(label)에 속할 확률 값이 출력되며, 이때 가장 높은 확률 값을 갖는 레이블(label)이 최종값으로 선정된다. 

 


패딩(Padding) 

 

합성곱 연산을 수행하는 과정에서 커널/필터와 스트라이드의 작용으로 원본 이미지 크기가 줄어들게 된다.  이렇게 특성 맵의 크기가 작아지는 것을 방지하려고 패딩(padding) 기법을 이용한다. 쉽게 말해 단순히 원본 이미지에 0이라는 값을 채워넣어 이미지를 확장한 후 합성곱을 적용한다. 

  • valid padding (밸리드 패딩) 
    • 패딩을 추가하지 않은 형태 
    • 합성곱 연산시 입력 데이터의 모든 원소가 같은 비율로 사용되지 않는 문제가 발생 
  • full padding(풀 패딩)
    • 입력데이터의 모든 원소가 합성곱 연산에 같은 비율로 참여하도록 하는 패딩 방식 
  • same padding(세임 패딩) 
    • 출력 크기를 입력 크기와 동일하게 유지하는 방식 
    • 세임 패딩은 풀 패딩의 절반개념이므로 절반 패딩(half padding)이라고 부른

 

즉, 원본 이미지 크기를 줄이지 않으면서 합성곱 연산이 가능하게 하는 것이 패딩의 역할이다. 


3. 전이학습 

일반적으로 합성곱 신경망 기반의 딥러닝 모델을 제대로 훈련시키려면 많은 양의 데이터가 필요하다. 그런데 현실적으로 충분히 큰 데이터 셋을 얻는 것은 쉽지 않다. ( 돈과 시간의 한계 ) 

 

이러한 현실적인 어려움을 해결한 것이 전이학습(transfer learning) 이다.

전이학습이란 이미지넷(ImageNet)처럼 아주 큰 데이터 셋을 써서 훈련된 모델의 가중치를 가져와 우리가 해결하려는 과제에 맞게 보정해서 사용하는 것을 의미한다.

이때 아주 큰 데이터셋을 사용하여 훈련된 모델을 사전훈련된모델(pre-trained model)이라고 하며, 비교적 적은 수의 데이터를 가지고도 우리가 원하는 과제를 해결할 수 있다. (기존 모델에서 학습한 특성이 비슷한 문제에서도 유용하기 때문) 

 

전이학습은 크게 두가지 방법으로 나뉜다. 

1. 특성추출(Feature Extraction) : 사전 학습된 모델을 사용하여 새로운 모델을 초기화 하는 방법 

→ 전체 모델을 처음부터 학습시키는 것보다 효율적 

2. 미세 조정기법(fine-tuning) : 사전학습된 모델의 일부를 재사용하여 새로운 모델을 구성하는 방법 

→ 새로운 문제에 더 맞는 모델을 구성할 수 있음

 

🤔특성추출기법 

 

특성 추출 기법은 사전 학습된 모델에서 이미지 데이터를 입력받아서 합성곱층을 통해 이미지의 특성을 추출한다. 이렇게 추출된 특성은 최종적으로 완전 연결층(fully connected layer)을 통해 분류된다. 

 

새로운 데이터셋에서 특성 추출을 위해서는 먼저 사전학습된 모델의 합성곱층을 고정(freeze) 시키고, 완전 연결층 부분만 새로운 데이터 셋에 맞게 변경하여 학습한다. 

 

즉, 새로운 데이터셋에서는 이미지의 카테고리를 결정하는 부분인 마지막 완전 연결층만 학습하고, 나머지 합성곱층 계층들은 사전 훈련된 가중치를 그대로 사용하여 학습되지 않도록 고정한다. 

 

예제) ResNet50모델을 사용하여 특성추출 

  1. include_top : 네트워크 상단에 완전 연결층을 포함할지 여부를 지정하며, 기본값은 True이다. 
  2. weights : 가중치를 의미하며, None(무작위 초기화) 과 'imagenet(ImageNet에서 사전훈련된 값)' 을 지정할 수 있다. 
  3. input_tensor : 입력 데이터의 텐서(layers.Input() 출력) 
  4. input_shape : 입력 이미지에 대한 텐서 크기 이다.
  5. pooling : 풀링에서 사용할 수 있는 값은 다음과 같다. 
    1. None (마지막 합성곱층 출력)
    2. avg (마지막 합성곱층에 GlobalAveragePooling이 추가) 
    3. max (마지막 합성곱층에 GlobalMaxPooling 이 추가) 
  6. classes : weights로 'imagenet'을 사용하려면 classes 값이 1000이어야 한다. 다른 값으로 사용하고 싶다면 'None' 으로 지정한다. 

🤔 미세 조정 기법

미세조정기법(fine-tuning)기법은 특성 추출에서 더 나아가 사전 훈련된 모델과 합성곱층, 데이터 분류기의 가중치를 가중치를 업데이트하여 훈련시키는 방식 이다. 즉, 사전학습된 모델을 목적에 맞게 재학습 시키거나 학습된 가중치의 일부를 재학습시키는 것이다. 

 

미세 조정 기법은 훈련시키려는 데이터 셋의 크기와 사전훈련된 모델에 따라 다음 전략을 세울 수 있다. 

 

① 데이터 셋이 크고 사전 훈련된 모델과 유사성이 작을 경우 

: 모델 전체를 재학습 시킨다. 데이터 셋의 크기가 크고 재학습시키는 것이 좋은 전략이다

 

② 데이터 셋이 크고 사전 훈련된 모델과 유사성이 클 경우 

: 합성곱층의 뒷부분과 데이터 분류기를 학습시킨다. 데이터 셋이 유사하기 때문에 전체를 학습시키는 것보다 강한 특징이 나타나는 합성곱층의 뒷부분과 데이터 분류기만 새로 학습하더라도 최적의 성능을 낼 수 있다. 

 

③데이터 셋이 작고 사전 훈련된 모델과 유사성이 작을 경우 

: 합성곱층의 일부분과 데이터 분류기를 학습시킨다. 데이터가 적기 때문에 일부 계층에 미세 조정 기법을 사용한다고 해도 효과가 없을 수 있다. 따라서 합성곱층 중 어디까지 새로 학습시켜야할 지 적당히 설정해주어야 한다. 

 

④ 데이터 셋이 작고 사전 훈련된 모델과 유사성이 클 경우 

: 데이터 분류기만 학습시킨다. 데이터가 적기 때문에 많은 계층에 미세 조정 기법을 적용하면 과적합이 발생할 수 있다. 따라서 최종 데이터 분류기인 완전 연결층에 대해서만 미세 조정 기법을 적용한다.