[CNN] Convolution 연산

유가연·2022년 2월 8일
0

TIL

목록 보기
19/32

이미지와 Convolution 연산

퍼셉트론은 FULLY-CONNECTED LAYER. 1차원 데이터를 요구. 이미지를 단순하게 1차원으로 바꾸면 2차원상에서 가지는 정보를 포기해야 함. (이미지 내 사물간의 거리 관계 등, 색의 변화:특히 세로로 변하는 상황) 즉, 공간 정보가 무너짐. 따라서 이미지 처리에 특화된 딥러닝 모델이 등장

CNN의 대표적인 구성 요소

  • CONVOLUTION 연산
    : CNN을 구현하는 핵심 연산. 커널과 CONVOLUTION 연산. 전통적인 이미지 처리 분야에서 커널(또는 필터)란 것이 존재. 이미지와 커널 간의 CONVOLUTION 연산으로 처리.

2차원 이미지 데이터 : 행렬로 표현 가능 ( 행렬의 각 원소는 해당 위치의 이미지 픽셀값 )
CONVOLUTION 커널 : 행렬로 표현 가능
CONVOLUTION 연산은 2차원 상에서 연산이 이루어지므로 이미지 데이터를 변형 없이 그대로 사용 가능

  • POOLING LAYER
  • CLASSIFIER 분류기

Convolution 연산 과정


커널은 이미지 영역 내에서만 겹쳐야 한다는 조건이 있음. 막다른 곳에 달하면 맨 왼쪽으로 이동하고 한 칸 내려감. 즉 결과는 겹치는 내용에 관한 값만 반환됨.

컬러 이미지는 채널이 3개 이므로 커널도 채널을 3개로 준비해야함. 즉 인풋의 커널과 필터의 커널 개수가 같아야 함. 각 채널별로 convolution 연산을 수행해서 feature map을 뽑아내고 각 결과를 더해 하나의 feature map을 생성.

Convolution neural network

지금까지 사용한 커널들은 학습 가능한 커널. 즉 커널 행렬의 각 값들이 가중치. 그래서 중추적인 역할을 함. 이러한 커널들로 이루어진 layer를 convolution layer라고 부름. 이 layer들을 쌓아서 cnn을 구성.

  • layer 역할
    이미지가 가지는 특정 feature를 뽑아내도록 커널을 학습. 커널에 따라 추출하는 feature를 다르게 학습. 이미지 내의 대각선, 원형, 색조 등등이 이러한 feature에 해당.

layer자체가 다르면 뽑아내려는 커널의 양상이 다름. 뒤로 갈 수록 고수준을 뽑아낼 수 있음.
hyperparameter : 딥러닝 모델의 학습 과정을 조절하기 위한 파라미터. 우리가 직접 조정.

  • stride(보폭) : 커널이 이미지 내에서 이동하는 칸수를 조절.

    stride가 2칸일 경우의 예시. 모든 과정에서 똑같이 움직여야함

  • padding : convolution 연산 결과 feature map 사이즈가 계속 줄어드는데 패딩을 추가하여 feature map의 사이즈가 줄어드는 현상을 방지. 또한 이미지의 테두리 정보도 균일하게 활용. 패딩에는 주로 0이 들어가면서 zero padding이라고 함.

convolution layer의 의미
: 왜 이미지 특징을 잘 뽑아내는가? convolution 연산은 하나의 커널이 픽셀 간의 정보를 보게 만듦. 하나의 커널이 이미지 전체 영역을 보고 학습. 이미지에서 연속적으로 변하는 정보를 잡아내는데 유리한 연산 방식.

