호기심 많은 분석가

[BoostCamp] Week6_Day27. Image Classification 본문

Coding/BoostCamp

[BoostCamp] Week6_Day27. Image Classification

DA Hun 2021. 9. 19. 23:01
 

부스트캠프

개발자의 지속 가능한 성장을 위한 학습 커뮤니티

boostcamp.connect.or.kr

(03강) Image Classification 2

1. Problems with deeper layers

  • AlexNet에서 VGGNet으로 발전하면서 더 깊은 네트워크가 더 좋은 성능을 보여준다는 것을 확인했음
  • 깊을수록 복잡한 데이터도 보다 더 잘 학습할 수 있다
    • 더 큰 Receptive field를 가지기 때문에 더 많은 주변을 참조해서 신중히 결론
    • 활성 함수도 더 많이 사용할 수 있다
  • 하지만 더 깊기만 하면 언제나 좋을까? 그렇지 않다. 그렇다면 왜?
  • Deeper networks are harder to optimize
    • 더 깊게 쌓을수록 gradient가 accumulate 되면서 Gradient vanishing / exploding 문제가 발생
    • 계산 복잡도가 올라가서 더 좋은 GPU와 메모리가 필요함
    • Degradation problem
      • Depth가 깊은 상태에서 학습을 이미 많이 진행한 경우 weight들의 분포가 균등하지 않고, 역전파시 기울기가 충분하지 않아 학습을 안정적으로 진행할 수 없는 상태

2. CNN architectures for image classification 2

  • 네트워크를 깊게 쌓기 위한 노력들을 소개하겠음

2-1. GoogLeNet

  • Inception module - 하나의 layer에서 다양한 크기의 filter를 적용해서 여러 측면에서 activation을 관찰하겠다! 수평적으로 넓게 쌓은 것
    • 그러면 계산 복잡도가 높아지니까 1x1 convolutional filter를 미리 곱해줌으로써 해결하고자 함(filter의 개수로 채널 수만 조정) - "bottleneck"구조

  • Overall architecture
    • Stem(줄기) network : vanilla convolution networks
    • Stacked inception modules
    • Auxiliary classifier - 네트워크가 깊기 때문에 Gradient vanishing / exploding 문제가 생길 수 있어 중간중간 gradient를 꽂아줌 (중간에 Loss를 측정)
    • Classifier output (a single FC layer)

  • Auxiliary classifier에 대해 더 알아보자
    • Gradient 문제가 발생하지 않게 중간중간 Loss를 measure해줌
    • 학습 도중에만 사용, 테스트 때는 사용하지 않음

2-2. ResNet

  • 100층 이상의 layer를 쌓으면서, 더 깊은 layer를 쌓아서 더 높은 성능을 보여준 첫 예시
  • 인간 이상의 성능을 보임
  • Degradation problem
    • 더 깊은 모델이지만 오히려 학습이 더 잘 안 되는 문제
    • Overfitting이 아님, 최적화의 문제!
  • Hypothesis
    • Plain layer : As the layers get deeper, it is hard to learn good H(x) directly
      • x에서 곧바로 H(x)를 학습하려 하면 힘들다.
      • 기존의 네트워크들이 H(x)를 얻기 위한 학습을 했다면, ResNet은 F(x)가 0이 되는 방향으로만 학습하면 됨
        • 나머지(residual)를 학습한다고 볼 수 있고 그래서 ResNet이라 불림
      • 아이덴티티에서 나머지 잔여 부분 F(x)=H(x)-x만 모델링해서 학습하면 학습의 부담을 경감할 수 있지 않을까
      • Shortcut connection
      • Backpropagation시 shortcut을 통해 흐를 수 있음, 원래의 gradient가 vanishing 되더라도 shortcut을 통해 유지 가능
  • 왜 잘 될까? gradient가 지나갈 수 있는 input, output path가 2^n만큼 생긴다고 함
    • 다양한 path를 거침으로써 굉장히 복잡한 매핑을 학습해낼 수 있다

  • Overall architecture
    • ResNet에 적합한 He initialization으로 시작함
      • Shortcut 과정에서 더해주는데, initialization을 해주지 않으면 너무 큰 값이 더해진다. → ResNet에 적합한 He initialization 도입

