AITech 학습정리-[Day 31] Image Classification 1, Annotation data efficient learning
과거의 것들/AI Tech boostcamp

AITech 학습정리-[Day 31] Image Classification 1, Annotation data efficient learning

=====================================

학습내용

(1강) Image classification 1

 

1. CV?

사람에겐 오감과 그 외 연설, 사회적위치, 표정 등의 사회적 요소로 배우지만 여기의 핵심은 시각이다. 컴퓨터비전이 그런 분야..

원래 사람이 특징을 추출했지만 편견등의 문제도 있을 수 있고 여러가지 있음. 그래서 특징 추출조차 컴퓨터가 하게 해서 비교적 객관적인 특징을 추출하게 만든게 딥러닝이다.

 

2. Image Classification

 
https://medium.com/capital-one-tech/k-nearest-neighbors-knn-algorithm-for-machine-learning-e883219c8f26

위 처럼 구분하는 문제. 저 기준선을 학습할거다.

 

그래서 사실 세상의 모든 데이터를 한번에 넣고 학습하는게 이상적이지만 실제로 사용하기엔 평생 걸리고 메모리 부족으로 압축해서 학습한다.





그래서 원래 사람이 하던 특징추출을 기계가 자신의 기준에 의해 결정한다.

 

원래 알고있는게 Fully connected layer니까 이미지의 모든 픽셀을 넣어서 학습하는 방법으로 진행했었음. 하지만 이렇게 하면 이미지가 부분적으로 보여지거나 할 때 다른 결과가 나와서 지역적으로 학습하기로 함. 이게 Convolutional Neural Networks.

이 방법이 너무 좋으니 다른 것들의 기초가 된다. 여기서 하는건 이렇게 CNN으로 만들어서 한 것중 Image-level classification.

 

3. CNN architectures for image classification 1

이미지 분류엔 대충 이런 역사가 있음.


Receptive filed는 고려되는 범위.



AlexNet로 conv, poll, flat으로 한거라면 VGGNet는 좀 더 확장한 느낌.



(2강) Annotation data efficient learning

 

1. Data augmentation

세상엔 데이터가 많지만 실제의 모든 정보를 담아낼 순 없다.. 이 간극을 조금이라도 줄이면서 데이터 양을 늘리자.

cutmix


이렇게 많은 기법들 중 어떻게 하면 성능이 제일 잘 나오는지 적용시키는 RandAugment.

이런 data argumentation을 하면 잘 나온다.

 

2. Leveraging pre-trained information

이 기법들을 통채로 하기엔 데이터양도 많아야 하고 너무 비싸다.. 작은걸로 하는 방법. 미리 훈련한거 살짝 바꿔서 쓰기.

가능한 이유가 다른 물체라도 서로간의 공통점이 약간씩 있어서 가능하다는게 정론인듯.

Approach 1: Transfer knowledge from a pre-trained task to a new task

앞의 CNN 부분은 고정하고 뒤의 fully connected layer만 업데이트 한다. 비교적 작은 작업에 쓴다고 함.

Approach 2: Fine-tuning the whole model

앞의 통상적인 개념이 들어가있는 CNN 부분은 작은 learning rate로, Fully connected layer는 큰 learning rate로 학습한다. 그래서 전체적인 개념은 작게 수정하면서 원하는 목적의 모델에 맞게 빠르게 변형된다고 한다. 1번과 다르게 큰 작업에서 사용된다고 함.

Knowledge distillation

 

Teacher-student network structure 방식이라는 것도 있다고 한다. Teacher model은 큰 모델로, Student는 작은 모델로 하고 둘의 output이 비슷하게 나오도록 student를 훈련한다고 한다. unlabeled data에 대해서만 훈련할 수 있기 때문에 Unsupervised learning이라고 한다.

근데 얘내를 좀 더 확장시켜서 사용하는 듯.

prediction의 경우 우리가 쓰던 one-hot vector말고 soft label을 쓴다고 한다. 이유는 학습목적이 단순히 구분하는 것이 아닌 teacher의 대략적인 구조를 그대로 익히는데 목적이 있기 때문이다.

 


softmax with temperature (T) 의 경우도 비슷한 이유인 것 같다.


Loss도 2가지가 있는데 각각 목적이 다르다.


Distillation Loss의 목적은 teacher의 network를 따라하여 비슷하게 하는 것. KLdiv(Soft label, Soft prediction)

Student Loss는 진짜 정답.

CrossEntropy(Hard label, Soft prediction)

이 두개의 Loss를 더한게 최종 loss가 된다.

 

3. Leveraging unlabeled dataset for training

semi-label

leveraging 
  • 미국식 듣기
  • 영국식 듣기
웹수집
 
  • 레버리징. 외부로부터 자본이나 자금 따위를 들여와서 이용하는 일.

사람이 아무리 많은 label을 정의했더라도 그거보다 더 많은 unlabel이 더 많을 수밖에 없다. 그래서 pre-trained model로 unlabeled data까지 임의의 pseudo-labeled data로 만들어서 다음 model엔 이 data들도 넣어 학습하는 것 같다.


원래 여기서도 Teacher는 크고 Student는 작은 모델을 썼으나 그 반대로 Teacher model은 작은거, Student를 큰걸로 쓰는게 성능이 좋다는 결과가 나왔나 보다. 이렇게 pseudo-labeled data에 RandAugment까지 써서 학습하고 이렇게 새로 나온걸 teacher로 해서 다시하고... 하는걸 반복하다 보면 성능이 정말 좋더라.



 

 

 

======================================

퀴즈 / 과제

https://colab.research.google.com/drive/1eUjns81HGisxzWoMfyqO55SfiAEAK8g8?usp=sharing

 

그냥 pytorch 코드일 뿐만 아니라 전체적인 과정과 뒤에 후처리 결과 통계까지 어떻게 시각화하는지 보여줌. 참고할만 한듯.

 

=======================================

피어세션

어려운거 적을때 인간보다 기술적 어려움.

프로젝트를 양보다 질로. 대부분 적고 깊은걸 좋아하는듯.

좋은 기업은 단순히 익히는 걸로는 끝내면 안된다. 틀린 대답을 해도 계속 꼬리를 물고 들어온다.

짧으면 안좋아하더라. 적어도 한달? 길게 잡는게 좋은듯. 깊게 안해봤냐.

==================================

후기

진짜 공부하자..