: parameter sharing : 커널이 가진 parameter를 이미지의 모든 영역에서 공유하기 때문에 모델의 가중치 개수가 극적으로 줄임. parameter 개수를 rc layer(꽉차게 연결)에 비해 극적으로 줄임(과적합 방지에 유리). 1차원으로 핀 이미지를 커널에 연결할 때 연결되는 선이 무수히 많은데 여기에 다 가중치가 곱해짐. 이거에 비해 연산이 적음

  • convolution layer 활성화 함수
    : convolution 연산 또한 선형 연산으로 모두 곱셈과 덧셈으로만 이루어짐. 따라서 fc layer처럼 비선형성을 추가하기 위해 활성화 함수를 사용하는데 cnn은 주로 relu함수를 사용.

  • pooling layer : 바늘과 실같은 존재
    cnn에서 거의 항상 같이 쓰이는 layer. 주로 feature map의 사이즈를 줄여서 parameter 개수를 줄이는 것인데 과적합을 조절함.

(1) 첫번째 방식 : max pooling
: 주어진 이미지나 feature map을 더 작은 영역으로 분할. 각 영역에서 최대값을 뽑아내어 새로운 feature map을 구성. 2배가 일반적이며 여기서도 2x2로 함.

(2) 두번째 방식 : average pooling
: max pooling과 거의 동일하나 각 영역의 평균값을 계산하여 새로운 feature map을 구성

일반적으로 max pooling을 많이 사용. 실험적으로 feature map에 존재하는 feature 중 가장 영향력이 큰 feature만 사용하는 것이 의미있다는 것이 증명됨. feauture map의 채널이 여러 개면 각 채널별로 pooling 연산 수행. 컨벌루션 연산과 다른 점은 그건 다 더했는데 여기서는 더하지는 않음.

(3) 세번째 방식 : 분류
cnn은 일반적으로 이미지 분류 목적으로 사용. feature map을 fully-connected layer에 통과시켜 분류를 수행. 이를 위해 feature map을 1차원으로 변형. 이 모델은 총 5개의 분류 대상 중 하나로 분류하는 모델.

위의 자료는 convolution layer와 pooling layer를 통과해 최종 feature map을 뽑아냄. 이를 fully-connected layer(분류기)에 넣기 위해서는 1차원 변환이 필요. 1차원 변환에 글로벌 에버리지 풀링을 사용할 수도 있음.

대표적인 CNN 모델

  1. lenet : 우편번호 인식을 위한 모델
  2. alexnet : 딥러닝 모델 학습에 gpu를 활용. 이후로 사실상 모든 딥러닝 모델은 gpu로 학습. relu 할성화 함수 소개.
  3. vggnet : 커널 사이즈를 모두 3x3으로 통일. parameter 수 증가를 억제하면서 모델 층을 더 많이 쌓을 수 있게 됨. 층이 많을수록(즉, 모델이 깊을수록) 일반적으로 성능이 향상됨.
  4. resnet : layer개수를 최대 152개까지 늘림. 깊은 모델에서 필연적으로 나타나는 현상 : 기울기 소실(vanishing gradient) : 역전파 과정에서 기울기 값이 점점 작아지다 0에 수렴하면서 발생. 모델 학습에 오랜 시간이 걸리거나 아예 학습이 멈추게 됨. -> layer가 너무 많으면 오히려 안좋을 수 있다
    -> residual connection : 기울기 소실(기울기가 0이 되는 현상)을 해결하기 위한 구조. 이를 통해 layer 수를 극적으로 늘림. 기존 컨볼루션 레이어들을 우회하는 연결.

    입력 geature map이 우회로를 통과하여 convolution layer의 feature map과 더해짐. 기울기 값이 항상 1 이 상이 되어 기울기 소실 문제를 방지.

? 지난것들은 다 분류만을 위한 모델. 그렇다면 분류 작업이 아닌 경우에 사용하는 모델은?
분류 작업이 아닌 경우에도 대부분 분류 모델과 유사하게 cnn을 구성. 모델의 출력값, 손실 함수, 데이터셋 구성 등이 완전해 다르게 이루어짐. ex. yolo, r-cnn, u-net.

profile
유가연

0개의 댓글