티스토리 뷰
[Day 30] Computer Vision (CV) - 1
1. 강의 복습 내용
1.1) Image Classification
Image Classification
1. Classifier (분류기)
: Input이 Output(카테고리)에 속하는 지 맵핑해주는 역할

2. Classifier (분류기)의 구현
1. k-Nearest-Neighbors (k-NN)
: 이 세상의 모든 데이터를 저장할 수 있다면, 영상 분류 문제는 결국 Nearest Neighbors Search 즉 검색 문제로 쉽게 취할 수 있을 것이다.


- 그러나, 모든 데이터를 저장하는 것은 비현실적이며 혹여나 구축하였다 하더라도 방대한 양의 데이터베이스에서 영상들의 유사도를 계산하고 검색하는 시간도 아주 오래 걸릴 것이다. (메모리 한계, 시스템 복잡도 한계)
2. Convolutional Neural Networks (CNN)
: 메모리 한계, 시스템 복잡도의 한계, 즉 방대한 데이터를 제한된 복잡도의 시스템에 압축하여 녹여 넣기 위해 제안된 방법
2.1) Fully-Connected Networks
- 기존의 Fully-Connected는 영상(이미지)를 처리하기에는 한계가 존재한다.

1) Fully-Connected-Network는 평균적인 이미지만 표현할 수 있다. (모델 표현력 부족)

2) Fully-Connected-Network는 Local feature를 학습하지 않는다.

2.2) Convolutional Neural Networks (CNN)의 등장

*) CNN이 영상에 매우 적합한 네트워크인 이유
1) Local feature Learning
: Sliding-Window 기반으로 각 영역에서의 Feature를 추출하여 저장한다.
2) Parameter Sharing
: 같은 Parameter를 가진 Filter로 전체 영역에 대해서 더 적은 Parameter로 효과적인 Feature를 추출하므로

3. CNN Architectures for image classification
- CNN 모델 구조를 이용한 이미지 Classification의 발전 연대기

- 각 모델들의 설명은 이 강의내용 정리에서는 생략.
1.2) Annotation Data Efficient Learning
Annotation Data Efficient Learning
1. Data Agumentation
- 충분한 학습 데이터가 확보되지 않으면, 오버피팅(과적합) 문제가 쉽게 생길 수 있다. 즉, 충분하지 않은 학습 데이터에만 지나치게 훈련되어 새로운 데이터(=테스트 데이터)에 제대로 반응하지 못하는 현상이 생길 수 있다.
- 또한, 학습 데이터와 학습을 위한 Label된 데이터를 방대하게 구축하기에는 많은 cost가 소요되어 방대한 양의 학습데이터를 구축하기 쉽지 않다.
- 때문에 적은 양의 확보한 학습 데이터로 이에 매칭되는 Label이 보장됨을 유지하면서 데이터를 변형함으로써 학습 데이터를 증강하는 것이 Data Agumentation 이다.


- Data Agumentation의 기법은 다양하다. (Rotate, Flip, Crop, Affine transformation, CutMix 등)
- 성능 향상을 위한 Data Augmentation 기법들을 샘플링하여 효과적인 Data Agumentation 기법을 찾아내는 RandAugment도 있다.

2. Leveraging pre-trained information
: 데이터를 적게 쓰고도 좋은 성능을 발휘하기 위해서 다른 데이터셋에서 학습된 정보(Pre-trained)를 활용하는 방법
2.1) Transfer Learning
: 많은 학습 데이터셋을 구축하는 과정 속에서 학습 데이터와 매칭되는 Label들을 구축하는 것에도 많은 Cost가 소요된다. 따라서 이런 어려움을 극복하기 위한 방법으로 Transfer Learning이 있다.
- 한 데이터 셋에서 배운 지식을 다른 데이터 셋에서 활용하는 기술
Approach 1 : Transfer Knowledge from a pre-trained task to a new task
: 데이터가 아주 적을 때 유용하게 사용 가능

Approach 2 : Fine-tuning the whole model
: 데이터가 어느 정도 있다면, Fine-tuning 방식으로 사용하면 더 좋은 성능을 기대할 수 있다.

2.2) Knowledge distillation
- Pre-trained된 Teacher Model의 지식을 Student Model에 주입하여 학습 (큰 모델 -> 작은 모델)
- 최근에는 Teacher Model에서 생성된 출력을 pseudo-labeling (가짜 Label)로 자동 생성을 하는 메커니즘으로 사용함 (Generating pseudo-labels for an unlabeled dataset)

