9 minute read

CNN(Voncolutional Neural Network)

간단히 CNN 알기

RGB Image Convolution

rgb

  • 위 그림에서 5x5x3필터를 이용해 image에 적용하면 28x28x1의 feature가 된다.

filter가 네개의 5x5x3의 형태라면 아래와 같은 결과가 된다.

rgb2

Stack of Convolutions

stack

Convolutional Neural Networks

  • 고전 CNN은 convolution layer 와 pooling layer와 fully connected layer로 이루어 져 있다.
  • convolution 과 pooling layer는 특징을 추출하는 성질이다.
  • fully connected layer는 결과를 결정하는 것.

stack

Stride

  • 한픽셀을 찍고 다음 한 픽셀을 찍는 경우 ex) Stride = 1
  • 한픽셀을 찍고 다음 두 픽셀을 찍는 경우 ex) Stride = 2
  • 2차원 으로가면 2x2 stride 형식으로 사용한다.

stride

Padding

  • convolution 연산을 적용전 input 과 output 의 형태를 맞추기 위해 input 값의 변두리에 추가해주는 것.

padding

적절한 Stride 와 Padding을 사용해주는 것도 중요하다.

Convolution Arithmetic

  • 합성곱 계산방법
  • 실제로 계산방법의 감을 익히는 것을 중요하다.
  • 하나의 커널 x input channel x output channel

arithmetic

1x1 Convolution

  • 왜할까?
    • 차원을 축소 시키기 위해
    • layer를 깊게 쌓으면서 파라미터 숫자를 줄일 수 있다.

Modern CNN - 1x1 Convolution

중요한 현대 CNN에 대하여 알아보자(대회에서 우승했던)

ILSVRC

  • ImageNet Large-Scale Visual recognition Challenge
    • 백만개 이상의 이미지, 1000개의 다른 카테고리로 이미지를 인지하는 경기

AlexNet

  • 5개의 conv layer와 3개의 dense layer를 사용
  • ReLU activation을 사용하여 잘됬다.(vanishing gradient problem를 극복했다.)
  • 2개의 GPU, Data argumentation, Dropout 을 사용.

VGGNet

  • 3X3 filter만 사용하였다.
  • why 3X3 convolution?

3x3

위 그림처럼 3x3을 두번 사용하는 것은 5x5를 한번 사용 하는 것보다 파라미터 숫자가 더 적게들며 두번 적용하여 특성 추출을 더 잘 할 수 있게 된다.
이후 이미지 연산에서는 7x7이상의 필터를 대부분 사용하지 않는다.

GoogLeNet

  • Network in Network 방법을 사용
  • ILSVRC 에서 2014년에 우승했다.
  • Benefit of 1x1 Convolution

3x3

3x3 filter 를 사용하였을때
왼쪽 그림과 오른쪽 그림의 input output shape는 모두 같지만, 오른쪽의 경우 1x1 convolution 연산을 한번 추가로 하고 그 결과에 대해 다시 3x3 convolution연산을 하여 parameter의 수를 30퍼센트정도 줄일 수 있었다.

ResNet

  • 깊은 레이어를 가진 네트워크는 훈련시키기 어렵다
    • 오버피팅이 발생함(트레인 에러는 줄어는데 테스트 에러는 늘어남)
  • 위를 극복하기 위해 identity map 을 추가하게 되었다.

ResNet

  • identity map을 nonlinear activation의 뒤에 추가 하고, 형태를 맞추기 위해 Projected shortcut 그림에서 볼 수 있듯이 1x1 Conv를 해주었다.
  • 또 특이한 점은 convolution 다음에 Batch Normalization을 사용하였다.
  • Bottleneck architecture

3x3

1x1 conv를 통해 궁극적으로 input과 output의 차원 채널을 맞출 수 있다.

DenseNet

DenseNet

  • ResNet과는 다르게 더해주는 대신 concatenation 해준다.
  • 하지만 concatenation을 계속 해주면 x가 엄청 커지고 파라미터의 수 또한 엄청 커진다.
  • 1x1 conv를 통해서 중간에 한번씩 채널을 줄여준다.
  • Dense Block을 통해 feature map을 계속 concatenation해주어 키운다음에 마지막에 Transition Block 을 통해 줄여준다.
  • Transition Block
    • batchNorm -> 1x1 Conv -> 2x2 AvgPooling
    • 차원 축소

Key notes

  • VGG 에서 3x3을 쓰는 것이 좋은 것을 배움.
  • GoogLeNet 에서 1x1 convolution의 장점을 배웠고
  • ResNet 에서 identity map을 통해 깊은 레이어 가 더 좋은 결과를 내는 것을 알았
  • DenseNet은 ResNet을 모방하여 Concatenation을 통해 어떻게 처리하여 성능을 높힌다.

Computer Vision에서 CNN을 적용해보자.

Semantic Segmentation

  • 픽셀들이 어떤 것들인지 알고 싶다.
  • ex) 자율주행에서 주변의 환경을 파악할 때. 라이다 없이 이미지만 가지고 이미지 분석.

Fuly Convolutional Network

