[Boostcamp AI Tech] [U-stage] 6주차 Day 2 학습 기록

bluegun·2021년 9월 7일
0

AI Tech 2기 활동

목록 보기
25/87

학습 내용


Image classification models

Deeper layer의 문제점

  • 일반적으로 더 깊은 network가 더 좋은 성능을 보여준다.

    • 더 복잡한 feature를 학습 가능하다.
    • Larger receptive field를 가진다.
    • non-linearity를 더 가진다.
  • 하지만 무작정 layer를 많이 쌓으면 학습이 잘 안된다.

    • Gradient vanishing / exploding
    • 연산량 증가
    • Degradation problem

Classification Architecture(어제에 이어)

GoogleNet

  • Inception module 사용

    • layer 한 층에서 여러 개의 convolution filter를 사용해 연산
    • 1x1 convolution을 통해 channel의 수를 줄여줌.
  • Auxiliary classifier

ResNet

  • Degradation problem을 해결해, layer를 깊게 쌓을 수 있게 해준 model

  • Shortcut connection(skip connection)

    • layer 이전의 x를 기억해, 현재 layer에 반영함으로서 원래 정보 x를 보존한다.

DenseNet

  • 몇 칸 전 layer 뿐만 아니라, 이전의 여러 layer들의 정보를 받는다.

  • channel axis 축으로 concatenation한다.(resnet은 skip connection을 + 연산했었다.)

    • concatenation은 channel이 늘어나지만 원래 신호를 보존하는 효과가 있다. memory나 computation은 늘어난다.

SENet

  • channel별로 중요한 곳을 attention한다.

EfficientNet

  • 다른 설계 방식 : width scaling(GoogLeNet), depth scaling(resNet), resolution scaling(input 해상도 증가)를 모두 적용

  • 적은 Flow에서도 압도적인 성능

Deformable convolution

  • 정해진 filter shape이 아닌, 물체의 deformable한 shape을 따라 receptive field가 결정

종합

  • GoogLeNet(Inception)은 memory나 연산량 측면에서 효율적이나, 학습을 복잡하게 만드는 요소가 있어 사용하기 어렵다.

  • VGGNet이나 ResNet은 simple하고 성능도 괜찮아 backbone으로 많이 쓰인다.

피어 세션

  • 팀원분께서 requires_grad 설정 방법들을 조사해 발표해주셨다. 내가 사용하던 방법을 포함해 여러 방법을 소개해 주셨고, 특히 내가 쓰는 방법이 잘못된 점이 있었다는 걸 알게 되어 정말 감사했다.
# Freeze the feature extracting convolution layers
# Use chlidren
for name, child in model_finetune.named_children():
    if name in ['features']:
        for child_parm in child.parameters():
            child_parm.requires_grad = False

# Use modules. <class 'torch.nn.modules.*'>
for layer in model_finetune.features:
    layer.requires_grad_(False)

# Use parameters. <class 'torch.nn.parameter.Parameter'>
for parm in model_finetune.features.parameters():
    parm.requires_grad = False

# module requires_grad_
model_finetune.features.requires_grad_(False)

나는 2번째의 finetune.features 를 사용하다가 세 번째의 형태로 바꿨는데, 기존 두 번째 형태를 쓸 때 requires_grad = False 형태로 사용했었다. 다시 한 번 내 잘못을 알게 해준 용범님께 감사드린다.

  • CutMix에 대한 자세한 내용, Knowledge distillation에서 cross-entropy 대신 KN divergence를 쓰는 이유, softmax에 가중치 T를 늘려서 smoothing 되는 것의 의미, Semantic Imformation의 의미에 대해 질문을 던져주셨고, 확실히 답하기 힘들어 다음 피어 세션 때까지 공부해서 답해보기로 결정하였다.

특이 사항

  • 오늘부터 Github에 1일 1커밋을 목표로 알고리즘 문제풀이를 올리기 시작하였다.
  • Github repository를 만드는 과정에 기존에 Github을 잘 꾸며놓으신 다른 캠퍼분을 참고했는데, Github blog가 아닌데도 마치 blog처럼 쓰시는 모습이 인상적이었다. Github에 일일 회고를 정리하는 것도 고민이 되었는데, 일단은 부스트캠프의 기록은 여기다 쓰고 나중에 결정해봐야겠다.

느낀 점

  • 팀원분들이 질문을 많이 해주셔서 내가 어느정도 이해하고 있구나 싶던 부분도 잘 이해했다고 하기 힘들다는 걸 깨닫게 되었다. 팀원분들에게 감사하고 나도 저런 질문 많이 던지고 싶다. 또 강의 내용에 대해 확실하게 이해하고 넘어가는 게 좋겠다는 생각도 들었다.

  • 강의가 조금 여유로워 CutMix 논문과 자료를 보며 공부하는데, 확실히 논문 보기가 힘들지만 내용이 많고 설명이 좋아 도움이 많이 되는 것 같다. 평소에 논문 보는 걸 꺼리지 말아야겠고 추석 즈음에 논문 구현도 한 번 해보면 좋을 것 같다.

  • Github 커밋을 시작하니 뭔가 나도 포트폴리오라 할 만한게 생길까 하는 기대가 생겼다. 나도 Github을 잘 꾸며서 Github만으로 나를 표현할 수 있는 사람이 되고 싶다.

0개의 댓글