또르르's 개발 Story

[Stage 1 - 이론] Model 본문

[P Stage 1] Image Classification/이론

[Stage 1 - 이론] Model

또르르21 2021. 3. 31. 12:14

1️⃣ Model 정의

1) nn.Modules 

nn.Modules를 상속받아서 사용하면 model 객체 자체를 print (오른쪽 위) 하거나 modules() 함수를 사용 (오른쪽 아래)해서 모듈의 구조를 파악할 수 있습니다.

 

https://www.edwith.org/bcaitech1

 

또한, forward 함수를 사용하면 a(x)와 같이 객체에 직접 넣어서 (오른쪽 위) 사용할 수 있습니다.

 

https://www.edwith.org/bcaitech1

 

2) nn.Module Family

nn.Module을 상속받은 모든 클래스의 공통된 특징은 모든 nn.Module은 child modules를 가질 수 있다는 점입니다.

Model을 정의하는 순간, 그 모델에 연결된 모든 module을 확인할 수 있습니다.

 

Pytorch의 nn.Module에 정의되어있는 모든 module들은 forward함수 등 똑같은 양식으로 작성되어있기 때문에 Custom 한 Model을 만들었더라도 nn.Module을 상속해서 만들게 되면 child module들과의 호환성에 문제를 걱정하지 않아도 됩니다.  

 

 

3) Parameter

모델에 정의되어 있는 modules가 가지고 있는 요소들입니다.

 

https://www.edwith.org/bcaitech1

 

각 model parameter들은 data, grad, requires_grad 변수 등을 가질 수 있습니다.

 

  • data : parameter가 가지고 있는 수치

  • grad : gradient를 저장하는 값

  • required_grad : gradient를 가질 수 있는지를 확인 (boolean), 학습을 trainable / Freeze 형태로 변경할 수 있음

 

https://www.edwith.org/bcaitech1

 

 

2️⃣ Pretrained Model

1) torchvision.models

여러가지 모델 구조와 pretrained 된 weight들을 다운로드할 수 있습니다.

 

https://pytorch.org/vision/0.8/models.html

 

2) CNN base 모델 구조

https://www.edwith.org/bcaitech1

 

여기서 대부분의 Classifier는 fully connected layer을 의미합니다.

 

 

3) 내 데이터, 모델과의 유사성

만약 ImageNet의 Pretraining을 사용하게 된다면 실생활에 존재하는 이미지를 1000개의 다른 class로 구분한 CNN model을 받게 됩니다. 내 데이터, 모델과의 유사성을 따지기 위해서는 Pre-train Model이 어떤 데이터와 모델로 pretrained 되어있는지 확인해보아야 합니다.

 

https://www.edwith.org/bcaitech1

 

하지만 Pretraining 할 때 설정했던 문제와 현재 문제와의 유사성이 떨어지게 되는 경우가 있습니다.

 

https://www.edwith.org/bcaitech1

 

4) 해결방안

해결방안은 문제 상황에 따른 Case마다 다르게 됩니다.

 

  • Case 1. 문제를 해결하기 위한 학습 데이터가 충분할 때


    - Feature Extraction (Backbone Freeze, Classifier Trainable)

    CNN Backbone이 해결하려는 문제와 High Similarity(ex. 사람, 동물 비교)하다면 Classifier만 train합니다.


    - Fine Tuning (Backbone Trainable, Classifier Trainable)

    CNN Backbone이 해결하려는 문제와 Low Similarity(ex. 같은 차종 비교)하다면 CNN Backbone과 CLassifier 둘 모두를 train 합니다.

    (아무리 Low Similarity라도 아예 처음부터 train 하는 것 보다는 pre-trained 모델을 사용하면 수렴속도나 확률이 더 좋아집니다.)

 

https://www.edwith.org/bcaitech1

 

 

  • Case 2. 학습 데이터가 충분하지 않은 경우


    - Feature Extraction (Backbone Freeze, Classifier Trainable)

    이러한 경우는 적은 데이터로도 학습이 가능합니다.

    High Similarity를 가지고 있기 때문에 적은 데이터로 Classifier만 train하는 방법을 사용합니다.


    - Fine Tuning (Backbone Trainable, Classifier Trainable)

    훈련이 안되거나 Overfitting 될 가능성이 높습니다.

 

https://www.edwith.org/bcaitech1

Comments