1. Standard Teacher-Student Network Structure

2. Un-labeled Teacher-Student Network Structure

*) Hard Label vs Soft Label

*) Softmax with temperature (T)

*) Student Loss
- CrossEntropy 사용 (True Label을 기반으로 새로 학습하므로)
- Loss = difference between the student network's inference and true label
*) Distillation Loss
- Teacher Model의 학습 분포를 Student Model이 학습(모방)하기 위해서
- KLdiv 사용
- Loss = difference between the teacher and student network's inference

- 최종적으로 두 Loss의 합으로 학습(Backpropagation)이 이루어진다. (Student Model에 대해서만)
3. Leveraging unlabeled dataset for training
3.1) Semi-supervised Learning
- Unlabeled Data를 목적성 있게 잘 사용하는 방법
- 역시, Labeled 된 Data를 방대하게 구축하기에는 많은 Cost가 소요
- 반면 Unlabeled Data는 웹상에서도 쉽게 구할 수 있음.
- 따라서 이 둘의 데이터를 모두 활용하기 위한 방법

- Semi-supervised learning with pseudo labeling

3.2) Self-training
- 앞서 알아본 방법을 모두 활용하여, 효과적으로 Self-학습하는 방법 (Data Agumentation, Knowledge distillation, Semi-Supervised Learning (Pseudo label-based method)
- 효과가 가장 뛰어남
- 기존의 Teacher Model이 Student Model보다 항상 큰 모델이였지만, Self-training에서는 Student Model이 루프마다 더 큰 모델 학습되어 Teacher Model로 다시 대체된다.


- 즉, 이 과정을 말로 풀어서 쓰면
1. Train initial teacher model with labeled data
2. Pseudo-label unlabeled data using teacher model
3. Train student model with both labeled 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
2. 피어 세션
1. 강의에 대한 토의
CutMix 구현 -> 확률로 2가지의 값을 가지는 Label은 어떻게 구현? -> Loss를 두가지의 Label 지정하여 계산하는 방법도 존재
RandAgument -> Hyperparameter Search와 비슷한것인가?
NLP의 Teacher-Student 기반 모델과 비교 (경량화 관점) -> CV에선 아닌것 같다 (EX: Self-Training -> Student Model이 점점 커짐)
Self-Training에서 Student 모델이 점점 크기가 커진다는 것이 무슨 의미인가? (모델의 아키텍쳐가 추가되는것인가? 단순히 학습되는 데이터가 많아진다는 것인가?) -> 3가지 noise(data augmentation, dropout, stochastic depth)를 추가
3. Conclusion
1. Data Agumentation -> RandAgument 자세히 알아보기
: 기존 pytorch에서 transform에 지정하여 사용하던 것과는 다르게, 성능 향상을 이루는 기법들을 찾아내는 방법이라고 하여 자세히 알아보기. (처음 보는 기법)
2. Image Self-training Model 찾아보기. + 구현해보기
: 이미지 데이터는 다량으로 확보하기도 어렵지만 그에 맞는 Labeling 작업이 매우 고된 것 같다. 때문에 앞으로 발전 방향도 Self-training으로 발전될 것이고 그에 따라 더 공부해야할 부분인 것 같다.
'부스트캠프 AI Tech > 학습정리' 카테고리의 다른 글
[Day 32] Computer Vision (CV) - 3 (0) | 2021.03.11 |
---|---|
[Day 31] Computer Vision (CV) - 2 (0) | 2021.03.09 |
[Day 26-29] 특강 (0) | 2021.03.02 |
[Day 25] GNN (0) | 2021.02.26 |
[Day 24] 정점 표현 & 추천 시스템 (심화) (0) | 2021.02.25 |
- Total
- Today
- Yesterday
- C++
- 알고리즘
- 부스트캠프 AI Tech
- 데이터핸들링
- 코딩테스트
- 공공데이터
- P-Stage
- 네트워킹데이
- AI 프로젝트
- 그리디
- 이분탐색
- DeepLearning
- pandas
- Data Handling
- cnn
- 다이나믹프로그래밍
- Unet
- Unet 구현
- NLP 구현
- 백준
- 백트래킹
- python
- 브루트포스
- dfs
- ResNet
- DACON
- 프로그래머스
- Vision AI 경진대회
- 동적계획법
- 데이터연습
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |