AlexNet / GoogLeNet / ResNet / DenseNet

정지호·2022년 8월 26일
0

개인 실습 진행

목록 보기
27/41

CNN

  • CNN 기술을 기반으로 이미지를 분류하는 여러가지 Network layer 들이 존재 한다. 보통 CNN 모델들이라고 부른다.
  • 여기서는 4가지 모델을 소개하고자 한다.

1. Alexnet

  • 기존 문제: 고해상도 이미지에 대규모로 CNN을 적용하기에는 여전히 많은 연산량이 소모된다. 이와 함께 적은 데이터셋이 있으니, 과적합을 막아야 한다.

  • 핵심 아이디어

    1. 학습 최적화

    • ReLu 활성화 함수 사용
    • 2 개의 GPU 사용

    2. 과적합 방지

    • Dropout(일부 Layer를 생략하여 overfitting 이슈를 해결)
      (overfitting: Training accuracy는 점점 올라가는 데 반해 Test accuracy는 점점 떨어지는 현상)
    • Data Augmentation(적은 연산으로 학습 데이터를 늘리는 법)
  • 구조

  • 총 레이어가 8개이다.


2. GoogLeNet

  • 기존 문제: CNN의 성능을 향상시키기 위해 Layer에 있는 unit 수를 늘리면 overfitting, 연산량 증가 등의 문제가 생김

  • 핵심 아이디어

    1. 기존 문제 해결을 위해 Inception(1x1 사용) 개념을 적용하였다.
      기본적인 Inception 모듈은 아래 그림 처럼 여러 개의 갈림 길을 갖는 것이다.
      그럼 다양한 이미지 크기에 유동적으로 변화하여 결과 값을 뽑을 수 있다. 즉, 여러 상황에 대비하여 출력 값을 얻을 수 있다.
      그리고 GoogLeNet에 적용된 향상된 Inception 모듈은 여기에 1x1 컨볼루션 레이어를 추가한 것이다. 그리고 이를 통해 차원 감소 효과를 얻는다. 이는 아래 그림을 참조해라.
  • 구조

  • 총 레이어가 22개이다.


3. ResNet

  • 기존 문제: deep한 네트워크를 위해 레이어만 늘린다고 성능이 좋아지지 않는다. Training도 잘 되고 test도 잘 되는데 성능이 잘 안나오는 degradation이 발생할 수 있다.

  • 핵심 아이디어
    1. Residual learning building block(배운 내용. 깃허브 참조)
    : 입력 x가 들어가고 입력 x 값에 출력값을 더해 보낸다. 이렇게 하기 위해 입력과 출력의 차원을 맞춰준다.
    (깃허브도 참조)

    1. Deeper bottle architecture
      : 1x1 컨볼루션 추가. 입력과 출력의 차원을 맞춰주어야 하므로 마지막에 1x1, 256 레이어를 추가해준다.
  • 구조

  • 총 레이어가 152개이다.


4. DenseNet

  • ResNet에서 제기된 문제점: 이전 레이어의 output을 다음의 레이어의 output과 합해서 더한다는 점에서, ResNet은 정보들이 이후의 레이어들로 온전히 흘러가는 것을 방해할 수 있다는 약점이 있었다.

  • 핵심 아이디어

    1. DenseNet에서는 아래 그림처럼 모든 이전 레이어의 output 정보를 이후의 레이어의 input으로 받아오는 방법을 사용했다.

      이전 layer들의 feature map을 계속해서 다음 layer의 입력과 연결하는 아이디어는 ResNet과 같은데 ResNet에서는 feature map끼리 더하기를 해주는 방식이었다면 DenseNet에서는 feature map끼리 concatenation을 시켜주는 것이 가장 큰 차이점이다.

      물론 layer사이에 연결되는 방식도 다르다.
      (ResNet은 바로 직전의 Resudual block에서만 connection이 연결되었지만 DenseNet는 Dense Block 내에서는 l번째 layer 이전의 모든 layer(l−1,...,1,0)에 연결이 된다.)

    2. Growth Rate
      : 각 feature map끼리 densely 연결이 되는 구조이다 보니 자칫 feature map의 channel 개수가 많은 경우 계속해서 channel-wise로 concat이 되면서 channel이 많아 질 수 있다. 그래서 DenseNet에서는 각 layer의 feature map의 channel 개수를 굉장히 작은 값을 사용하며, 이 때 각 layer의 feature map의 channel 개수를 growth rate(k) 이라 부른다.

  • ImageNet dataset을 이용하여 ResNet과 DenseNet 성능을 비교

=> ResNet에 비해 DenseNet이 동일한 error rate대비 계산에 필요한 파라미터 갯수가 ResNet의 1/3 정도로 더 적고 연산횟수(flops)도 더 적은 것을 볼 수 있다. 즉 ResNet과 비슷한 성능을 내면서 연산면에서는 훨씬 더 효율적인 것을 볼 수 있다.


출처
https://rubber-tree.tistory.com/entry/AI%EB%94%A5%EB%9F%AC%EB%8B%9D-CNN-Network-layer-%EB%AA%A8%EB%8D%B8%EB%93%A4-AlexNet-GoogLeNet-ResNet
https://velog.io/@lighthouse97/DenseNet%EC%9D%98-%EC%9D%B4%ED%95%B4

profile
정지호

0개의 댓글