2021.09.07 - [Week 6] Day 2. -
공부한 내용
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에서 매운맛으로 공부한 효과가 있는 것 같다.
다행이라고 생각하지만 아직 난 딥찔이라 성실하게 해야 한다.