BoostCamp

2021.09.07 - [Week 6] Day 2. -

배기니어 2021. 9. 8. 02:53

공부한 내용

1. Annotation Data Efficient Learning

 1.1. Data augmentation

  1.1.1. Learning representation from a dataset

   1) neural network

    • data를 컴퓨터가 이해할 수 있는 지식의 형태로 압축하여 녹여낸 system

    • model이 data를 골고루 담고 있는 것이 best

   2) biased dataset

    • 실제 dataset은 대부분 bias되어 있다.

    • 실제 dataset은 사람이 카메라로 찍은 image

    • 사람이 구도를 잡아 찍은 사진은 보기 좋게 찍기 위해 bias시켜서 찍는다.

    • 카메라로 찍은 train data가 test time의 data를 모두 표현할 수는 없다.
   3) train dataset

    • 실제 세상의 모든 data를 취득할 수 없다 -> train data는 sampling된 data

    • 취득한 data는 실제 발생 가능한 data의 극히 일부분 -> 볼 수 없는 부분 많다.

   4) gap between train dataset and real data

    • bias된 data로 학습하면 real data에 대해 인식하지 못할 가능성이 높다.

    • train dataset이 real data를 충분히 표현하지 못함 -> biased dataset의 문제점

   5) fill gap by augmenting data

    • 더 많은 train dataset과 bias되지 않은 data 사용이 가장 좋은 방법이지만 불가능

    • sampling된 data와 real data 사이의 gap을 data augmentation으로 채운다.

    • train data를 operation(aumentation) 통해 여러 장으로 불린다. -> 세상에서 발생할 수 있는 가능성 높임

    • e.g. brightness, rotate, crop, etc.

 

  1.1.2. Data augmentation

   1) image data augmentation

    • 기본적인 영상처리 기법 활용

    • geometry, color, brightness, etc. 변환

    • openCV, numpy에 구현되어 있다.

    • 목적 : dataset에 포함되지 않은 case를 반영할 수 있도록 해줌

   2) brightness adjustment

    • 어둡게 혹은 밝게 찍힌 사진이 찍힌 경우 대응

    • 일정 수 더해서 밝기 조절

    • 일정 값 곱해서 밝기 조절

    • 이미지는 0~255의 픽셀 값 -> 상한선인 255 넘지 않도록 clipping 필요

   3) rotate, flip

    • openCV의 rotate 사용

    • 각도 flag : cv2.ROTATE_90_CLOCKWISE, cv2.ROTATE_180

    • numpy에도 상하좌우 바꾸는 flip 기능 존재

   4) crop

    • 간단하면서도 강력한 방법

    • 중요한 파트에 대해 학습할 수 있게 한다.

    • numpy array에서 indexing 통해 쉽게 구현

   5) affine transform

    • 변환 후

     - 직선은 직선으로 유지

     - 대응되는 선분끼리 길이 비율 유지

     - 평행관계 유지

    • a.k.a. shear transform

    • parameter : 2x2 matrix, 2 translation parameters -> 6개 parameter 필요

    • cv2.getAffineTransform()

     - 행렬값 직접 입력하기 어렵다.

     - input image에서 세 점과 output image에서 대응되는 세 점의 좌표 입력

     - 6개의 행렬값 반환 + [0, 0, 1]

    • cv2.warpAffine()

     - 변환 작업

     - warping : 기하학적으로 영상을 비틀거나, 회전하거나, 픽셀 위치 옮기는 작업

 

  1.1.3. Modern augmentation techniques

   1) cutmix

    • 영상의 일부를 잘라서 다른 영상에 합성

    • key point : image 합성 비율에 따라 label도 합성

    • 간단하지만 쉽고, 의미있는 수준의 성능 향상을 기대할 수 있음

    • 물체의 위치를 더 정교하게 catch할 수 있도록 학습된다.

   2) RandAugment

    • 더 다양한 augmentation image 만들기 위한 방법

    • random하게 augmentation 기법 sampling해서 augmentation policy를 자동으로 search

    • parameters

     - 어떤 augmentation 적용할 것인가?

     - 얼마나 강하게 적용할 것인가?

     - 2개의 parameter random sampling -> parameter 조합하여 sequence 생성 -> 하나의 augmentation 생성

    • augmentation policy

     - augmentation 기법들의 sequence

     - sampling : N개의 augmentation 기법 -> 2N개의 parameter

     - sampling된 policy 활용해서 학습 후 성능 평가 -> 효과적인 augmentation 선택

    • 대부분의 경우에서 쉽게 성능 향상

    • cf.

     - PBA : Popular Based Augmentation

     - Fast AA : Fast AutoAugment

     - AA : AutoAugment

     - RA : RandAugment

 

 1.2. Leveraging pre-trained information

  1.2.1. Transfer learning

   1) dataset quality

    • 새로운 task에 대해 동작하는 AI 구현하기 위해선 새로운 dataset 만들어야 한다.

    • 대용량 dataset 필요, label도 필요 -> 장기간, 많은 비용 소모

    • labeling은 human factor 포함 -> 낮은 quality, 추가 비용 필요

    • 대용량 dataset에 대한 어려움 극복 위해 transfer learning 사용 -> 비용 절감, 실용적

   2) benefits of transfer learning

    • 기존에 미리 학습한 사전지식 활용해서 연관된 새로운 task에 적용

    • 적은 노력으로 높은 성능

    • 쉽고 경제적, 성능 보장

   3) transfer learning

    • 한 dataset에서 배운 지식을 다른 dataset에 활용하는 기술

    • 서로 다른 task의 dataset에서도 비슷한 패턴이 나타난다. -> 공통된 지식

    • 한 dataset에서 배운 지식 중 다른 dataset에 적용할 만한 공통점이 있을 수 있다는 가정에서 시작

   4) transfer knowledge form a pre-trained task to a new task

    • 하나의 dataset으로 미리 학습한 model에서 마지막 fc layer만 변경

    • fc layer만 새로운 task의 dataset에 대해 학습

    • convolution layer는 기존에 학습한 지식 가지고 있는 상태

    • feature 활용해서 새로운 task에 대응하도록 학습

    • 새로운 fc layer에 대해서만 학습하기 때문에 parameter가 줄어들었고, 따라서 적은 data에 대해서도 잘 작동할 수 있게 학습된다.

    • 데이터가 부족한 경우 유용한 방법

   5) fine-tuning

    • 미리 다른 dataset에서 학습된 모델에서 마지막 fc layer만 변경

    • convolution layer는 낮은 learning rate로 느리게 학습

    • fc layer는 높은 learning rate로 빠르게 학습 -> 빠르게 새로운 task에 적응

    • 전체 학습 -> 많은 데이터 필요할 수 있지만 성능 더 좋을 수 있다.

    • 데이터가 더 많은 경우 유용한 방법

 

  1.2.2. Knowledge distillation

   1) teacher-student learning

    • pretrained model이 가진 지식을 이용하는 더 진보된 방법

    • teacher-student network training == teacher-student learning

    • 이미 학습된 teacher model의 지식을 더 작은 모델인 student model(smaller model)에 주입하여 학습

    • 모델 압축에 유용

    • 최근에는 teacher model을 unlabeled data의 pseudo label을 자동으로 생성하는 매커니즘에 사용

    • pseudo labeled data 사용하여 더 큰 student model 학습 (regularization 역할)

   2) teacher-student network structure

    • 일반적으로 student network는 더 작은 model 사용

    • 같은 입력에 대해 teacher, student 동시에 feeding -> output

    • teacher와 student의 output으로 KL div. Loss 계산 -> student 쪽으로만 backpropagation

    • gradient가 student network로만 도달하여 student만 학습

    • KL div. Loss

     - 두 output distribution을 비슷하게 만들도록 학습

     - student model이 teacher model을 따라하게 만드는 학습법

    • label 사용하지 않는 unsupervised learning

    • teacher model 학습에 사용된 pre-train dataset 외에도 임의의 dataset 사용 가능

   3) knowledge distillation

    • label 존재하는 data의 true label 이용해서도 loss 측정

    • Distillation Loss

     - KL div. Loss

     - teacher model 따라하게 만드는 loss

    • Student Loss

     - true label 사용한 loss

    • distillation loss 계산에 soft prediction 사용 -> quantize되지 않은 실수 값

   4) hard label vs. soft label

    • hard label : one-hot vector

    • soft label

     - 0, 1의 binary가 아닌 실수 값 -> 주로 softmax 통한 출력

     - distillation에서는 각 값들의 전반적인 경향성이 knowledge를 나타낸다고 가정

     - 하나의 model이 입력에 대해 어떤 생각을 하는지 보기 위해 soft label 사용

   5) temperature

    • softmax는 입력의 값을 극단적으로 벌려주는 기능

    • 입력값을 큰 값으로 나누어 softmax 적용하면 출력을 smooth하게 중간 값으로 만들어주는 기능

    • 입력에 따라 민감하게 변하는 teacher model의 output -> student가 teacher model 더 잘 따라하게 만듦 

    • 0, 1보다는 전체 softmax의 출력 vector의 크고 작음이 knowledge를 잘 표현한다고 생각

    • 전반적인 분포를 확인하기 좋다.

   6) semantic information in distillation

    • semantic information : teacher model의 output에서 각 값들의 의미

    • semantic information은 pre-train의 target task의 class와 관련있을 수 있지만, soft label에서 semantic information보다 전체의 개형이 knowledge를 표현하므로, knowledge를 더 잘 따라하도록 만드는 것이 중요하다.

   7) backpropagation

    • distillation loss -> student model

    • student loss -> student model

    • weighted sum of distillation loss and student loss

 

 1.3. Leveraging unlabeled dataset for training

  1.3.1. Semi-supervised learning

   1) unlabeled data

    • supervised learning은 labeling 필요 -> large scale dataset 구축에 한계

    • unlabeled data는 온라인 상의 수많은 data

    • large unlabeled data(unsupervised)와 small labeled data(supervised) 모두 활용

   2) pseudo labeling

    • knowledge distillation이 pseudo label 생성해서 활용하는 경우에 해당

    • training process

     - 1. labeled dataset으로 pretrain

     - 2. pretrained model로 unlabeled data의 pseudo label 생성

     - 3. labeled dataset과 unlabeled dataset 합쳐서 새로운 모델 or 기존 모델 재학습

   3) self-training with noisy student

    • semi-supervised learning과 유사

    • training process

     - 1. ImageNet 1M dataset으로 teacher model 학습

     - 2. teacher model로 pseudo label 생성

     - 3. labeled data와 pseudo-labeled data 합쳐서 augmentation 적용 후 학습 -> 더 방대한 양의 dataset

     - 4. teacher model을 student model로 대체하고, 새로운 student model 학습 -> 1~3 반복

    • knowledge distillation과의 차이점 : student model의 크기가 계속 커진다

 

