ResNet

YONG·2024년 6월 27일

CNN의 역사

기존 모델들에서 나타난 문제

  1. 레이어가 깊어지면서 나타나는 정보의 소실!

    2.정보가 사라지는 이유:

ResNet

ResNet이 제안한 해결 방법
: skip connection

정보손실x
:h(x)-x=0 이어야 됨
h(x)-x=F(x)
H(x) 대신 F(x)를 학습, 그 후 x를 더해줌(?)

+) Bottleneck
연산량을 줄이기 위한 방법!


Pytorch

dilation

  • dilation=2
  • 필터가 한칸씩 떨어져서 적용
  • 작은 필터로 큰 부분을 다룰 수 있음

group conv

  • 이미지도 필터도 그룹 수에 맞게 나눠짐
  • 빨간 것끼리, 파란 것끼리,, 연산됨
  • output의 Depth = 필터 갯수xgroup 수가 됨

ResNet 코드

  1. 자주쓰이는 3x3, 1x1레이어를 함수화
  2. Basic Block
    • batch normalization
    • 레이어 정의
    • 전체 구조(forward)
  1. Bottleneck block

    • BN&layer 설정
    • 전체 구조
  2. class: ResNet

  • init

  • make layer 함수

    • bottle neck을 3,4,6,3으로 쌓음
  • layer 1을 예시로
    • down sampling은 꼭 차원을 낮추는게 아니라 맞춰주는 걸 의미함
    • 뒤에 블록의 첫번째 레이어 스트라이드 =2 일때 사용됨

-> 이런 함수였기에
self.layer1 = self._make_layer(block, 64, layer[0])으로 첫번째 블록 3개가 완성

  • 다음 block으로 넘어갈때 stride를 2로 둠
  • for문에서는 stride를 입력하지 않아서 기본값인 1이 사용됨
    ->두번째 layer부턴 해상도 그대로
  • 필터의 크기는 동일하지만, 해상도가 바뀌는 것의 의미=점점 추상적인 특징을 잡아냄

+) init의 초기화 함수

  • 학습 진행 전 모델 불러올때 딱 1번 초기화 진행

forward!

_resnet으로 편하게 사용

사용하기


0개의 댓글