📑Semantic Segmentation

Semantic Segmentation 은 인공지능이 이미지에 있는 객체를 pixel 단위로 분류하는것이다

  • pixel level classification
  • Dense Predictoin

Fully Convolutional Networks

FCN 구조

figure_1.jpg

FCN(Fully Convolutional Networks) 는 CNN을 변형시킨 형태로 CNN 의 뒷단에 있는 dense layer 를 없애고자 dense layer 대신 convolution layer를 썼다
이를 convolutionalization 이라고 한다 parameter 의 갯수는 변하지 않는다

Papers

link

Key Ideas

Convolutionalization

기존에는 입력의 모든 차원을 출력의 모든 차원과 연결하도록 가중치를 훈련 시켜 입력을 크게 만들면더 많은 가중치가 필요했다
출력의 모든 차원이 연결되기 때문에 고정된 입력 크기를 가질 수 밖에 없었고 이미지의 공간적 정보가 소실되었다
때문에 convolutional layer는 이미지를 flattering 하지 않고 각 채널의 이미지 index마다 flattering 하여 얻는 벡터를 fully connected 하였다(1x1 convolution과 동일)

image.png

Deconvoultion

Unsampling 이라고도 불리며 convolution 역연산을 수행한다
어떤 image 에도 conv 연산을 수행하면 크기가 작아지게 되기 때문에 다시 늘려줘야 하기 때문이다

image.png

Object Detection

이미지 내에서 관심이 있는 객체의 위치를 bounding box를 그려 localization 하고 다수의 bouding box를 다양한 object 로 classification 한다

R-CNN

R-CNN 구조

image.png

Multi stage Detector 로 이미지 안에서 region proposal 을 뽑는다.
이렇게 뽑힌 region 들은 크기가 각각 다른데 이들의 크기를 맞춰(warped region) CNN 과정을 거친다. 그 후 region 에 대한 classification 과정을 거치게 된다

Key Ideas

Regoin Proposal

object 의 위치를 찾는 단계.
Selective Search 를 사용해 약 2000개의 후보 영역을 추출한다. 이후 크기를 맞춰주기 위해 image 를 warping 한다.

  1. 초기 후보영역을 다양한 크기와 비율로 생성한다
  2. 많은 초기 후보영역들을 유사도를 활용하야 greedy 하게 비슷한 영역들을 병합한다
  3. 하나의 영역이 만들어 질 때까지 2번의 과정을 반복한다

CNN

2000개의 warped image 를 각각 CNN 에 넣어 feature 를 추출하는 단게
각각의 CNN은 4096 dimensional feature vector 를 추출한다

SVM

추출된 4096 dimensional feature vector 를 활용하여 object를 분류하는 단계로 SVM 을 사용한다
softmax 대신 SVM 을 사용하는 이유는 CNN fine tuning 을 위한 학습데이터가 많지 않아서 softmax 를 적용하면 오히려 성능이 낮아져 SVM 을 사용했다고 한다

R-CNN Weakness

  1. 시간이 오래 걸린다

    2000개의 영역들을 각각 모델에 넣는다

  2. 복잡하다

    CNN,SVM 등 여러가지 model 을 필요로 하여 복잡하다

  3. End-to-End learning 이 불가능하다

SPPNet(Spatial Pyramid Pooling Network)

R-CNN 구조

image.png

Key Ideas

Multi stage Detector

3가지의 pipeline(CNN,SVM,BBox Regressor) 으로 이루어져 있다

Reduce CNN Operation

SPPNet은 입력 이미지에 대해 CNN 연산을 먼저 적용한 후 feature map 에 기반한 region proposal 과정을 거치기 때문에 1번의 CNN 과정을 거친다

Spatial Pyramid Pooling

ROI feature size 에 따라 kernel size 와 stride 만 설정하면 다양한 resolution을 설정할 수 있게 된다. 그래서 warping 작업이 필요가 없게 되고, 다양한 resolution 가지기 때문에 Spatial Pyramid Pooling 이라고 한다.
SPPNet 은 1x1,2x2,4x4 spatial bin을 사용하여 얻은 spatial bin들을 flattening 한fixed-length feature vector 를 FC layer에 넘겨준다.

Fast R-CNN

Fast R-CNN 구조

image.png

Key Ideas

ROI Pooling Layer

SPPNet 은 1x1,2x2,4x4 spatial bin 을 사용했다. 이것의 문제점은 3가지 resolution 으로 학습하기 때문에 하나의 object에 대해 지나치게 학습이 되어 over-fitting 문제가 발생할 수 있다.
그러나 Fast R-CNN에서는 7x7 single level spatial bin을 사용하여, over-fitting 문제를 피했으며 이를 ROI Pooling Layer 라고 한다.

Softmax Classifier

SVM classifier 가 아닌 Softmax classifier 를 사용했다

Multi-task loss

이건 아직 배우지 않았으니 나중에 다시 찾아보자

Faster R-CNN

Faster R-CNN 구조

image.png

Key Ideas

region proposal 과정 또한 학습을 시키는 RPN(Region PropoSal Network)

RPN(Region Proposal Network)

image.png

CNN 의 출력 feature map위에 NxN window 를 입력으로 받아 해당영역에 object 가 존재하는지/존재하지 않는지 2개의 class 를 분류하는 classification layer(cls layer)BBox regression 을 진행하여 4개의 class(x,y,w,h)를 결정하는 regression layer(reg layer) 가 존재한다.
하지만 이렇게 단순하게 RPN을 설계할경우, 댜앙한 크기와 비율의 object를 수용하기에는 고정된 NxN window는 한계가 있다.
그래서 pre-defined scale/ratio 를 바탕으로 reference box k 개를 정해 놓고 각 sliding window의 위치마다 k개의 box를 출력하도록 설계하였고, 이것을 anchor 라고 명칭하였다. 여기에선 k=9 인 refernce boxes를 다음과 같이 정의했다.

YOLO

YOLO 구조

image.png

Key Ideas

Faster R-CNN에서는 localization 과 claasification 이 따로 나뉜 구조인 반면에, YOLO-v1동시에 localization 과 classfication을 진행하게 된다.

image.png

각각의 cell은 localization 을 위해 2개의 BBox(ROI)를 생성하고 BBOX의 위치정보(x,y,w,h) 와 confidence score 정보(BBox에 object가 포함되어 있을 신뢰도) 를 가지고 있다.
동시에 각각의 cell은 classification 을 위해 어떤 class 에 속할지에 대한P(class∣object)를 가지고 있다. 따라서 7x7 feature map 은 각각의 cell 이 2개의 BBox 를 생성하고 이에 대한 5개의 정보(x,y,w,h,confidence score) 를 가지고 있고, classfication을 위해 20개의 class(Pascal VOC Challenge 는 20개의 class에 대한 detection) 정보를 가지고 있어 7x7x(2x5+20)=7x7x30 인 output을 얻게 된다.