2-3. Beyond ResNets

  • DenseNet
    • ResNet은 identity map을 추가해줬지만 DenseNet은 concatenation을 해줌, 바로 직전뿐만 아니라 훨씬 이전의 출력들도 넣어줌 → 상위 레이어에서도 하위 레이어를 재참조
  • SENet
      • Depth를 높이거나 connection을 새로 하는 방법이 아니라 현재 주어진 activation 간의 관계가 명확해지도록 더욱 채널 간의 관계를 모델링하고 중요한 모델을 re-weighting해서 특징을 attention할 수 있게끔 해줌
      • Sqeeze : Global averaging pooling을 해서 채널의 평균 정보들(분포) 확인
      • Excitation : FC layer를 통해 채널간의 연관성 확인 (attention score 생성)
  • EfficientNet
    • wide : 구글 넷의 inception module과 비슷, 수평적으로 여러 개의 filter를 적용
    • deep : ResNet의 layer를 깊게 쌓는 법
    • high resolution : input 이미지를 큰 것을 넣어줌
    • 위 3가지의 학습이 최적화되는 속도(training시)가 다름 → 이것을 맞춰주는 네트워크를 설계하면 결과가 좋아지지 않을까? (compound scaling)
    • 적은 FLOPS에서도 높은 성능을 보였기에 EfficientNet이라 불림
  • Deformable convolution
    • 자동차 같은 정해져 있는 형태가 아닌 사람이나 동물 같이 변하는 형태를 맞추기 위한 convolution이 필요하다.
    • 기존처럼 Fix 된 filter가 아닌 offset field에 따라 각각의 weight를 벌려줌
    • 그에 따라 irregular 한 shape과 연산을 진행하는 것
    • 아래 사진을 보면 standard에 반해 deformable convolution은 irregular한 shape을 띤다

3. Summary of image classification

  • AlexNet : 이미지넷이 사용되는 가장 간단한 구조, 하지만 모델의 size가 작지는 않음
  • VGGNet : 간단한 3x3 convolution을 사용 → 하지만 memory를 많이 사용함, 학습시간이 오래 걸림
  • GoogLeNet : inception module and auxiliary classifier
  • ResNet : 많은 layer임에도 VGG에 비하면 적절한 계산량

원의 크기는 모델 Size

3-2. CNN backbones

  • GoogLeNet은 이에 따라 AlexNet, VGG, ResNet에 비해 가장 효율적인 CNN Architecture이다. 하지만 구현이 어려움
  • 그래서 일반적으로 VGGNet이나 ResNet 모델을 Backbone으로 많이 씀

🌟Tip

  • 서버의 휴지통 비워주기
# 최상위 폴더로 진입
cd ~/
# share 파일 찾기
cd ./.local
ls # share
cd share
# 휴지통
cd ./Trash
# 각 폴더의 용량 확인
du -h --max-depth=1
# 폴더 삭제하기
rm -r ./files

# 서버 가용 용량 확인
df -h
  • Python package 설치 파일 삭제
# 아나콘다 - 사용하지 않는 cache 파일 제거
conda clean --all
# pip3
pip3 cache purge

🌱피어세션

  • 임문경 캠퍼님 발표 x2🙋‍♂️
  • 다음날도 걸리면 2주 동안 계속 발표하신다고 함

