본문 바로가기

인공지능 공부

PyTorch Image Models(timm) 퀵 가이드

https://towardsdatascience.com/getting-started-with-pytorch-image-models-timm-a-practitioners-guide-4e77b4bf9055

 

Getting Started with PyTorch Image Models (timm): a practitioner’s guide

The purpose of this guide is to explore PyTorch Image Models (timm) from a practitioner’s point of view, for use in custom scripts.

towardsdatascience.com

 

원문을 공부할겸 해석해본다.

 

PyTorch Image Models(timm)은 이미지 모델, 옵티마이져, 스케쥴러, 강화 기능 등을 포함하는 콜렉션으로 SOTA 이미지 구분을 위한  라이브러리이다.

 

컴퓨터 비전 문제에 딥러닝을 적용하기 위해 손쉽게 사용될 수 있는 코드가 아예없거나 매우 적은 솔루션들의 숫자는 점점 늘어가고 있지만, MS의 CSE로서의 역할을 하다보면, 특정한 문제에 적용될 수 있는 커스텀 솔루션을 찾고자 하는 고객들을 자주 만나왔다. 새로운 아키텍쳐나 트레이닝 기술등의 도입을 통해 급격하게 발전하고 있는 AI 분야 특성상, 당신이 전문가건 초보자건 최신의 기술을 따라잡는 것이나, 학계의 벤치마크 결과와 유사한 수준의 성능을 새로운 작업에 적용하는 것은 매우 어려운 일이다.

 

나에게 있어 처음부터 트레이닝을 하거나 기존의 모델을 새로운 작업에 맞게 튜닝을 하는 작업, 아니면 기존 컴포넌트를 활용하여 속도를 향상시키는 방법을 찾는 작업을 할때 timm은 파이토치에서 컴퓨터 비젼을 위해 내가 가장 선호하는 라이브러리 중에 하나이다. 그러나 timm이 러퍼런스 트레이닝과 검증 스크립트, 핵심 컴포넌트를 다루는 문서를 제공하고 있긴하지만, 라이브러리가 제공하는 특징이 많다보니 커스텀한 사용 시에 어디서 부터 시작해야 하는지 파악이 어려울 수 있다.

 

이 가이드의 목적은 timm을 현역개발자의 뷰포인트에서 탐험해볼 수 있게 하는 것으로, 커스텀 트레이닝 스크립트 과정에서 timm이 가지고 있는 특징이나 컴포넌트를 어떻게 사용할 수 있는지에 초점을 맞추고 있다. 따라서 작동원리나 구현 방법들에 대한 내용은 다루고 있지 않다. 이런 부분은 원본 논문이나 timmdocs를 보기를 바란다. 추가로 이 글은 timm의 모든 내용을 알고 썼다기 보다는 내가 timm을 쓰면서 접해왔던 부분에 한정되어 기술되었다.

 

모든 정보는 timm==0.5.4 를 기준으로 작성되었다.

 

Table of Contents

이 글을 순서대로 읽어도 좋지만, 라이브러리의 일부 파트를 보는 레퍼런스로 사용하는 것도 좋은 방법이다. 차례는 다음과 같다.

 

1. 모델

 - 커스터마이징 모델

 - 피쳐 추출

 - 다른 포맷으로 익스포트하기

 

2. 데이터 강화

 - RandAugment

 - CutMix and MixUp

 

3. 데이터셋

 - TorchVision 데이터셋 읽기

 - TensorFlow 데이터셋 읽기

 - local folder 데이터셋 읽기

 - ImageDataset 클래스

 

4. 옵티마이저

 - 사용 예제

 - 둘러보기

 

5. 스케쥴러

 - 사용 예제

 - learning rate 스케쥴 최적화하기

 

6. Exponential Moving Average model

 

7. 하나로 합치기

 

 

 

1. 모델

 timm의 가장 대중적인 특징 중 하나는 방대하고, 지속적으로 추가되고있는 모델 아키텍쳐이다. 대부분의 제공되는 모델은 미리 학습된 가중치를 포함하고 있으며, 쉽게 다운로드 하여 사용할 수 있다.

 

 - 일반적인 사용법

 모델을 생성하는 가장 쉬운 방법은 create_model 를 사용하는 것이다.

 

 

봐서 알겠지만, 정형화된 PyTorch 모델이다.

 

어떻게 이 모델을 사용하는지에 대한 추가적인 이해를 위해 이 모델의 config를 확인해보자. config를 통해 입력데이터 노멀라이즈 하기 위해 사용한 statistics, 아웃풋 클래스의 숫자, 네트워크의 분류 부분에 사용된 이름 등을 알 수 있다.

 

 

- 인풋 채널의 숫자가 다양한 이미지를 위한 미리 학습된 모델

 

 한가지 덜 알려졌지만 아주 유용한 timm model의 특징은 다른 라이브러리들과 달리 다양한 숫자의 채널을 가진 입력이미지 상에서 작동할 수 있다는 점이다. Intuitively, timm does this by summing the weights of the initial convolutional layer for channels fewer than 3, or intelligently replicating these weights to the desired number of channels otherwise.

 

채널의 숫자 또한 create_model 시에 쉽게 넣어줄 수 있다.

 

 - 모델 커스터마이징 하기

 create_model은 우리의 작업을 위해 모델을 커스터마이즈할 수 있게 해주는 다양한 추가기능을 가지고 있다.

 이 추가기능이 지원해주는 수준은 근간이 되는 모델의 아키텍쳐에 따라 다르다.

 

 - 클래스의 숫자 바꾸기

 

 - 전역 풀링 옵션

 

 - 기존 모델 수정하기

 

 - 새로운 classification head 만들기

 

 - feature 추출

 

 - multiple feature outputs

 

 - Torch FX 사용하기 

 

 - 다른 포맷으로 출력하기

 

 * torch script로 익스포트하기

 * ONNX로 익스포트하기

 

2. 데이터 증강

 - RandAugment

 - CutMix and Mixup

 

3. 데이터셋

 - TorchVision 데이터셋 읽어오기

 - TensorFlow 데이터셋 읽어오기

 - 로컬 폴더의 데이터 읽어오기

 - ImageDataset 클래스

  * 파서를 수동으로 선택하기

  * 커스텀 파서 만들기

 

4. 옵티마이저

 timm이 다수의 옵티마이저를 지원하는 것을 특징으로 한다. AdamP, RMSPropTF, LAMB, AdaBefief, MADGRAD, AdaHessian 등이 대표적이다.

 

 - 사용 예제

 - 둘러보기(Lookahead)

 

5. 스케쥴러

 - 사용 예제

 

 - Learning rate 스케쥴 조절하기

6. Exponential Moving Average model

 

7.Putting it all together!

 

 

결론

 timm에 포함된 다양한 특징들의 오버뷰와 어떻게 커스텀 트레이닝 스크립트를 만들 수 있는 지에 대해 잘 설명했길 바란다.

 마지막으로 이 대단한 라이브러리를 만든 Ross Wightman에게 별을 달아주자!

 

 

처음엔 집중이 안되어서 열심히 번역했는데, 뒤로갈 수록 그냥 이런게 있구나 하면서 넘어왔다. 중간 중간 비어있는 부분은 나중에 필요할 때 찾아보면서 추가기입해야지.