본문 바로가기
Network

[DNN] VGG구현을 위한 리뷰(ICLR 2015)

by pulluper 2022. 7. 27.
반응형

안녕하세요 "pulluper" 입니다😀

오늘은 딥 뉴럴 네트워크의 레이어의 깊이(depth)를 많이 쌓아서 Imagenet에서 좋은 성능을 달성한 VGG 네트워크에 대하여 알아보겠습니다. 논문은 아래링크에서 보실 수 있습니다. 

https://arxiv.org/pdf/1409.1556.pdf

논문은 간단한 supervised image classification task 이기 때문에 구현을 위해 Dataset, Model, Loss, Train, Test(evaluation) 중심으로 논문을 훑어보겠습니다. 


Abstract

 

Abstract 부분을 읽으면 저자들의 연구 방향과 제안하는 contribution(학계의 기여)과 성능평가등이 간략하게 나와있습니다.  이 부분을 읽고 '이 논문은 어떤것이야기를 하겠구나' 라는 것을 파악하는게 중요한것 같습니다. 

Abstract

논문에서는 일단 network depth 와 accuracy 간의 관계가 있느냐를 말하고 싶은것 같네요. 즉, '컨볼루션을 깊게 쌓으면 성능이 좋아질까?' 라는 물음에 대답이 되는 논문이네요! 그리고 16부터 19층까지 쌓았으며, ILSVRC 2014 에서 좋은 SOTA를 달성했다 합니다. 그리고 고맙게도 네트워크를 공개하여 다른 연구에 도움을 주도록 하였습니다. 이 논문이 발표된 이후 아주 많은 다양한 분야에서 VGG 네트워크가 사용이 되었습니다. 


Dataset

 

자 classification 데이터셋은 무엇을 사용할까요? MNIST, CIFAR, SVHN 의 간단한 데이터셋과, large scale 의 Imagenet data 를 이용합니다. 이미지넷의 대한 내용은 다음을 참고 바랍니다. [link]

 

ILSVRC(Imagenet classification)validation set torchvision 으로 성능평가하기

안녕하세요! "pulluper" 입니다. 이번 포스팅에서 다룰 주제는 ILSVRC(Imagenet) 에 대한 설명과 torchvision library 를 통한 Imagenet validation set 성능평가 입니다. Detection 혹은 Network 관련 논문을 4개..

csm-kr.tistory.com

또한 눈여겨봐야 할 것이 data augmentation 입니다. 같은 dataset 이라 할지라도, 어떻게 augmentation 을 하느냐에 따라서 성능이 달라지기 때문에 여기서는 무엇을 사용했는지 알아보겠습니다. 

data augmentation of training image

윗 문단에서 이미지를 다시 크기를 rescaling 한 후에 randomly 하게 224 x 224 size 로 crop 을 진행 한 이후에, random horizontal filpping 과 random RGB shift 를 alexnet 에서 한것과 같이 진행을 합니다. 

위에 보이는 PCANoisePIL() 은 alexnet 에서 사용한 random RGB colour shift 입니다. 그리고 test 일 때 적용하는 augmentation 은 다음과 같습니다. 

Flip, Crop, RGB shift 등이 사용되었습니다. 


Model 

 

VGG의 model 은 convolution 을 잘 쌓아서 만들었습니다. 다음 표를 보시겠습니다. 

 

vgg models

모두 3x3 convolution 으로 간단하게 이루어져 있으면서,11~19 까지의 모델을 사용하였습니다. 마지막에는 FC layer 를 사용하여 classification head 로 가도록 하였습니다. 

vgg16 structure

https://velog.io/@choonsik_mom/VGG16%EC%9C%BC%EB%A1%9C-%EC%A0%84%EC%9D%B4%ED%95%99%EC%8A%B5-%EA%B5%AC%ED%98%84-with-pytorch

 

VGG16으로 전이학습 구현 [with pytorch]

VGG16으로 전이학습 구현

velog.io


Loss 

 

다른 image classification 과 같이 Cross Entropy 입니다.

cross entropy

https://stackoverflow.com/questions/41990250/what-is-cross-entropy

 

What is cross-entropy?

I know that there are a lot of explanations of what cross-entropy is, but I'm still confused. Is it only a method to describe the loss function? Can we use gradient descent algorithm to find the mi...

stackoverflow.com

pytorch 에서는 다음과 같이 간단하게 구현 가능합니다. 

 

import torch.nn as nn
loss = nn.CrossEntropyLoss()

 


Train

 

다음은 training 환경입니다. 

  • init learning rate: 0.01
  • batch size: 256
  • momentum: 0.9
  • weight decay: 0.0005
  • epoch: 74(370k)
  • learning rate decay: validation accuracy 가 증가하지 않을 때, 10 으로 나눠준다. (3번 - plateau) 
  • init: gaussian (0, 0.01) 
  • drop out : 0.5

Test

 

Test 도 top-1, top-5 error 로 평가를 진행했습니다. 

다음 포스팅을 참고하시면 좋을것 같습니다. 

https://csm-kr.tistory.com/6?category=1188059 

 

ILSVRC(Imagenet classification)validation set torchvision 으로 성능평가하기

안녕하세요! "pulluper" 입니다. 이번 포스팅에서 다룰 주제는 ILSVRC(Imagenet) 에 대한 설명과 torchvision library 를 통한 Imagenet validation set 성능평가 입니다. Detection 혹은 Network 관련 논문을 4개..

csm-kr.tistory.com

 

결과를 보면, 다음 표와 같습니다. 

performance of vgg

256 x 256 image기준, top-1 accuracy 는 다음과 같습니다. 

A (vgg11) : 70.4, B (vgg13) : 71.3, C (vgg16) : 71.9, D (vgg16) : 73.0. E (vgg19) : 72.7

torchvision 기준으로는 아래와 같은 성능을 보였습니다. 당시의 sota를 달성하였습니다. 

 

torchvision vgg performance

 

https://pytorch.org/vision/stable/models.html#classification

 

Models and pre-trained weights — Torchvision main documentation

Shortcuts

pytorch.org

물론 pytorch torchvision 을 이용하면 다음과 같이 간단하게 VGG를 사용할 수 있습니다. 

 

from torchvision.models import vgg16

model = vgg16()

vgg 는 이후에 많은 task의 backbone 으로 오랫동안 사용되고 있습니다. 깊은 모델을 쌓아서 좋은 성능을 유지한 vgg 에 대한 포스팅이었습니다. 감사합니다 질문과 토론은 항상 환영합니다. 👍😎🤩

반응형

댓글