[모두를 위한 딥러닝2] CNN #6 ResNet

YSL·2021년 8월 1일
0

모두를 위한 딥러닝2

목록 보기
15/23

ResNet

  • torchvision.models.ResNet에 있는 파일을 똑같이 만들건데 그러기 위해선 BasicBlock과 bottleneck Block이 필요함
  • resnet 18,34,50,101,152를 만들 수 있고, 기본 입력값이 3x224x224를 기준으로 설정되어 있음

Q . input size가 다른 경우 ResNet을 적용하려면?




Basic Block : in_channel이 들어오면 convolution, batch_norm, relu된 output과 identity가 더해진 후 다시 한 번 relu됨
downsample의 역할
1. 덧셈을 위해 convolution을 마친 out과 identity의 size를 동일하게 맞춰주기 위해 (stride=2일때, feature size가 줄어들기 때문에 idetity값도 같이 낮춰주기 위해)
2. channel 수를 맞춰주기 위해






  • resnet18 : layer가 18개
    -> Basic Block의 경우, 하나의 block에 data가 통과하는 convolution layer가 2개
    => [ 2 x (2+2+2+2(layer1~4)) + 1(fc) + 1(conv1) ] = 18
  • resnet50
    [3 x (3+4+6+3) +1 + 1] = 50
  • resnet152
    [3 x (3+9+36+3) + 1 + 1] = 152


resnet.py 만들 필요없이 ResNet 불러올 때


ResNet에 CIFAR10 적용하기




RandomCrop : 넣어준 padding값만큼 padding 둘러주고 입력값(지금의 경우, 32)만큼 random하게 data 뜯어오겠다
= > dataset을 여러 가지로 가지고 올 수 있게 만들어줌






acc_check function : 정확도 확인용 코드
save를 했을 때 아래와 같이 결과값이 저장되는 것을 확인할 수 있음



약 87%의 정확도가 나오는 것을 알 수 있으며,
Visdom을 사용해 정확도와 loss값 그래프를 그려보면 아래와 같은 그림을 확인할 수 있음

+) 정확도를 더 올리기 위한 방법
1. architecture적인 부분(make_layer ~ forward) 수정
2. layer 1 ~ 4 부분에서 planes값을 바꿔 더 많은 filter 사용
3. bacth_size 수정
4. RandomCrop 빼버리거나 padding값을 줄인 후 RandomCrop 실행

0개의 댓글