본문 바로가기

부스트캠프 AI Tech/[Week6] Computer Vision

[Week6] CV - Image Classification Ⅰ[Day1]

*What is computer vision?

  • Machine Learning -> Deep Learning 패러다임 변화
    • Feature extraction을 자동적으로 수행하여 사람이 미처 보지 못한 특징들을 알아낼 수 있음

 

 

*Fundamental image tasks

  • Deep Learning 기반의 task들

  • Data augmentation and Knowledge distillation
  • Multi-modal learning (vision + {text, sound, 3D, etc.})
  • Conditional generative model
  • Neural network analysis by visualization

 

*What is classification

  • classifier
  • 세상의 모든 데이터를 가지고 있다면 k-NN 으로 분류 문제를 해결할 수 있음
    k-NN algorithm
  • 하지만 세상의 방대한 양의 모든 데이터를 활용할 수 없기 때문에 제한된 복잡도 내에 데이터를 녹여넣어야함        따라서 Convolutional Neural Networks (CNN)을 활용함.
  • Weight는 image사이즈로 표현하면 다음과 같이 나타남
    • 최종적인 score를 통해 분류
    • layer가 한층이라 단순해서 w와 같은 평균이미지들 이외에는 표현이 불가함 - problem(1) 
    • Training time과 Test time의 이미지의 변화가 있을때 에러가 발생할 수 있음 - problem(2)

  • Locally connected neural networks

    • 위 두가지 문제를 해결할 수 있음
    • 국부적인 영역들만 connection을 고려한 layer
    • local feature learning
    • parameter sharing : 파라미터를 재활용할 수 있기 때문에 더 적은 파라미터로 효과적인 특징 추출                -> overfitting방지

 

 

 

*Annotation data efficient learning

1. Data augmentation

  • 각 테마별 평균이미지를 보면 bias가 존재한다. ex) 바다, 하늘 , 나무, 사람
  • 즉, real data와는 완전히 같을 수 없다.

  • 따라서 training data를 좀 더 real data에 가깝게 fitting 할 수 있도록 augmentation을 활용함
  • 데이터셋에 image transformations를 적용함. 
    • Crop, Shear, Brightness , Perspective, Rotate... 
    • training dataset's distribution을 real data distribution과 유사하게 만드는것이 목표
    • CutMix : Mixing both images and labels
    • RandAugment : 다양한 transformer를 모두 사용하기보다 랜덤으로 추출하여 적용
      • N개의 augmentations을 뽑아 랜덤 샘플링을 하여 훈련을 시키고, 검증을 통해 효과적인 augmentations 기법을 뽑는다.

 

2. Leveragin pre-trained information

  • 데이터를 적게 쓰고 좋은 성능을 발휘하기 위해 다른 데이터셋에서 학습된 정보를 어떻게 활용할 수 있을까?
  • Supervised learning은 매우 큰 데이터셋을 요구함. 
  • 데이터 annotating은 큰 비용을 요구하고, 퀄리티를 보장하지 못함
  • Transfer learning : 스몰 데이터셋에서 효과적인 학습 방법. 기존에 미리 학습시켜 놓은 사전치를 활용해서 연관된 task에 스몰 데이터로도 효과적인 성능을 보일 수 있음. 

*Transfer learning

  • Approach 1 : Transfer Knowledge from a pre-trained task to a new task
    • 기존 10개 클레스로 사전 학습된 모델이 있을때, FC레이어 앞부분은 freeze한 채 FC레이어 weight만 업데이트
  • Approach 2 : Fine-tuning the whole model
    • Approach1과는 다르게 Convolution layers 를 freeze하지 않고 low learning rate을 줘서 느리게 학습하고, FC layers는 high learning rate으로 빠르게 학습함

 

*Knowledge distillation

  • Passing what model learned to another smaller model(Teacher-student learning)
  • Used for model compression
  • 더 큰 student model에도 학습 가능 pseudo-labeling을 이용하여 regularization
  • 심플하면서도 강력한 효과
  • Workflow
    • KL divergence loss를 backpropagation을 통해 student model만 학습
    • KL divergence는 두개 output의 distribution을 비슷하도록 학습을 함
    • Unsuperivsed learning으로 봄
    • Supervised learning 에서 적용할 땐?
      • Hard label (One-hot vector) : Indicates whether a class is 'true answer' or not
      • Soft label : true or not이 아닌 각각의 클래스에 따른 실수형 레이블값이 존재
      • Softmax with temperature(T) : 작은 값과 큰 값의 차이를 제어, T값에 따라 분포가 달라짐
      • Distillation loss
        • KLdiv(Soft label, Soft prediction)
        • teacher 와 student의 차이를 계산 (teacher를 따라하게 끔 학습)
      • Student loss
        • CrossEntropy(Hard label, Soft Prediction)
        • student와 true label을 비교하고 맞는 답을 찾아나가는 과정
      • Loss function은 결국 Weighted sum of "Distillation loss" and "Student loss"으로 계산

 

3. Leveraging unlabeled dataset for training

  • Unlabeled data를 활용하는 방법

*Semi-supervised learning

  • supervised learning은 대규모의 데이터를 labeling하는데에 한계가 있음
  • 하지만, 온라인에 존재하는 unlabeled data는 무궁무진함
  • 따라서 labeled, unlabeled data를 둘다 활용
  • Workflow
    1. labeled dataset으로 model을 학습시킴
    2. unlabeled dataset을 model을 통해 pseudo-labeled dataset을 구축
    3. labeled dataset과 pseudo-labeled dataset을 합쳐서 다시 model training

 

*Self-training

  • Augmentation + Teacher-Student networks + semi-supervised learning
  • SOTA ImageNet classification, 2019 -> Noisy Student Training(EfficientNet-B7)
  • Self-training with noisy student
    Self-training workflow

    1.  Train initial teacher model with labeled data
    2.  Pseudo-label unlabeled data using teacher model
    3.  Train student model with both lableled and unlabeled data with augmentation
    4.  Set the student model as a new teacher, and set new model (bigger) as a new student
    5.  Repeat 2~4 with new teacher/student models