ResNet50 논문 리뷰

Hyewon Jung·2023년 5월 19일

딥러닝 모델 리뷰

목록 보기
2/3
post-thumbnail

0. 목차

  1. 모델 개요
  2. 모델 구조
  3. 모델의 장점과 단점
  4. 코드 리뷰


1. 모델 개요

  • 마이크로 소프트에서 개발
  • 앞선 신경망들은 레이어를 많이 쌓아 신경망의 depth를 깊게 가져갔으나 오히려 그래디언트 소실 문제 때문에 성능이 어느순간 나빠지는 것을 발견함
  • 이 문제를 해결하기 위해 레지듀얼 블록을 도임함. (숏컷 도입)
  • 숏컷이란?
    • 저 아이덴티티가 숏컷임.



2. 모델 구조

숏컷

  • input은 x, output은 relu(F(x) + x )임
    • relu함수를 사용해 결과값 출력하는 건 기존 googlenet과 동일
    • 다만, 숏컷(아이덴티티 매핑)을 이용해 입력값을 출력값에 한번 더 더해주고 있음
    • 이는 기울기가 깊어질 수록 vanishing gradient 문제가 발생하는 것을 해결하기 위한 것이므로 레이어들이 많아지면서 입력값이 점점 잊혀져가는 것을 해결하기 위함임.

  • 왜 그렇게 하는가?
    • 기존 신경망은 H(x) - y로 loss를 계산.
    • loss는 최소화되는 것이 좋으므로 결국 H(x) - y = 0을 목표로 하고 학습
    • 그러나 resnet은 H(x) - x = 0을 목표로 함
    • 이렇게 되면 위 사진의 식과 같이 H(x) = F(x) + x → H(x) - x = F(x)가 목표
    • 그러면 F(x) = 0이 최종 목표 → 학습이 더 쉬워짐


레지듀얼 블록

  • resnet에서 사용되는 가장 기본적인 블록은 residual block임


  • 3개의 레이어 스택으로 구성됨
    • 1x1, 3x3, conv layer

  • 왜 그렇게 하는가
    • 기존(좌측 사진)을 보면, 3x3이 두번 있음 → 연산 많음
    • 그러나 1x1을 두번 쓴 (오른쪽) 레지듀얼 블록은 파라미터 수가 감소, 연산량이 줄어짐 근데 연산량은 주는 데 레이어는 더 많아짐 → 정확도 증가

  • 1x1 layer(1x1, 64 부분)
    • in_channel수를 가진 데이터가 들어와 conv1x1을 거치면 out_channel채널 개수를 띄도록 구성함.

    • 이 1x1이 채널 수를 조절하면서 차원을 줄였다 늘리는 것이 가능

      conv2d(in_channel, out_channel..) 
      batchnorm2d()
      relu()<< 이렇게 구성!
    • 일반적인 conv layer 형태를 띰

    • 합성곱층 - 배치정규화 - 렐루 활성화함수를 거칩니다.

  • 3x3 layer(3x3, 64부분)
    • conv 1x1과 동일한 흐름으로 진행되나, filter(커널 사이즈)를 1 → 3으로 바꿔주기만 함.
    • 순서는 conv2d → batchnorm2d → relu동일

  • 마지막 세번째 conv layer(1x1, 256)
    • 256d가 입력으로 들어오고 1x1합성곱층으로 아까 채널 수를 늘였다 줄였다 가능하다고 했는데 입력크기를 다시 반환
    • 근데 resnet에는 아이덴티티 매핑이 있어 다시 x가 F(x)에 합쳐지므로 input x와 F(x)가 같은 채널을 가져야 함. 그래서 입력을 출력에 맞춰 차원을 변경함. 만약 아래처럼 아이덴티티 매핑이 이뤄지고 출력이 이뤄지면 채널이 같아지게끔하는 convolution layer를 하나 더 준비해야하고,
    • 그렇지 않다면 추가적인 conv layer를 준비할 필요가 없음

  • 그러면 경우의 수가 두개인데 따로따로 resnet layer를 쌓아야 하나요? if를 계속 쓰면서요?
    • 아니요. 그렇진 않습니다.
    • 다만, 실제 구현되는 forward함수에서 downsampling(말그대로 데이터 줄이는 과정 풀링이 대표적 방법임)을 실행하는데 이때 각 경우마다 다른 레이어를 반환함



전체 구조(초록색 부분)

  • 50개의 layer를 가지고 있어서 resnet50입니다.
  • layer name칼럼 원소에 따라 []로 구분되는 하나하나가 residual block입니다.
  • 즉, resnet50은 각 layer마다 다른 residual block형태가 반복되는 구조입니다.
  • layer는 총 5개입니다.
    - 7x7 64 stride 2 + 3x3 max pool
    - conv2_x 레이어 (1x1 → 3x3 → 1x1, 64channel)
    - conv3_x 레이어(1x1 → 3x3 → 1x1, 128channel)
    - conv4_x 레이어(1x1 → 3x3 → 1x1, 256channel)
    - conv5_x 레이어(1x1 → 3x3 → 1x1, 512channel)



3. 모델 장단점

장점단점
기울기 소실 문제 해결그래도 깊이가 낮지는 않기 때문에 높은 연산량, 메모리 사용량을 가짐
레이어를 깊게 쌓지 않아도 됨작은 데이터셋에서는 과적합이 발생할 수 있음
레이어를 깊게 쌓지 않아도 됨구현이 어려움(← 이건 pretrained된 모델이 존재함)



4. 코드 리뷰

개인노션_resnet50 파이토치 구현

profile
Amateur data scientist & student

0개의 댓글