[Deep Learning] CNN(Voncolutional Neural Network)
CNN(Voncolutional Neural Network)
RGB Image Convolution
- 위 그림에서 5x5x3필터를 이용해 image에 적용하면 28x28x1의 feature가 된다.
filter가 네개의 5x5x3의 형태라면 아래와 같은 결과가 된다.
Stack of Convolutions
Convolutional Neural Networks
- 고전 CNN은 convolution layer 와 pooling layer와 fully connected layer로 이루어 져 있다.
- convolution 과 pooling layer는 특징을 추출하는 성질이다.
- fully connected layer는 결과를 결정하는 것.
Stride
- 한픽셀을 찍고 다음 한 픽셀을 찍는 경우 ex) Stride = 1
- 한픽셀을 찍고 다음 두 픽셀을 찍는 경우 ex) Stride = 2
- 2차원 으로가면 2x2 stride 형식으로 사용한다.
Padding
- convolution 연산을 적용전 input 과 output 의 형태를 맞추기 위해 input 값의 변두리에 추가해주는 것.
적절한 Stride 와 Padding을 사용해주는 것도 중요하다.
Convolution Arithmetic
- 합성곱 계산방법
- 실제로 계산방법의 감을 익히는 것을 중요하다.
- 하나의 커널 x input channel x output channel
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을 두번 사용하는 것은 5x5를 한번 사용 하는 것보다 파라미터 숫자가 더 적게들며 두번 적용하여 특성 추출을 더 잘 할 수 있게 된다.
이후 이미지 연산에서는 7x7이상의 필터를 대부분 사용하지 않는다.
GoogLeNet
- Network in Network 방법을 사용
- ILSVRC 에서 2014년에 우승했다.
- Benefit of 1x1 Convolution
3x3 filter 를 사용하였을때
왼쪽 그림과 오른쪽 그림의 input output shape는 모두 같지만, 오른쪽의 경우 1x1 convolution 연산을 한번 추가로 하고 그 결과에 대해 다시 3x3 convolution연산을 하여 parameter의 수를 30퍼센트정도 줄일 수 있었다.
ResNet
- 깊은 레이어를 가진 네트워크는 훈련시키기 어렵다
- 오버피팅이 발생함(트레인 에러는 줄어는데 테스트 에러는 늘어남)
- 위를 극복하기 위해 identity map 을 추가하게 되었다.
- identity map을 nonlinear activation의 뒤에 추가 하고, 형태를 맞추기 위해 Projected shortcut 그림에서 볼 수 있듯이 1x1 Conv를 해주었다.
- 또 특이한 점은 convolution 다음에 Batch Normalization을 사용하였다.
- Bottleneck architecture
1x1 conv를 통해 궁극적으로 input과 output의 차원 채널을 맞출 수 있다.
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
- dense layer를 없애고 싶다. (대신 Conv를 넣음)
- input 과 output이 기존 dense layer를 사용하는 기본 conv와 같다.(파라미터 수도)
- 위 그림에서 파라미터 수를 비교해보자
- 왼쪽은 4X4X16X10 = 2560
- 오른쪽은 4X4X16X10 = 2560 (여기서 10은 모양을 맞춰주기위해 10겹을 의미)
- 이런것들을 convolutionalization 이라고 한다.
- 하지만 왜?
- 어떤 input size에서 가능하지만(independent 하다.), output으로 Heat map으로 뽑아 낼 수 있어 분류 모델을 만들 수 있다.(Semantic Segmentation)
Deconvolution (conv transpose)
- 직관적으로는 Conv의 역 연산이다.
- special demension을 키워준다.
- 엄밀히 말해 Conv를 역으로 하지만 데이터를 복원하기가 힘들다.(계산이 편함)
Detection
이전 처럼 이미지에서 어느 물체가 어디에 있는지 알고 싶다.(하지만 bounding box를 이용)
R-CNN
- 동작 순서
- input image를 선택하고
- 이미지 에서 2000개의 warped region을 뽑아낸다.
- warped region을 CNN이 돌아갈 수 있게 똑같은 크기로 만들고 CNN에 넣고 돌린다.(Conv feature map을 뽑기위해 AlexNet을 2000번 돌려야 함)
- 분류를 위해 linear SVMs를 이용한다.
문제점
- 2000개의 bounding box를 뽑으면 2000개를 모두 CNN을 통과시켜야 함
- 1개의 이미지에 2000번 CNN을 돌려야함
SPPNet (Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)
R-CNN의 문제를 해결해보자.
- 한 이미지에 CNN을 한번만 돌리자.
- Selective Search를 사용하여 2000개의 region proposals를 생성한다.
- 이미지 전체에 대하여 CNN에 통과시켜 feature map을 만들고
- 뽑힌 region proposals에 위치에 해당하는 Conv feature map의 sub tensor를 뽑아오자.
여전히 Bounding box를
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
Region Proposal Network + Fast R-CNN
Region Proposal Network
Pretrain된 CNN으로부터 획득한 feature map은 ZFNet 기준 256d, VGG 16기준 512d를 갖는다.
- 이 feature map에 k개의 anchor box를 통해 영역을 정하고 classification layer와 bbox regression을 거쳐 object의 존재 여부를 확인한다.
- 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에 대한 더 일반화된 특징을 학습함
- 동작 방법
- 이미지를 448 x 448로 변경 후 S X S grid로 나눔
- 각 cell에 대한 C개의 클래스에 대한 예측값 생성(CNN 모 델 1번 통과), B개의 bounding box 예측
- 위 결과를 종합해 최종 detection map 생성
- 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 비교
Comments