VGG넷은 이전의 논문과 비교했을 때 굉장히 깊은 레이어들을 쌓아 완성한 모델이다.

연구의 핵심은 네트워크의 깊이에 따라 성능이 어떻게 변할까에 대한 내용인데

깊이의 영향만을 사용하고자 3x3conv만을 사용했다. 이 3x3conv의 가능성이 많은 주목을 받았고 후대의 연구에 큰 영향을 받았다고 한다. 

 

 

 

1. achite

vgg net은 총 6가지의 모델이 있는데 가장 우측의 2가지 vgg-16, vgg19를 주로 사용한다고 한다. (성능면에서 )

ILSVRC 2014에 최종 제출할 때는 7개 모듈의 Ensemble한 결과를 제출 했고 최종 성적은 2등이다.

 

 

3. 3x3 conv

 

3x3 conv 두개를 연속적으로 사용하면  5x5를 사용한 경우와 같은 영역을 확인 할 수 있다.

 

5x5 = 25 params 인데 반해

3x3x2 = 18params 로 적은 파라미터 갯수를 가진다.

이렇게 파라미터 갯수가 적어짐에 따라 레이어를 더 깊게 가져갈 수 있었다고한다.

 

 

그렇다고 vggnet 자체의 파라미터의 개수가 적은 것은 아니다 오히려 타 network보다 방대한 양의 파라미터를 가지고 있다 이는 FC층의 영향이다

 

 

추가적으로 3x3conv 사이에 relu 비선형성이 더 추가되기에 더 풍부한 특성을 추출가능하다.

(5x5 Convolution 대신에 3x3 Convolution을 두 번 사용 하는 경우 그 성능이 약 7% 향상 됐다고 한다)

'CV > classification' 카테고리의 다른 글

[CV] ResNet  (0) 2022.05.03
[CV] GoogLeNet  (0) 2022.05.02
[CV] Network in Network 리뷰  (0) 2022.05.02
[CV] ZF Net 리뷰  (0) 2022.05.01
[CV] Alex Net 리뷰  (0) 2022.05.01

Network in Network 2013 

 

계산량을 줄일 수 있는 1x1 conv를 제안한 논문

 

가장큰 특징이라 한다면 1x1 conv와 global average pooling 을 실시했다는 점이다. 

 

 

1. 1x1conv 의 효과 

  • weight와 비선형성 추가 가능
  • channel의 크기를 마음대로 조절가능
  • 연산량감소

 

1-1. 비선형성 추가 와 weigt 추가

 1x1 conv이후에도 여느 conv처럼 relu같은 activa을 거치게 되는데 이는 비선형성을 추가 하게 된다. 즉 다양한 특징을 추출이 가능하다는 것이다.

 

 그렇다면 왜 선형 act을 쓰지않는 것일가 

 간단히 말하면  Wx+b도 W(Wx+b)+b도 W(W(Wx+b)+b)+b도 결과적으로는 선형식이기 떄문에 비슷한 가중치를 가질 수 밖에 없지만  W(f(Wx+b))+b 이렇게 중간에 f라는 비선형함수를 넣으면 더 풍부한 표현이 가능하기 때문이다.,

 

1-2. weight 추가

위의 그림을 예를들어 1x1conv의 계산과정을 보면 각 channel마다 1x1x32의 값이 곱해저 6x6x32의 output을 내게 된다.

즉 각 층의 위치마다의 선형결합을 의미하는 값이라는 것이다. 이는 같은 위치의 값에 대한 mlp의 fc와 비슷한 효과를 내게 되고  이후 비선형성도 추가하기떄문에 하나의 층을 더 쌓는 의미가 있다

본 논문에서는  mlpconvlayer라는 표현으로 표현하고있다.

 

1-3. channel크기의 조절

 

일반적으로 이미지의 row와 column을 줄이고 싶다면 pooling을 사용한다. channel에 대해 줄이는 것이 바로 1x1 conv이다.

만약 위의 예처럼 192개의 채널이 너무 크다 싶으면 1x1x32필터를 이용하여 채널을 줄일 수 있다.

채널의 개수를 유지할 경우에는 위 1-1,1-2의 의미가 있다.

 

1-4. 연산량감소 

 

https://hwiyong.tistory.com/45

Channel 수를 줄였다가 다시 늘이는 부분을 Bottleneck 구조라고 표현하기도 한다.

위의 param의 갯수를 보면 1x1con를 사용한 것이 계산량이 많이 감소한 것을 확인할 수 있다.

 

 

 

2. global average pool (GAP)

 

https://alexisbcook.github.io/2017/global-average-pooling-layers-for-object-localization/

이때까지의 대부분의 CNN모델은 후의 FC레이어들에서 많은 파라미터수를 차지했는데 GAP는 학습해야할 파라미터가 없다. 학습파라미터가 별로 없다는 것은 과적합을 방지한다는 측면으로 해석될 수 있기도하다. 그리고 

global average pool은 각각의 feature map을 평균한 것 이기 때문에 feature map의 특성을 가지고 있다고 할 수 있는데 이는 모델의 해석에 도움을 줄 수 있는 특징을 가진다.

 

위의 시도는 GAP이전의 단계에서 특징을 잘 추출했다는 가정하에 이루어질 수 있는 시도이지만 연산량을 많이 줄일 수 있는 기법이라는데에서 의미가 있다.

 

 

 

 

https://www.youtube.com/watch?v=c1RBQzKsDCk 

 

위영상을 많이 참고했다.

'CV > classification' 카테고리의 다른 글

[CV] ResNet  (0) 2022.05.03
[CV] GoogLeNet  (0) 2022.05.02
[CV] VGG Net 리뷰  (0) 2022.05.02
[CV] ZF Net 리뷰  (0) 2022.05.01
[CV] Alex Net 리뷰  (0) 2022.05.01

1. ZF Net이란

 

zf는 저자인  zeiler 와 fegus 의 이름을 딴 것이다.zf은 alex넷을 조금 변형시켜 이는 새로운 구조를 제안한 것은 아니지만cnn의 중간 과정을 확인할 수 있게 비주얼라이징함으로써 . 어떤 크기의 conv와 chanel이 최적의 조합인지 판단할 수 있다.

 

 

2. 시각화 과정

 

alex넷에서 제안했던 conv와 pooling 그리고 relu activ 를 역으로 연산하여 각 레이어가 나타내는 것을 확인하려하였다.

 

2-1. unpooling

max pooling 은 크기내에서 가장 큰값만 남기게 되는데 역방향으로 진행할떄는 어떤 위치에서 남게된 값인지 알기가 어려웠다. 

이에 저자들은 맥스풀링시에 위치를 저장하도록하여 언풀링이 가능하도록하였다.

 

2-2.  relu

렐루의 경우 0이상은 그대로 유지하고 0아래는 0을 리턴하게되는데 

저자들은 음의 값의 경우 복원하지않아도 큰 문제가 되지 않는다고 한다.

이에 역과정 역시 relu의 정방향과 같은 방법으로 진행한다.

 

 

2-3. deconv

수학적으로 역 연산을 실행하여 deconv한다.

 

 

3. 각 layers

 

레이어 1에서는 수평 수직전같은 단순한 특징 점점 깊어 질수록 여러 선이나 코너의 결함으로 더 자세한 특징을 짚어내는 것을 확인할 수 있다.

이런 시각화로 어떤 레이어에서 좋은 특징을 뽑아내고있는지 등 cnn의 구조가 적절했는지를 확인 할 수 있었다.

추가적으로 각 레이어별로 몇 epoch부터 특징을 제대로 잡아냈는지 즉 잘 학습을 했는지를 확인하엿는데 (특징이 수렴하였는지)

앞쪽의 레이어들은 낮은 epoch에도 특징이 수렴했지만 뒷쪽의 레이어들은 좀더 많은 epoch가 필요함을 확인할 수 있었다.

 

 

https://www.youtube.com/watch?v=46TlWpZgKRE 

위 영상을 많이 참고했다.

'CV > classification' 카테고리의 다른 글

[CV] ResNet  (0) 2022.05.03
[CV] GoogLeNet  (0) 2022.05.02
[CV] VGG Net 리뷰  (0) 2022.05.02
[CV] Network in Network 리뷰  (0) 2022.05.02
[CV] Alex Net 리뷰  (0) 2022.05.01

이미지 인식 대회의 2012년 winner였던 alex net의 논문을 리뷰한다.

당시 압도적인 성능을 보였던 뿐만아니라 후대의 신경망들에 큰 영향을 미쳤다

 

 

1. Architecture

 

총 8개의 층을 가지는데 5개의 conv층 + 3개의 fc층을 가지며 GPU 두개로 병렬처리한다. 

  • ReLU
  • gpu 2대 병렬처리
  • Local response norm
  • overlapping pooling
  • dropout
  • agumentation

