본문 바로가기
머신러닝, 딥러닝

[Pytorch] 파이토치 사전학습 모델 사용법

by 고경수 2023. 5. 15.

목차

transfer learning / fine-tuning

1. torchvision

2. PyTorch Hub

3. Model Zoo

4. Huggingface


먼저 사전학습과 관련된 두 가지 용어를 정의하겠다.

transfer learning / fine - tuning

  • transfer learning : 특정 분야에서 학습된 신경망을 유사하거나 전혀 새로운 분야에서 사용되는 신경망의 학습에 이용하는 방법. 학습 데이터의 수가 적을 때 효과적
  • fine tuning : 기존에 학습되어 있는 모델을 기반으로 아키텍처를 새로운 목적에 맞게 변형 이미 학습된 모델의 가중치를 미세하게 조정하여 학습시키는 방법

전이학습이나 파인튜닝을 하기 위해선 사전에 학습된 모델이 필요하다.

다행히 파이토치 자체에서나 다양한 사이트에서 사전학습된 모델을 제공하고 있다.

 

먼저 살펴볼 라이브러리는 torchvision이다.

1. torchvision

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

 

Models and pre-trained weights — Torchvision main documentation

Shortcuts

pytorch.org

torchvision은 torchvision.models에 다양한 모델 아키텍쳐와 사전학습된 가중치들을 제공하고 있다.

예시로 Classification의 경우, 백본으로 자주 쓰이는 AlexNet, VGGNet, ResNet 뿐만 아니라 Swin transformer, Swin transformer V2, Vision Transformer의 아키텍처 및 이미지넷으로 학습된 가중치 또한 제공한다.

사용 방법은 간단하다.

예를 들어, Swin Transformer V2_B를 사용하고 싶다

model = swin_v2_b(weights = Swin_V2_B_Weights.IMAGENET1K_V1)

다음과 같이 입력해주면 된다. model은 전부 소문자, 가중치는 중간중간 맨 앞글자에 대문자가 들어가는 모습이다.

 

전이학습 또한 가능하다. 해당 문서에서는 개미와 벌을 분류하는 문제로 전이학습을 시도한다.

https://tutorials.pytorch.kr/beginner/transfer_learning_tutorial.html

 

컴퓨터 비전(Vision)을 위한 전이학습(Transfer Learning)

Author: Sasank Chilamkurthy, 번역: 박정환,. 이 튜토리얼에서는 전이학습(Transfer Learning)을 이용하여 이미지 분류를 위한 합성곱 신경망을 어떻게 학습시키는지 배워보겠습니다. 전이학습에 대해서는 CS

tutorials.pytorch.kr

model_ft = models.resnet18(pretrained=True)
num_ftrs = model_ft.fc.in_features
# 여기서 각 출력 샘플의 크기는 2로 설정합니다.
# 또는, nn.Linear(num_ftrs, len (class_names))로 일반화할 수 있습니다.
model_ft.fc = nn.Linear(num_ftrs, 2)

이미지넷은 1000개의 클래스로 분류하는 문제이지만 우리가 하고 싶은 것은 개미와 벌 2개의 클래스로 분류하는 것이기 때문에 마지막 fc layer만 output을 1000에서 2로 변경하여 사용한다.

 

이후에 train 과정을 거치면 이미지넷으로 학습된 가중치를 초기 가중치로 설정 후에 학습 과정을 하는 fine-tuning이 가능하다.

 

2. PyTorch Hub

다음은 파이토치 허브이다.

PyTorch에는 PyTorch Hub라는 사전 훈련된 모델 전용 섹션이 있다.


여기에서 범주별로 모델을 필터링하고 키워드를 사용하여 검색할 수도 있다.

각 모델에서 코드를 포함하여 사용 방법에 대한 간단한 설명과 지침을 찾을 수 있다.

https://pytorch.org/hub/research-models/compact

 

PyTorch

An open source machine learning framework that accelerates the path from research prototyping to production deployment.

pytorch.org

 

예를 들어, YOLOv5의 경우

model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

다음과 같이 간단하게 사전학습된 모델을 가져와서 사용할 수 있다.

 

* 코드 개발자가 파이토치 허브에 등록하고 싶으면, 깃허브에서 hubconf.py 라는 코드를 추가하는 형식? 인 것 같다.

 

만약 커스텀 데이터로 fine tuning을 하고 싶다면 해당 문서를 찾아가 확인해봐야 하는데,

YOLOv5는 다음과 같이 메뉴얼을 제시한다.

 

https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data

 

Train Custom Data

YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/yolov5 development by creating an account on GitHub.

github.com

 

데이터를 YOLOv5의 형식에 맞게 만들어 준 뒤에,

