-
[CS231n] 5강 Convolutional Neural NetworksStudy/CS231n 2020. 11. 14. 20:40
이번 강의에서는 CNN에 대해서 배운다.
Convolutional Neural Networks , 딥러닝 이미지 처리 분야에서 기본이자 중요한 Neural Network 이다.
CNN이 발전되기 전까지 딥러닝의 역사에 대해 간단히 배운다.
Mark 1 Perceptron이다. 단순히 기계로 동작했고 일반적인 단층 퍼셉트론이라고 생각하면 된다.
W값을 조절하면서 train한다.
Adaline/Madaline 이다. backpropagation 개념이 없어서 기계가 숫자를 조절하면서 러닝을 했다.
1986년 back-propagation 개념이 나오기 시작한다. 이때만 해도 지금 처럼 인기를 끌지는 못했다.
첫번째로 딥러닝이 확 뜨는 계기가 된 연구는 2012년 speech recognition와 우리가 알고 있는 이미지 인식 모델인 AlexNet이다.
image net에서 사람보다 더 뛰어나게 인식할 수 있도록 딥러닝을 이용해 구현했고 이때 사용한 방법이 CNN이다.
강의 초반 고양이에 대해 실험했던 내용이 CNN의 기초이다.
사실 이러한 구조는 우리 피질(cortex)에서 아이디어를 얻었다고 한다. 인간 대뇌 피질은 바깥 쪽에서는 간단한 구조를 인식하고 그와 연결된 뉴런을 타고타고 깊이 들어갈수록 이 정보들을 조합해 복잡한 정보를 인식한다고 한다. 이러한 구조를 계층적하다고 표현하고 있다. 이에 착안해서 나온 논문이 Neurocognitron이다.
그리고 Lecun등이 소개한 Lenet에서 cnn이 제대로 적용된다.
위에서 말한듯이 바깥족에서 간단한 구조를 인식하고 그와 연결된 뉴련을 타고 들어갈수록 복잡한 정보를 인식하는 과정과 비슷하다.
이를 더 발전시켜 AlexNet이 나온다. AlexNet에 관한 자세한 설명은 뒤에 강의에서 한다.
큰것 -> 섬세한 것으로 feature를 추출한다. image net에서 뛰어난 성과를 이룬다.
Computer Vision 영역에서 사용되는 detection 이나 Segmentation에도 CNN으로 함께 사용 된다.
그 뒤에는 CNN이 사용되는 다양한 예시가 나온다. 나와 관련 있는 이미지 처리분야만 정리했다.
이제 본격적으로 cs231n 강의에 핵심인 CNN에 대해 설명한다.
우리는 앞에서 단순히 input image를 stretch해서 Wx에 넣고 학습했다.
이 과정에서 말머리가 2개나온다거나 문제가 생겼다.
먼저 image가 RGB 칼라라고 가정한다. depth가 3이 됨을 볼 수 있다.
Convoultion filter를 이용한다. RGB 이미지 이므로 depth를 3으로 설정해준다.
각 필터 w와 이에 해당하는 이미지 픽셀을 곱해준다. 각 원소끼리 Convolution 하거나 그것들을 쭉 펴서 내적하거나 똑같은 방법이다.
32*32*3 image 와 5*5*3 filter를 convolution 하면 28*28*1 하나의 activation map이 나온다.
이것은 feature이 뽑아내진 층이라고 할 수 있다.
Convolution layer와 FC layer의 차이점은 지역(local)적 특성을 보인 다는 것이다. 그리고 원소들의 곱이다. 강의에서는 dot product 즉 내적이라고 한다. FC layer는 가중치(W)행렬과 입력 행렬을 곱한 것이라면 Convolution layer는 필터와 원소를 곱한 후 그 원소들의 곱이 끝난 후의 합이 다시 한 픽셀의 값이 된다.
필터가 1개만 있을까??! 아니다.
여러개의 filter 를 사용하면 여러가지의 activation map을 만들 수 있다.
filter를 하나 더 두면 위와 같은 그림이 된다. 각 layer의 출력은 다음 layer의 입력이 된다.
Conv->ReLU를 반복하다가 가끔 Polling이나 FC를 거친다.
이런식으로 이미지의 feature를 추출해나가는 것이다.
실제로 시각화 한 그림이다.
level이 높아질수록 더 많은 feature를 담고 있고 layer의 계층에 따라 단순,복잡한 특징이 나타난다.
과거에 피질이라고 말한 아이디어, 즉 큰 영역 -> 섬세한 영역으로 파고든다는 이론과 일맥상통한다.
위에 작은 사진들이 filter 이다. 그리고 아래는 activation map 이다. 해당하는 filter와 activation map을 볼 수 있다.
각 filter들이 각각의 feature를 추출해내는 것을 알 수 있다.
무작정 아무 feature만 추출 하는 것은 아니다. 이미지의 edge, 블롭등 해당 이미지를 잘 인식할 수 있는 feature을 추출 할 수 있도록 학습이 진행된다.
여기서 Relu 함수 부분을 보자. 특징맵이 relu을 거치면 보다 특징적인 부분만 선택되어 남아 있음을 확인 할 수 있다.
위 사진에서 왜 검정색과 회색만 있을까??
Relu는 0이하의 값들을 0으로 만든다. 즉 -값들이 전부 없어진다. Relu를 하기전에는 -가 남아있으니까 회색까지 포함되는 것이다. 그리고 여기서는 RGB전체가 아닌 하나의 depth를 보여주는 gray 계열로 나오는 것이다.
어떻게 convolution이 이뤄지는지 자세히 살펴보자.
컨볼루션 계산하는 법을 확인해보자. 7*7 input이 있고 3*3 filter를 컨볼루션 하자고 생각하자.
이미지의 좌 상단에 filter가 맞춰지는 지점부터 시작한다. stride가 1이기 때문에 한칸씩 옆으로 옮기면서 계산을 한다. 이렇게 컨볼루션을 하면 총 4번을 오른쪽으로 움직일 것이다. 그러므로 output은 5*5 의 activation map이 나온다.
stride가 2이면 2칸씩 움직인다고 생각하면 된다. output은 stride 1일때보다 작아질 것이다.
stride를 3으로 하면 이 경우 fit 하지 않는다.
(input -filter) / stride + 1 = ouput size 이다.
여기서 padding의 개념이 나온다. stride를 늘릴수록, 컨볼루션을 할 수록 image의 크기가 작아진다. 급격하게 작아지면 cnn 층을 몇개 쌓지도 않았는데 image가 없어지는 경우가 발생한다. 또 중간에 있는 영역들은 filter이 중복해서 보게 된다. 사이드의 경우는 1번밖에 보지 못한다.
image의 크기가 작아지는 문제를 해결하기 위해 padding을 사용한다
여기서는 zero padding 을통해 양쪽 사이드에 zero값을 돌려준다. padding을 1개추가하면
7*7 image가 9*9 image가 된다.
일반적으로 filter에 따라 zero pad을 다음과 같이 사용한다.
stride와 pad, filter와 input volume으로 output을 계산하는 예제이다.
(input + 2*pad - filter) / stride + 1 이다.
layer의 파라미터를 계산해보자. 5*5*3 필터가 10개가 있으므로 750인데 각각의 bias를 생각해주면 총 760개가 된다.
수학식으로 간단하게 summary 한 그림이다.
receptive filed 란 한 뉴런이 한번에 수용 할 수 있는 영역을 의미한다.
만약 5개의 filter면 5개의 값이 나온다.
5개의 filter는 다른 feature를 가지고 있다.
Fully Connected Layer에서는 위의 그림 처럼 됨을 알 수 있다.
Pooling layer는 Representation들을 더 직관적으로 관리한다. feature를 유지하면서 image의 사이즈를 줄여준다.
작아지면 파라미터의 수가 줄어들고 "공간적"인 불변성을 얻을 수 있다.
보통 Max pooling을 사용한다. 큰 값을 뽑아내는 것이다.
큰 값은 이미지에서 feature의 값이 크다는 것을 의미한다.
즉 매우 튀는 큰 featrue를 뽑고 나머지는 버린다고 생각하면 된다.
마지막에 Fully Connected Layer을 넣어줘서 값들을 분류한다.
Conv layer의 출력은 3차원으로 되어있다. 이 값들을 전부 펴서 1차원 벡터로 만들고 이를 FC layer의 input으로 사용한다. 이러면 Conv net에 모든 출력을 서로 연결하는 것이다. 마지막 layer에서는 공간적 부분을 신경 안써도 된다.
결론적으로 Score가 나오게 된다.
여기까지 5강 내용이다. 다음시간에는 Training Neural Network에 대해서 배운다.
'Study > CS231n' 카테고리의 다른 글
[CS231n] 7강 Training Neural Networks II (0) 2020.11.21 [CS231n] 6강 Training Neural Networks I (0) 2020.11.14 [CS231n] 4강 Backpropagation and Neural Networks (0) 2020.10.31 [CS231n] 3강 Loss Functions and Optimization (0) 2020.10.24 [CS231n] 2강 Image Classification (0) 2020.10.17