일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- CS231n
- TCP
- yolo
- computervision
- darknet
- SVM margin
- pytorch c++
- SVM hard margin
- Faster R-CNN
- EfficientNet
- yolov3
- cs231n lecture5
- Computer Vision
- libtorch
- pytorch project
- cnn 역사
- CNN
- Object Detection
- fast r-cnn
- support vector machine 리뷰
- pytorch
- svdd
- DeepLearning
- 논문분석
- 서포트벡터머신이란
- self-supervision
- SVM 이란
- 데이터 전처리
- Deep Learning
- RCNN
- Today
- Total
아롱이 탐험대
VGG NET: Very Deep Convolution Networks For Large-Scale Image Recognition 본문
VGG NET: Very Deep Convolution Networks For Large-Scale Image Recognition
ys_cs17 2020. 3. 13. 15:14Very Deep Convolution Networks For Large-Scale Image Recognition (VGG16)
-Karen Simonyan, Andrew Zisserman-
1. Introduction
Faster-RCNN을 분석하기 앞서 여기서 쓰이는 네트워크 모델인 VGG16을 먼저 공부하고 분석할 필요가 있어 VGG NET을 먼저 분석하겠다. 우선 해당 네트워크는 2014년 image net image recognition contest에서 google net에 밀려 2위를 했던 네트워크이다. (정확히는 VGG19이다.) google net의 네트워크 구조는 매우 복잡한 방면 VGG16은 사용하기 간단하고, 다른 네트워크에 변형하기도 쉬우며 성능적인 면에서도 나쁘지 않아 다른 논문에서도 많이 reference 된 논문이다. 우선 해당 논문은 network에 대해서만 연구한 것이 아닌 네트워크의 깊이가 성능과 시간에 대해 어떤 영향을 미치는지에 대해서도 연구를 진행하였다.
2. Network
우선 전체 네트워크의 구조를 보기 전 알아야 되는 사실이 있다. 바로 이 연구에서는 모든 kernel의 size를 3*3으로 고정하여 진행하였다. 그 이유는 바로 효율성 차이이다.
7*7의 image를 convolution후 3*3 size로 만든다고 생각을 해보자. 만약 7*7 kernel을 사용하게 된다면 총 weight의 합은 49개가 된다. 하지만 3*3 kernel을 가지고 3번의 convolution을 진행하게 된다면 총 9+9+9=27개의 weight로 학습속도가 확실히 빨라진다. 또한 층이 더욱 deep해지면서 non linear성을 더욱 증가시키기 때문에 학습하는데 효율이 더욱 올라가게 된다.
Input: 224*224*3 RGB image
Stage 1 conv) 64개의 3*3*3 size의 kernel로 convolution한다. 이때 zero padding은 1, stride도 1로 설정하여 224*224*64 size가 나오고 이를 ReLu로 activation화 해준다. 이후의 conv layer의 zero padding과 stride, activation function은 모두 같다.
Stage 2 conv) 64개의 3*3*64의 kernel을 가지고 convolution 후 224*224*64 size의 activation map을 2*2 max pooling을 stride 2로 적용해 112*112*64의 feature map을 얻는다.
Stage 3 conv) 128개의 3*3*128의 kernel을 가지고 convolution을 하여 112*112*128을 얻는다.
Stage 4 conv) 똑같이 해주고 pooling을 진행한다.
Stage 5 conv) 256개의 3*3*128 kerenl로 convolution한 후 256장의 56*56*256을 얻는다.
Stage 6 conv) 똑같이 해준다.
Stage 7 conv) 똑같이 해준 후 pooling을 진행한다. 28*28*256 feature map을 얻는다.
Stage 8 conv) 512개의 3*3*512 kernel로 convolution후 28*28*512를 얻는다.
Stage 9 conv) 같게 해준다.
Stage 10 conv) 같게 진행 후 pooling을 진행하면 14*14*512를 얻는다.
Stage 11 conv) stage 8과 동일하게 진행 후 14*14*512의 feature map을 얻는다.
Stage 12 conv) 같게 진행한다.
Stage 13 conv)같게 진행 후 pooling을 하면 7*7*512를 얻는다.
Stage 14 fc1) flatten 후 25088개의 뉴런을 가지고 fc1의 4096 뉴런과 fully connect한다. 이때 drop out이 진행된다.
Stage 15 fc2) 4096개의 뉴런을 fc2의 4096 뉴런과 fc한다. Drop out이 적용된다.
Stage 16 fc3) fc2의 결과인 4096개의 뉴런과 1000개의 뉴런을 fc하고 softmax 함수로 loss를 출력한다.
Output: 1000의 label로 분류된 loss
3. result
위에서 말했던 바와 같이 해당 VGG16은 매우 단순하고 성능도 괜찮은 네트워크라 변형도 많이 되여 쓰인다. 하지만 3번의 fc와 pooling과정을 통해 parameter의 개수가 너무 많아지고 이는 gradient vanishing과 연결이 될 수 있다. 하지만 이 net는 깊이가 깊어질수록 성능이 좋아질 수 있다는 점을 증명한 점에서 추후 많은 net들의 발전에 기어하였다.
4. reference
VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION (paper)
https://datascienceschool.net/view-notebook/47c57f9446224af08f13e1f3b00a774e/
'study > paper reviews' 카테고리의 다른 글
YOLO: You Only Look Once: Unified, Real-Time Object Detection (0) | 2020.03.18 |
---|---|
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (0) | 2020.03.16 |
Fast R-CNN (0) | 2020.03.13 |
R-CNN: Rich feature hierarchies for accurate object detection and semantic segmentation (0) | 2020.03.12 |
ALEX Net: ImageNet Classification with Deep Convolutional Neural Network (0) | 2020.03.11 |