Q1. Googlenet에서, 여러 auxiliary classifier 간의 차이로 인한 gradient gap을 어떻게 학습하는가?(멘토)

  • 의견
    1. 전파되던 gradient가 0에 가깝게 줄어들면, 학습이 안되기 때문에 아예 학습이 불가능한 것보단 나을 거 같기 때문이라 추측
    2. 소실을 대비하지만, 소실이 되지 않아도 모두 학습할 것이다.
    3. 학습하는 중간에 backpropagation 하니까 앞서 소실된 gradient를 가져와서 마지막까지 앞쪽에 gradient를 가져간다는 의미로 이해했습니다.
    4. 단일 auxliary classifier까지가 하나의 모델이라고 생각하면 편할 것 같다.
  • 추가 질문
    1. 이전의 grad가 소실되지 않았다면 원 grad에 더해주기 때문에 Backprop시 더 많이 학습하지 않을까?
      1. 상수를 곱해(0.3, scaling factor) ACL의 grad를 더 줄여준다.

Q2. 2. fx+x를 미분할 때 x로 미분하는가?( Residual이 skip을 이용해 어떤 식으로 학습하나?)

  • 답변
    1. Hx가 미분층을 통과한 값, hx와 원 x와의 차이가 fx(잔차)인데 그 차이(fx)만 학습한다.
      1. 계산량 감소
      2. 그런데 베니싱 일어날 수 있으니까 부가적으로 x를 합한다고 이해
      3. Hx’ = fx’+x’이다(이전 층의 그래디언트 끌어다 쓴다)

Q3. Plain은 깊어지면 배니싱 일어나는데, residual은 배니싱 일어날 수 없지 않나?

  • 답변
    1. 층이 깊으면 일어날 수 있다(값이랑은 상관 x)
    2. Residual shortcut으로 그래디언트가 전달되니깐 층 줄이는 효과, 배니싱을 줄여준다(이전 층의 그래디언트를 가져오면서)
    3. 계속 층을 통과하면 0보다 항상 작은 값을 곱하는데, residual 하면 0으로 덜 수렴하게 된다(gradient)->로스를 줄이는 방향
    4. 그래디언트가 크면 minima에 수렴 힘든 게 있다(크기). 하이퍼 파라미터로 조절 가능. backprop에서는 소실되지 않게 하려 한다(계속 weight업데이트를 위해)

Q4. Hx는 반드시 x보다 큰가

  • 답변
    1. 작을 수도 있다(weight가 음수도 나올 수 있어서)

Q5. 기울기 소실이 무슨 의미?

  • 답변
    1. Grad 가 거의 0이라, 가중치를 업데이트하지 못하는 상황
    2. googlenet에선 Aux classifier의 grad 값을 더해, Vanishing을 완화

Q6. 그래디언트가 기울기 아닌가?

  • 답변
    1. 맞다

Q7. Init로 그래디언트 제어? Forward 시 degradation 제어 아닌가?(멘토)

  • 답변
    1. 초기화 잘못하면 output 값이 커져서 그래디언트가 불안정할 수 있다
    2. 잘하면 뒤에서도 그래디언트가 정상 값을 잡을 수 있다
    3. sig에서 값이 너무 크면 그래디언트 0, init 잘하면 아님
    4. 전달된 값이 커지려면 forward에서 init 잘못해야 한다.

Q8. He init를 한다는 건 relu를 사용한다는 의미, 강의에서는 skip이 되기 때문에 he를 사용한다고 설명. He가 relu 때문이 아니라 skip 때문에 사용되었다?(멘토)

  • 추가 질문
    1. resnet에서 he를 쓰는 이유: Skip connection을 통해 add 되는 과정에서 분산을 잡기 위해??
    2. 그럼 왜 he가 skip connection에서 효과적인가?

Q9. Deformable conv에서 필터 어떻게 흩트려 놓나? Offset 어떻게 결정?

  • 답변
    1. offset자체를 학습하는 것 같다
    2. Dai et al., Deformable Convolutional Networks. abstract 중
    3. Both are based on the idea of augmenting the spatial sampling locations in the modules with additional offsets and learning the offsets from the target tasks, without additional supervision

 

 

[AI Tech]Daily Report

Naver AI Tech BoostCamp 2기 캠퍼 허정훈 2021.08.03 - 2021.12.27 https://bit.ly/3zvJnSh

data-hun.notion.site