티스토리 뷰

개발공부/🤖 DL & ML

[CNN] Convolutional Neural Network

2022. 11. 2. 10:17

 

1️⃣  이미지와 Convolution 연산

 

▶  Fully-connected Layer와 이미지 데이터

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

FC Layer는 1차원 데이터를 요구한다.

 

이미지를 단순하게 1차원으로 바꾸면 2차원 상에서 가지는 정보를 포기해야한다.

-  이미지 내 사물 간의 거리 관계 등

- 색의 변화 (특히, 세로로 변하는 상황)

 

→  즉, 공간 정보(Spatial Information)가 무너진다.

 

 

따라서, 이미지 처리에 특화된 딥러닝 모델이 등장  :  Convolutional Neural Network

 

 

 

CNN의 대표적인 구성 요소

 

-  Convolutional Layer

-  Pooling Layer

-  분류기(Classifier): Fully-connected layer

 

 

 

 

 

 

▶  Convolution 연산

 

:  CNN을 구현하는 핵심 연산

 

 

 

커널과 Convolution 연산

 

- 전통적인 이미지 처리 분야에서 커널(또는 필터)이란 것이 존재

- 이미지와 커널 간의 Convolution 연산으로 처리

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

 

-  2차원 이미지 데이터  :  행렬로 표현 가능  (행렬의 각 원소는 해당 위치의 이미지 픽셀값)

-  Convolution 커널  :  행렬로 표현 가능

 

 

Convolution 연산은 2차원 상에서 연산이 이루어지므로 이미지 데이터를 변형 없이 그대로 사용 가능하다.

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

 

 

 

2️⃣  Convolution 연산 과정

 

▶  Convolution 연산 과정

 

-  아래 이미지의 노란색 영역이 커널

 

 

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

Convolution 연산 용어

 

-  Feature Map (또는 Activation Map)  :  연산 결과

-  수용 영역(Receptive Field)  :  커널과 이미지가 겹치는 영역

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

 

▶  컬러 이미지의 Convolution 연산

 

-  위의 예시는 이미지의 채널이 1개이므로 흑백 이미지

-  컬러 이미지는 채널이 3개  →  이 경우 커널도 채널을 3개로 준비  (input 이미지의 채널 갯수와 커널의 채널 갯수는 동일해야한다)

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

-  각 채널 별로 Convolution 연산을 수행하고 각 결과를 더해서 하나의 Feature Map을 생성한다.

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

 

▶  Convolution 연산의 확장

 

-  지금까지는 커널을 1개만 사용  →  Feature Map도 1개

-  커널을 여러 개 두면 Feature Map도 여러 개 생성된다.

-  커널 갯수가 CNN 모델의 성격을 결정하게 된다.

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

 

 

 

 

3️⃣  CNN (Convolutional Neural Network)

 

▶  Convolutional Layer

 

커널을 이용하여 이미지에서 feature를 추출하는 Layer

 

지금까지 사용한 커널들은 학습 가능한 커널  →  즉, 커널 행렬의 각 값들이 가중치(Weight)

이러한 커널들로 이루어진 Layer를 Convolutional Layer라고 부르고, 이 Layer들을 쌓아서 CNN을 구성한다.

(하나의 Convolutional Layer에 여러 개의 커널을 구성할 수 있다)

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

Layer의 역할

 

-  이미지가 가지는 특정 Feature를 뽑아내도록 커널을 학습

-  커널에 따라 추출하는 Feature를 다르게 학습

-  이미지 내의 대각선, 원형, 색조 등등이 이러한 Feature에 해당

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

Convolutional Layer의 의의

 

왜 이미지 특징을 잘 뽑아내는가?

→  Convolution 연산은 하나의 커널이 픽셀 간의 정보를 보게 만든다. (이미지에서 연속적으로 변하는 정보를 잡아내는데 유리)

→  하나의 커널이 이미지 전체 영역을 보고 학습한다.

 

Parameter Sharing

→  커널이 가진 Parameter를 이미지의 모든 영역에서 공유한다.  (모델의 가중치 갯수극적으로  감소)

→  Parameter 개수를 FC Layer에 비해 극적으로 줄인다. (과적합 방지에 유리)

 

 

 

 

 

Stride

 

 

-  Convolution 연산 과정을 조절하기 위한 Hyperparameter

-  커널이 이미지 내에서 이동하는 칸수를 조절한다.

-  지금까지 Convolution 연산에서 보여준 예시는 모두 1칸  /  위의 그림은 Stride가 2칸일 경우의 예시

 

 

 

💡  Hyperparameter

 

딥러닝 모델의 학습 과정을 조절하기 위한 파라미터

-  사람이 직접 정해줘야한다.

-  Convolutional Layer에서 조절할 수 있는 hyperparameter로는 커널의 개수, 커널의 크기, stride, padding 등이 있다.

 

 

 

 

Padding

 

Convolution 연산을 진행하면 Feature Map 사이즈가 계속 줄어든다.

 

→  Padding을 추가하여 Feature Map 사이즈가 줄어드는 현상 방지할 수 있고,

이미지의 테두리 정보도 균일하게 활용할 수 있다.

 