피어세션

1. 강의 내용 발표

2. 과제 질문

 • optimizer 변수명 변경 필요

 • pretrained model overfitting 발생하는 문제

 • domain 다를수록 pretrained model을 unfreeze하고 학습하면 성능이 더 잘 나올까?

  - quickdraw dataset을 mnist dataset로 pretrain한다면 유사성이 많아 freeze하면 성능 더 잘 나올 것 같다.

  - 새로운 task가 pretrained task에 포함되거나 유사한 task이면 freeze하는 것이 더 좋다고 생각

 • pseudo labeling을 하면 맞춘 데이터는 계속 잘 맞추고 틀린 데이터는 계속 틀리지 않을까?

  - 현업에서도 acc가 0.9 ~0.95 이상일 때 사용

  - class 별로 accuracy 편차가 심하다면 성능이 좋지 않을 것 같다.

  - 위험을 감수하더라도 dataset을 늘리는 것이 좋은 성능을 내니까 pseudo labeling을 사용한다고 생각한다.

  - data imbalance 문제를 해결하고 사용하는 것이 좋을 것 같다.

3. Further idea

 • affine transform

 • GIRAFFE (NeRF)

 


과제를 해보니 선녀가 따로 없었다.

Level 1 U stage에서 매운맛으로 공부한 효과가 있는 것 같다.

다행이라고 생각하지만 아직 난 딥찔이라 성실하게 해야 한다.