fully conv

  • dense layer를 없애고 싶다. (대신 Conv를 넣음)
  • input 과 output이 기존 dense layer를 사용하는 기본 conv와 같다.(파라미터 수도)

fully conv

  • 위 그림에서 파라미터 수를 비교해보자
  • 왼쪽은 4X4X16X10 = 2560
  • 오른쪽은 4X4X16X10 = 2560 (여기서 10은 모양을 맞춰주기위해 10겹을 의미)
  • 이런것들을 convolutionalization 이라고 한다.
  • 하지만 왜?
  • 어떤 input size에서 가능하지만(independent 하다.), output으로 Heat map으로 뽑아 낼 수 있어 분류 모델을 만들 수 있다.(Semantic Segmentation)

Deconvolution (conv transpose)

de conv

  • 직관적으로는 Conv의 역 연산이다.
  • special demension을 키워준다.
  • 엄밀히 말해 Conv를 역으로 하지만 데이터를 복원하기가 힘들다.(계산이 편함)

Detection

이전 처럼 이미지에서 어느 물체가 어디에 있는지 알고 싶다.(하지만 bounding box를 이용)

R-CNN

R-CNN

  • 동작 순서
    1. input image를 선택하고
    2. 이미지 에서 2000개의 warped region을 뽑아낸다.
    3. warped region을 CNN이 돌아갈 수 있게 똑같은 크기로 만들고 CNN에 넣고 돌린다.(Conv feature map을 뽑기위해 AlexNet을 2000번 돌려야 함)
    4. 분류를 위해 linear SVMs를 이용한다.

문제점

  • 2000개의 bounding box를 뽑으면 2000개를 모두 CNN을 통과시켜야 함
  • 1개의 이미지에 2000번 CNN을 돌려야함

SPPNet (Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)

SPPNet R-CNN의 문제를 해결해보자.

  • 한 이미지에 CNN을 한번만 돌리자.
  • Selective Search를 사용하여 2000개의 region proposals를 생성한다.
  • 이미지 전체에 대하여 CNN에 통과시켜 feature map을 만들고
  • 뽑힌 region proposals에 위치에 해당하는 Conv feature map의 sub tensor를 뽑아오자.

여전히 Bounding box를

Fast R-CNN

Fast R-CNN 다음 두가지를 통해 R-CNN의 문제점을 극복했다.

  • Rol pooling
  • CNN 특징 추출 부터 분류, bouding box regression 까지 하나의 모델에서 학습.

Fast R-CNN 프로세스

  • R-CNN에서와 마찬가지로 Selective Search를 통해 RoI를 찾는다.
  • 전체 이미지를 CNN에 통과시켜 feature map을 추출한다.
  • Selective Search로 찾았었던 RoI를 feature map크기에 맞춰서 projection시킨다.
  • projection시킨 RoI에 대해 RoI Pooling을 진행하여 고정된 크기의 feature vector를 얻는다.
  • feature vector는 FC layer를 통과한 뒤, 구 브랜치로 나뉘게 된다.
  • 하나는 softmax를 통과하여 RoI에 대해 object classification을 한다.
  • bounding box regression을 통해 selective search로 찾은 box의 위치를 조정한다.(label 도 찾는다.)

Faster R-CNN

Fast R-CNN

Region Proposal Network + Fast R-CNN

Region Proposal Network

Pretrain된 CNN으로부터 획득한 feature map은 ZFNet 기준 256d, VGG 16기준 512d를 갖는다. anchor boxes

  • 이 feature map에 k개의 anchor box를 통해 영역을 정하고 classification layer와 bbox regression을 거쳐 object의 존재 여부를 확인한다.

anchor boxes2

  • anchor box는 3개의 다른 지역 사이즈와 3개의 비율을 포함한 9개의 박스 사이즈와, 4개의 bounding box 회귀 파라미터(박스 크기 조정), 2개의 box 분류(박스가 필요한지 안한지를 포함한다.)
  • 총 채널 수는 54개 의 Conv feature map이 된다.

YOLO

  • “You Only Look Once” -> CNN 한번으로 map 생성
  • 이미지 내의 bounding box와 class probability를 single regression problem으로 보아, 이미지를 한번 보는 것으로 object의 종류와 위치 추측
  • 장점
    • 간단한 처리과정으로 속도가 매우 빠름 (real-time)
    • Background error(False-Positive)가 낮음
    • Object에 대한 더 일반화된 특징을 학습함

yolo

  • 동작 방법
    1. 이미지를 448 x 448로 변경 후 S X S grid로 나눔
    2. 각 cell에 대한 C개의 클래스에 대한 예측값 생성(CNN 모 델 1번 통과), B개의 bounding box 예측
    3. 위 결과를 종합해 최종 detection map 생성

yolo2

  • bounding box B. 어떤 class인지 예측하는데 필요한 C
  • total tensor with SxSx(B*5+C) size 가 된다. (B * 5 : bounding box with offset(x,y,w,h)와 confidence)

참고자료

SPPNet, Fast R-CNN, Faster R-CNN 비교

YOLO

Comments