Week2. CNN
fully connected layer로 이미지를 다룰 경우, color 이미지는 3차원인데 이를 fully connected layer에
넣게 된다면 3차원을 1차원으로 변형시켜야하는데, 이럴 경우 이미지가 갖고 있는 spatial information을 잃게 된다.
이미지 공간 정보를 유지한 채 학습하기 위하여 Convolution 연산을 적용하게 되었다.
이미지 위 초록색 부분이 N x N 크기의 이미지 필터인데, 이미지 위에서 sliding을 하면서 해당 부분에 대하여 convolution 연산을 수행시킨다.
convolution 필터 갯수가 파라메터가 되는데 Convolution layer 파라메터 수는 input channel x width x height x output channel 의 수가 된다. 아래의 사진 경우에는 3 * 5 * 5 * 10이 된다. convolution 연산의 파라메터 경우에는 그러면 5 * 5 * 3(input channel)이 된다.
- Receptive Field
컨볼루션 신경망 내 레이어의 필터 크기로 정의되는데, 원래 사용되는 의미로는 입력 데이터에서 뉴런이나 단위가 노출되는 정의된 공간 영역을 일컫는다고 한다.
- Dilated Convolution
필터 내부에 영역을 강제로 넓혀서 receptive field를 넓히는 방법으로써, 이로써 이미지의 전체적인 특징을 더 잘 잡아낼 수 있다고 한다. 이의 특징은 pooling을 해도 정보 손실이 적다는 것이다.
풀링 연산은 이미지에서 중요한 부분을 추출하면서 resolution을 줄이는데 사용하는데, 이의 목적은 이미지가 큰 경우에는 그만큼 파라메터 및 연산 수가 많아지게 되는데, 풀링을 통해서 이미지의 중요 정보는 유지하며 사이즈를 줄이면 그 수도 줄일 수 있기 때문이다.
VGG Network
VGG의 연구 등장 배경은 네트워크가 깊어지고 wide 해질수록 성능은 좋지만 학습에 어렵다라는 것에서 연장하여, 네트워크의 깊이가 어떤 영향을 주는지를 알고 싶었다고 한다. 그래서 filter size는 3x3으로 정함에 따라 최소한의 receptive field를 유지함으로써 이미지 학습에서 네트워크 깊이만을 중점적으로 볼 수 있게 되었다.
그래서 본문서는 위의 6가지 구조로 실험을 하고 마지막 분류 단에는 fc layer 3개를 사용했다.
vgg의 또 다른 특징은 conv layer를 stacking 함으로써 3x3 filter size임에도 불구하고 더 큰 receptive field size를 커버할 수 있다고 한다. 3x3 filter를 2개 쌓으면 5x5의 효과를 낼 수 있다. 이를 통해서 얻는 효과는 conv 사이에 non linearity를 적용함에 따라 하나의 레이어보다 비선형성이 더 증가하게 된다는 것이다.
그러나 FC layer의 파라메터 수가 역시나 엄청 큰 값을 가진다.
ResNet
기존의 네트워크가 순차적으로 레이어를 통과하며 학습하는 구조를 가지고 있었고 네트워크가 깊어질수록 학습이 잘 되지 않은 문제를 가지고 있었는데, Resnet은 shortconnection을 추가함에 따라 H(x) = F(x) + x의 형태를 가지게 되는데, 이를 이용해서 역전파를 하게 되면, 그래도 최소한 1의 값 이상을 가지기에 학습이 되지않는 현상을 줄일 수가 있다고 한다. 원래의 식은 F(x) = H(x) - x 가 되는데, 이를 최소화시키는 것은 출력과 입력 차이를 줄인다는 의미와 같다. F(x)가 0이 된다면 여기서 최적의 해가 되는데, 결과적으로 H(x) = x가 된다. 이렇게 되면 H(x)를 학습시키지 않고 x를 학습해도 되기에 더 효율적이라고 한다.
resnet50부터는 block이 (1x1, 3x3, 1x1) conv 순으로 되어 잇는데, dimension을 줄였다가 다시 확장시키는 구조로써
3x3 conv 2개 연산하는 것보다 연산량이 적다고 한다.
Object Localization, Object Detection
이미지 분류 task가 이미지에서 객체의 유형 및 클래스를 예측하는 것이라면 Localization은 객체의 유무를 파악하고 존재한다면 그에 대한 bounding box를 통해 위치를 나타내게 된다.
이미지 분류와 같이 bounding box를 regression까지 해야하게 되는 네트워크 구조를 가지게 되는데, feature map을 이용해서 regression layer의 input으로 넣게 되고 학습하면서 bounding box 값을 예측하게 된다.
Object detection은 Localization의 연장으로, 여러개의 object들에 대한 위치를 bounding box를 나타냄으로써 찾는 것이다. 이 역시 bounding box regression, classification 부분을 가지고 있지만, multi object를 찾아야 된다는 점에서 더 어려운 task이다.
이미지에서 해당 객체가 어디에 있는지 찾는 것이 우선인데, 초창기에는 sliding window 기법이 사용되었다고 한다.
해당 기법을 통해서 이미지 전반적으로 스캔을 할 수 있는 방법이나, 연산 시간이 오래 걸리고 검출 성능이 좋지는 않다고 한다. 그래서 다음으로 등장한 개념이 Region proposal이다. 이것의 concept은 object가 있을만한 영역을 찾는 것이다. 아래의 강아지 사진을 보면 여러개의 후보 bounding box를 표시가 되어있는데, 해당 객체를 나타내는 부분까지 찾을때까지 훈련을 하면서 적합한 bounding box를 찾아내게 된다. 비슷한 region이라는 것을 판단하기 위해서는 이미지의 color, size, shape 등 representation 들에 대해 유사한 특징을 갖는 부분은 하나의 region으로 생각하게 된다.
후보 bounding box들을 어떻게 제거할지는 NMS(Non-max suppressoin) 알고리즘을 이용한다.
클래스 별 검출된 bounding box별로 confidence score 특정 값 이하의 bounding box는 먼저 제거를 하고, max value를 가지는 bounding box들을 가지고 겹치는 다른 box와의 iou가 특정 threshold 이상인 box는 제거하게 된다.
즉, confidence score가 높고, iou threshold가 낮을수록 많은 box들이 제거가 된다.
Detection 에서 딥러닝 기반 알고리즘으로 초창기에 나온 것이 RCNN 구조이다.
input image에 대해서 약 2000개의 region proposal을 추출해서 각 부분에 대해서 feature map을 추출하여 classification과 regression을 하게 되는 구조인데, 이는 모든 부분에 대해서 conv 연산을 해야하기 때문에 train 및 inference 시간이 오래 걸리게 된다.
그래서 이미지 하나에 대해서 feature map을 추출하여 region proposal network를 따로 구현해서 feature map과 proposal 값을 roi pooing하고 fc layer를 거치는 과정을 가지면서 end to end의 구조를 가지게 된다.
그러나 RCNN계열 디텍션은 2stage model로써 실행 시간이 오래 걸리게 된다. 그래서 이를 개선한 1-state의 yolo모델이 등장하게 된다.
Yolo는 입력 이미지를 S x S의 그리드로 나누고, 각 그리드 셀이 하나의 object에 대해 detection을 수행하게 된다. 하나의 셀이 2개의 bbox를 기반으로 객체 box를 예측하게 된다. inference output에 대해서는 S x S x (B x 5 + C)를 갖게 되는데 각 셀마다 bounding box 2개인데 하나의 box마다 x, y, w, h, confidence score 값을 가지기에 B x 5를 나타내게 된다.
Segmentation
Segmentation의 정의는 모든 픽셀의 레이블을 예측하는 것이다.
Segmentation은 각 객체에 대해서 masking을 하여 segemt화 하는 것인데, pixel wise classification으로도 볼 수 있다고 한다. 동일 픽셀 값을 가지는 것끼리 표시를 하게 되면 하나의 class로 보일 수 있게 된다.
사진의 모든 픽셀에 대해서 class를 분류하려면 각 픽셀 별로 나누어서 예측을 하는 dense prediction을 한다.
각 클래스에 대해 segmentation map을 만들어서 각 채널을 통해 하나의 output을 만들게 된다.
세그멘태이션은 위치정보를 잃으면 안되기 때문에 이미지 분류에서처럼 마지막에 FC layer를 사용하지 않고 encoder - decoder 구조를 통해서 최대한 정보 손실을 적게하는 구조를 사용하게 된다.