이러한 특징을 가진다.

 

 

 

2. Dataset

 

  • train 1.2m / validation 50000 / test 15000 images 
  • 모든이미지를 256*256으로 통일 시켜 사용 (256*256*3)
  • 직사각형 이미지의 경우 짧은 면을 256으로 조정하고 가운데를 중심으로 자름

 

3. Architecture Detail

 

  3-1. ReLU

전통적으로 쓰이던 tanh나 sigmoid를 사용하지 않고 ReLU를 사용했다.

아래 그래프에서 보이듯 error가 0.25에 도달하기까지의 epoch가 많이 차이난다.

 3-2. Multiple GPUs

당시 gpu로는 메모리가 부족으로 사용했다. 몇개의 레이어에서만 서로의 값을 공유한다.

(alexnet에서는 어쩔수 없었지만 이 방법이 후대의 경량화 모델에 많은 영감을 주었다)

 

 3-3. Local Response Nomalization

 ReLU를 Saturated 부분이 없지만 그 값이 무한히 커질 가능성이 있어 너무 큰 값이 주변 값들을 무시할 수도 있다.

 

AlexNet에서는 ReLU 결과 값을 Normalization 하여 일반화 된 모델을 만들기 위해 Local Response Normalization (LRN) 을 사용했다.

 

논문에서는  k=2, n=5, alpha = 10**-4,  beta = 0.75 를 사용했다.

채널중에서 n = 5기 때문에 만약 7번째 채널을본다면

5,6,7,8,9 이렇게 앞뒤로 같은 위치의 액티배이션값을 제곱한 한것을 분모에 두어 정규화한다. 

lateral inhibition

이는 lateral inhibition(측면억제)이라는 실제 우리의 뇌에서 일어나는 증상을 본따 만든것으로 위의 그림을 보면 흰색선에 집중하지 않는다면 회색의 점이 봉니는데 이는 흰색으로 둘러싸인 사각형에서 억제를 발생시키기 때문에 흰색이 반감ㅇ되어 보이는것 입니다. LRN도 이렇게 relu로 아주 커진 값을 주변에 맞게 억제하는 방향을 원합니다.

 

 3-4. Overlapping Pooling

 

 오버래핑 풀링은 stride를 풀링 사이즈보다 작게 가져가 겹치는 부분이 생기게 하는 기법인데 이런 풀링 방법을 적용하여 과적합을 방지했다고 한다.  

 예를 들어 위 예의 경우 2번째 사각형의 5는 왼쪽 사각형의 4에비에 큰 자극임에도 불구하고 일반 풀링의 경우 5는 사라지게 된다 하지만 오버래핑풀링의 경우 5의 정보가 남게 되는 것이다.

 이는 오버피팅을 방지하는 효과를 가져왔지만 풀링 이후의 사이즈가 작아지는 정도가 일반 풀링에 비해 크긱 때문에 연산량 메모리 측면에서 좋지않아 추후의 모델에서는 잘 사용되지않는 테크닉이다

 

3-5. Drop out

 

과적합을 방지하기 위해서 drop아웃을 사용했다. 이는 학습시에만 사용되었으며 예측시에는 사용되지않느다.

 

co-adaptation

 = 신경망의 학습 중, 어느 시점에서 같은 층의 두 개 이상의 노드의 입력 및 출력 연결강도가 같아지면, 아무리 학습이 진행되어도 그 노드들은 같은 일을 수행하게 되어 불필요한 중복이 생기는 문제를 말한다. 

0.5의 드롭아웃을 줘서 co-adaptation을 막았다.

 

3-6. Agumentation

 

256으로 자른이미지를 총 10로 증강시키는 기법을 사용햇다

 

가운데 이미지 + 좌상단 이미지 + 우상단이미지 + 좌하단 + 우하단 이미지 이렇게 5개와

좌우로 반전한것의 5개를 활용해서 10개의 이미지로 증강하여 사용한다. 

 

'CV > classification' 카테고리의 다른 글

[CV] ResNet  (0) 2022.05.03
[CV] GoogLeNet  (0) 2022.05.02
[CV] VGG Net 리뷰  (0) 2022.05.02
[CV] Network in Network 리뷰  (0) 2022.05.02
[CV] ZF Net 리뷰  (0) 2022.05.01

+ Recent posts