일반적으로 패딩 영역의 값은 0이 들어간다.  (zero padding)

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

 

Convolutional Layer 활성화 함수

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

Convolution 연산 또한 선형 연산은 곱셈과 덧셈으로만 이루어진 연산이다.

 

따라서 FC Layer처럼 비선형성을 추가하기 위해 활성화 함수를 사용한다.

 

CNN은 주로 ReLU 함수를 사용한다.

 

 

 

 

 

 

 

▶  Pooling Layer

 

-  CNN에서 거의 항상 같이 쓰이는 Layer

-  주 역할은 Feature Map의 사이즈를 줄여서 Parameter 개수를 줄이는 것이다. (과적합 조절)

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

 

Max Pooling

 

각 영역에서 최대값을 뽑아 새로운 Feature Map을 구성한다.

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

-  주어진 이미지나 Feature Map을 겹치지 않는 영역으로 분할한다. (위 그림은 각 영역의 크기가 2x2가 되도록 분할)

-  일반적으로 pooling을 한다고 하면 Feature Map의 사이즈를 2배로 줄인다.

 

 

 

 

 

 

Average Pooling

 

Max Pooling과 거의 동일하나, 각 영역의 평균값을 계산하여 새로운 Feature Map을 구성한다.

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

일반적으로 Max Pooling을 많이 사용한다.

→  Feature Map에 존재하는 Feature 중 가장 영향력이 큰 Feature만 사용하는 것이 효율적이라는게 실험을 통해 밝혀진 사실이기 때문

 

 

Feature Map의 채널이 여러 개면 각 채널별로 Pooling 연산을 수행한다.

Convolution연산과 다른 점은 Pooling연산의 경우 각 채널별로 나온 연산의 결과를 더하진 않는다.

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

추가적인 Pooling Layer

 

-  Global Average Pooling  :  전체 Feature Map에서 하나의 평균값을 계산

-  Global Max Pooling  :  전체 Feature Map에서 하나의 최대값을 계산

 

둘 다 마찬가지로 채널 별로 연산을 수행한다.

여기선 Global Average Pooling을 많이 사용한다.  →  Global Average Pooling은 분류기와 많은 연관이 있다.

 

 

 

 

 

 

 

▶  분류기 (Classifier)

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

CNN은 일반적으로 이미지 분류 목적으로 사용한다.

 

Feature Map을 Fully-connected Layer에 통과시켜 분류를 수행한다.

 

이를 위해 Feature Map을 1차원으로 변형한다. (Global Average Pooling 활용 가능)

 

 

 

 

 

 

 

 

4️⃣  대표적인 CNN 모델

 

 

▶  LeNet (1990년)

 

우편번호 인식을 위한 모델

 

-  Subsampling layer  ==  Pooling layer

-  Full connection  ==  Fully-connected Layer

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

▶  AlexNet (2012년)

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

-  2012년 ImageNet Challenge 우승  →  기존 모델의 성능을 큰 폭으로 상회

-  ReLU 활성화 함수 소개

-  딥러닝 모델 학습에 GPU를 활용  →  이후로 사실상 모든 딥러닝 모델은 GPU로 학습

 

 

 

 

 

▶  VGGNet (2014년)

 

-  커널 사이즈를 모두 3x3으로 통일

-  Parameter 수 증가를 억제하면서 모델 층을 더 많이 쌓을 수 있게 된다.

-  층이 많을수록(즉, 모델이 깊을수록) 일반적으로 성능이 향상된다.

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

 

 

▶  ResNet (2015년)

 

-  깊은 모델에서 필연적으로 나타나는 현상인 Vanishing Gradient 문제를 해결하기 위한 구조 (Residual Connection)

-  이를 통해 Layer 개수를 극적으로 늘림 (152개)

-  기존 Convolutional Layer들을 우회하는 연결  (입력 Feature Map이 우회로를 통과하여 Convolutional Layer의 Feature Map과 더해짐)  →  기울기 값이 항상 1 이상이 되어 기울기 소실 문제를 방지

 

이미지 출처 : 엘리스 CNN/RNN 2장 CNN 강의자료

 

 

 

💡  Vanishing Gradient (기울기 소실)

 

역전파 과정에서 기울기 값이 점점 작아지다 0에 수렴하면서 발생

→  모델 학습에 오랜 시간이 걸리거나 아예 학습이 멈추게 된다.

 

 

 

 

 

 

 

▶  분류 작업이 아닌 경우에 사용하는 모델은?

 

지금까지 나온 모델은 모두 분류 모델들

 

분류 작업이 아닌 경우에 사용하는 모델은?

 

→  일반적으로 분류 모델과 유사하게 CNN을 구성한다.

→  모델의 출력값, 손실 함수, 데이터셋 구성 등이 완전히 다르게 이루어진다.   ex) YOLO, R-CNN, U-Net 등

 

 

 

 

 

 


 이 글은 엘리스의 AI트랙 5기 강의를 들으며 정리한 내용입니다.

반응형
프로필사진
개발자 삐롱히

프론트엔드 개발자 삐롱히의 개발 & 공부 기록 블로그