사전학습된 가중치를 가져다가 학습시키면 된다. 기본적으로 사전학습된 가중치의 사용을 권장한다고 한다.

 

3. Model Zoo

Model Zoo 란 말그대로 모델들을 모아놓은 곳으로, 오픈 소스 딥러닝 코드와 사전 학습된 모델을 공유하는 플랫폼이다.

다양한 프레임워크와 카테고리별로 모델을 검색하고 다운로드할 수 있다.

 

3-1. modelzoo.co

https://modelzoo.co/

 

여러 프레임워크와 카테고리에 걸쳐서 딥러닝 코드와 사전 학습된 모델을 제공하는 사이트이다. PyTorch, TensorFlow, Keras, Caffe 등의 프레임워크와 이미지, 자연어, 음성, 비디오 등의 카테고리를 볼 수 있다.

pytorch로 카테고리를 검색한 모습

예시로, MMDetection의 경우를 살펴보면

모든 모델은 coco_2017_train 데이터로 pre-train 되어 있다고 한다. 즉 어떠한 모델을 쓰더라도 자동으로 사전학습된 모델의 가중치를 가져다 쓸 수 있다는 것.

제공되는 모델들의 일부는 다음과 같다.

3-2. TorchServe Model zoo

https://pytorch.org/serve/model_zoo.html

 

TorchServe에서 제공하는 사전 학습된 모델들의 모음이다. TorchServe는 PyTorch 모델을 배포하기 위한 플랫폼이다. ResNet-18, Densenet-161, BERT 등의 모델을 사용할 수 있다.

 

3-3. PyTorch Model Zoo

https://pytorch.org/docs/stable/model_zoo.html

 

PyTorch에서 제공하는 사전 학습된 모델들의 모음이다. torchvision, torchaudio, torchtext 등의 라이브러리에서 사용할 수 있는 다양한 모델을 제공한다.

 

위의 사이트들은 각각 다른 model zoo를 제공하고 있으니 필요에 따라 방문해보시길 바랍니다.

 

4. Huggingface

마지막으로 허깅페이스이다.

허깅페이스를 이용하면, 트랜스포머 모델 사용시 layer, model 등을 선언하거나 학습 스크립트를 구현해야 하는 수고를 덜 수 있다. 다만 high level로 모듈화 되어있기 때문에 커스터마이징이 비교적 어렵다. (커스터마이징은 소스코드를 참고하여 원하는 class를 상속받아 overriding 하면 된다.)

 

 

huggingface의 클래스에서 사전 학습된 모델을 불러오는 방법은 간단하다.

.from_pretrained()

 

from_pretrained() 메서드를 이용하면 된다.

 

추가적으로 커스텀 데이터셋을 이용하여 object detection transformer를 학습시키는 영상, 코드를 첨부한다.

 

How to Train Object Detection Transformer on Custom Dataset

https://www.youtube.com/watch?v=AM8D4j9KoaU&ab_channel=Roboflow 

https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/train-huggingface-detr-on-custom-dataset.ipynb#scrollTo=fe6r7u1bffJ1

 

train-huggingface-detr-on-custom-dataset.ipynb

Run, share, and edit Python notebooks

colab.research.google.com

 

과정은 간단히 보면 다음과 같다.

1. Model / Image-processor 선언

2. Create COCO data loaders

    COCO data format으로 저장된 데이터셋을 불러온다.

3. Train model

 

*추후 추가할 내용 : timm에 대해 공부해서 추가할 예정


그 외에 딥러닝 코드/데이터셋 제공 사이트로는,

  • paperswithcode: 머신러닝과 딥러닝 관련된 논문과 코드를 연결해주는 사이트입니다. 다양한 분야와 태스크에 대한 최신 연구와 벤치마크를 볼 수 있습니다.
  • GitHub: 오픈소스 소프트웨어 개발 플랫폼으로, 많은 딥러닝 프로젝트와 코드가 공개되어 있습니다. 다른 개발자들과 협업하고 피드백을 받을 수 있습니다.
  • Google AI Datasets: 구글에서 제공하는 딥러닝에 사용할 수 있는 데이터셋들의 모음입니다. 자연어, 이미지, 비디오, 오디오 등 다양한 유형의 데이터를 찾을 수 있습니다.
  • Kaggle: 데이터 사이언스와 머신러닝에 관련된 커뮤니티 사이트입니다. 데이터셋과 코드뿐만 아니라 경진대회나 강의도 제공합니다.

등이 있다.

'머신러닝, 딥러닝' 카테고리의 다른 글

[머신러닝] 앙상블(ensemble) 학습  (0) 2023.01.17