시각 피질 안의 각 뉴런들은 일부 범위 안에 있는 시각 자극에만 반응한다 !
CNN 에서의 receptive field 란, 입력의 feature 가 영향을 받는 (i.e. feature 에 highly contribute 하는) input space 내의 영역을 뜻한다.
왼쪽의 경우 Feature map size 를 줄여 나가기 때문에 feature 가 계속 dense 하지만, 오른쪽의 경우 feature map size 를 고정하여 점점 sparse 해지게 된다. 이러한 특성 때문에 feature map size 를 줄여나가도 문제가 없는 것이다!
왜 이미지 분류에서는 Fully Connected 기반의 DNN 을 사용하기 힘든가
A. 이미지의 크기에 비례하여 parameter 의 개수가 많아지기 때문. 이는 Hidden layer 를 많이 쌓을 수록 더 큰 문제가 되며 이 때문에 차원수를 줄이고 각 층을 부분적으로 연결하는 convolution filter 의 역할이 중요함.
Convolution Layer 에서 convolution 연산을 수행하는 weight 의 세트를 convolution filter (or convolution kernel) 이라고 부른다. 보통 {3, 5, 7} 의 사이즈를 갖고 있다.
Horizontal Line 에 대한 feature 를 배우는 filter 를 적용하여 위와 같은 feature map 을 추출할 수 있다. Deep Learning 을 거치면 어떤 filter 를 배워야 할지 일일이 설정할 필요없이 알아서 무엇을, 어떤 weight 로 배워야 할지 설정한다는 것이다.
CNN 의 가장 큰 어려움 중 하나는, convolutional layer 가 많은 양의 메모리를 필요로 한다는 점.
(기본적으로 대부분의 경우에 input size 가 크고, Backprop 을 하는 동안 forward pass 에서 계산했던 모든 weight 를 필요로 하기 때문)
예를 들어, AlexNet 의 첫번째 conv layer 에서 필요한 parameter 개수와 연산량은 아래와 같이 계산할 수 있다.
Number of Parameters
만약 fully connected layer 를 사용했다면....?
55x55x3x55x55 = 27,451,876
Number of Calculations
parameter 수를 줄이기 위해 input 의 일부만 sampling 하는 것
Pooling Layer 는 가중치 없이 입력값을 간단한 함수를 거치게 하여 변환하는 정도에 그침. 대신 출력값이 입력값보다 훨씬 작은 dimension 으로 mapping 시킬 수 있으므로, 연산량과 parameter 수를 줄이는데에 효과적.
따라서 Conv Layer 뒤에 dimension 을 줄이는 용도로 사용하고 거의 세트로 딸려온다고 해도 무방함.
max([0, 0, 0, 1]) == max([1, 0, 0, 0])
첫번째 층을 제외하면 일반적으로는 33 또는 55 필터를 가진 Conv Layer 몇개 + Pooling Layer 1개의 반복적인 구조
CNN의 조상(?)
대 CNN 시대의 시작
의의
1*1 convolution filter 를 적용한 inception module 개념을 창조
1 사이즈 이기 때문에 입력의 한 개 픽셀값에 대한 특성을 출력하는 필터라고 이해할 수 있음.
얼핏 들으면 쓸모 없어 보이지만 다음과 같은 장점이 있다.
가로, 세로가 아닌 깊이 단위의 패턴을 잡을 수 있음.
feature map 의 개수를 줄여서 parameter 개수를 줄이는 bottleneck layer 의 역할을 담당.
3x3 하나를 넣는것보다 3x3 + 1x1 레이어의 조합으로 더 복잡한 패턴도 담당할 수 있음.
(1*1 필터가 ReLU 같은 non-linear 한 역할을 해주기 때문인 것으로 이해함)
우리가 생각하는 정석적인 CNN 에 가장 가까운 모델
굳이 특징이라면 FC Layer 에서도 2개의 hidden layer 를 사용했다는 점.
간단한 아이디어로 엄청난 성능 향상을 이루어낸 역사적인 아키텍쳐
당시 hidden layer 를 많이 쌓는 것이 답이 아닌가 라는 방향으로 연구가 많이 진행됐지만 생각보다 그 효과가 크지 않아 어려움이 있었음.
이때 깊은 네트워크를 이렇게 쌓으니 되더라 라는 해법을 제시한 논문
input 이 layer 를 skip 하고 더해진다고 하여 붙여진 이름
min(H(x)-x)
가 학습의 목적이며 yhat - x = residual
이라고 부르는 것과 같이 이와 같은 모듈 구조를 Residual Block 이라고 지칭함.Inception Module 이 왜 성공적이었는가?
일반적인 CNN 에서 처럼 하나의 convolution filter 가 종합적인 특성을 파악하는 것이 아니라, 3x3 과 5x5 가 분리된 구조를 지니면서 Spatial (위치) correlation 과 Channel-wise correlation 을 분리해서 분석하기 때문이다.
그렇다면 Channel 과 Spatial 한 mapping 을 완전히 분리해보자.
이미지의 각 채널 (R, G, B) 를 분리하여 각각의 채널에 대해 convolution filter 를 적용하고 이를 합치게 됨. 각각의 채널에 대해 적용하기 때문에 input 과 output 의 channel 수가 동일하다.
Xception 에서는 이 모듈구조를 활용하는데 두 개의 단계로 나누어서 사용한다.
Separable convolution 을 사용할 때 입력 이미지에 바로 사용하게 되면 채널이 3개밖에 없으므로 최초에는 일반적인 conv layer 를 거쳐서 채널 수를 늘려주는 작업을 수행한다.
어느 아키텍쳐에나 적용할 수 있는 SE block 을 개발
채널의 중요한 정보만 짜내는(?) 연산 → 어떤 특성이 일반적으로 가장 크게 활성화 되는지를 학습하는 것
이 짜내는 연산의 방법으로 Global Average Pooling (GAP) 을 사용하여 채널마다의 평균값을 계산함.
GAP 으로 얻은 맵을 훨씬 작은 차원에 매핑하고 이를 다시 이전 feature map 의 개수만큼 calibration 값을 출력함.
이러한 과정을 통해 얻은 calibrated vector 를 feature map 과 곱하여 관련 있는 특성의 값은 높이고 관련 없는 특성의 값은 낮추는 효과를 얻을 수 있음.
물체의 위치를 찾는 것은 물체 주위의 bounding box 를 찾는 문제로 풀이하는데, 일반적으로는 물체 중심의 x, y 좌표와 박스의 너비, 높이를 예측하는 과정임.
이는 이미지 분류와 달리 숫자를 맞추는 문제로서, regression 을 수행하여 값을 예측함.
Bounding Box 에 대한 evaluation metric 으로 IoU (Intersection over Union) 이 흔하게 사용됨.
Box 의 클래스를 평가하기 위한 metric 으로는 mAP (mean Average Precision) 이 사용된다.
일반적으로는 다음과 같은 스텝으로 이루어진다.
앞선 방법과 달리 이미지를 여러번 나누어 보는 것이 아닌 한 번만 본다고 해서 You Only Look Once
물체가 있는 곳을 먼저 따는 Region Proposal Network 에 클래스를 분류하는 Classifier 를 붙인 2-stage 방식이 아니라 하나의 영역에서 한 번에 box와 class를 얻어내는 최초의 1-stage detector 라는데에 큰 의의가 있다.
Segmentation 종류에는 우리가 아는 Pixelwise Classification 의 형태만 있는건 아니다.
Fully Convolutional Network. 즉, 모든 레이어를 convolution 으로 대체하겠다!
Segmentation 에서 기존 네트워크 구조의 한계
Dense 층을 Conv 층으로 대체했을 때의 장점
Convolution 연산이 특징을 추출하여 최종적으로 압축된 feature map 을 뽑아내는 역할을 수행했다면, Upsampling 연산은 추출된 feature map 을 바탕으로 크기를 키워주는 역할을 한다.
Upsampling 의 방법으로 일반적인 interpolation 방법보다는 Transposed Convolutional Layer 를 사용한다.
위와 같은 upsampling 은 해상도 확장에 있어 좋은 역할을 수행하지만 작은 feature map 에서 키운것이기 때문에 디테일이 떨어질 수 있다.
이를 보완하기 위해 convolution 연산을 수행할 때 같은 단계에 있던 feature map 을 가져와서 더해주는 작업을 거친다.