3 minute read

Model

이전 배웠던 데이터셋과 데이터 로드를 통해 뽑은 데이터를 출력으로 보낼 모델을 구성해 보자.

모델이 뭐냐?

  • “In general, a model is an informative representation of an object, person or system
  • 시스템을 표현하는 방식을 모델이라고 한다.

파이토치로 모델 디자인하기

Pytorch

  • 오픈소스 머신러닝 프레임워크
  • pythonic하다.
  • 슬로건 “FROM RESEARCH TO PRODUCTION” -> 개발에 자유로움이 있다.

Model class

  • Pytorch 모델의 모든 레이어는 nn.Module 클래스를 따른다.
  • forward() 함수 -> 모델이 호출 되었을 때 실행되는 함수.

nn.Module Family

  • nn.Module을 상속받은 모든 클래스의 공통된 특징
  • 모든 nn.Module은 child modules를 가질 수 있다. -> 내 모델을 정의하는 순간, 그 모델에 연결된 모든 모듈을 확인할 수 있다.
  • 모든 nn.Module은 forward() 함수를 가진다. -> 내가 정의한 모델의 forward()를 한번만 실행한 것으로 정보를 가질 수 있다.(그 모델의 forward에 정의된 모듈 각각의 forward()가 실행된다.)

Parameter

  • 모델에 정의되어 있는 modules가 가지고 있는 계산에 쓰일 Parameter
  • Parameter()로 정의해야함.
  • 각 모델 파라미터들은 data, grad, requires_grad변수 등을 가지고 있다.

state_dict() -> 모델의 상태를 알 수 있다.(dict 형태)

Pretrained Model

Pretrained Model을 어떻게 활용하는지 방법에 대해 알아보자.

배경

  • 모델 일반화를 위해 매번 수 많은 이미지를 학습시키는 것은 까다롭고 비효율적이다.
  • 좋은 품질, 대용량의 데이터로 미리 학습한 모델 -> 내 목적에 맞게 사용하자.

TORCHVISION.MODELS

  • torchvision.models에 pretrained model이 많이 공개되어 있다.
  • https://pytorch.org/vision/stable/models.html
  • Pretrained Weight를 쉽게 다운로드 가능하다.
  • timm

Transfer Learning

  • pretrained 모델을 가져와 내 문제에 적용시켜 훈련시키는 것.

ImageNet Pretraining

ImageNet Images -> CNN BackBone -> Classifier -> 1000Class
실생활에 존재하는 이미지를 1000개의 다른 class로 구분한다.

구름 위성 사진 -> CNN BackBone -> Classifier -> 구름 종류
어떻게 구름 위성 사진을 구분하는데 pretrained model을 적용할까?

Case by Case

Case 1. 학습 데이터가 매우 충분할 때

Data Augmentation

  • high similarity -> 매우 유사할때(ex 실생활의 이미지 해결)
    • Classifier 만 새로 적용한다.
  • Low similarity -> 유사하지 않을때(ex 주제가 다를때, 위성사진에 적용)
    • CNN Backbone 위에서 모델을 개선하고 Classifier를 수정하여 적용함.

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

Data Augmentation

  • high similarity -> 매우 유사할때
    • CNN Backbone 위에서 모델을 개선하고 Classifier를 수정하여 적용함.
  • Low similarity -> 유사하지 않을때
    • Pretrained model을 적용하는 것을 추천하지 않는다.

Comments