비전 트랜스포머(ViT)를 허깅 페이스 트랜스포머로 이미지 분류에 미세 조정하기
개요
허깅 페이스는 이미지 분류 작업에 비전 트랜스포머(ViT)를 미세 조정하는 워크플로를 자세히 설명했습니다. 이미지 패치를 토큰으로 취급하여(자연어 처리(NLP)에서 단어가 취급되는 방식과 유사하게) ViT는 트랜스포머 기반 아키텍처를 컴퓨터 비전에 적용할 수 있게 합니다. 이 과정은 이미지를 서브 이미지 패치의 그리드로 분할하고, 각 패치를 선형 투영으로 임베딩한 후, resulting 토큰 시퀀스를 트랜스포머 모델에 전달하는 것을 포함합니다.
ViTImageProcessor를 사용한 이미지 전처리
올바른 이미지 변환은 ViT 모델 성능에 중요합니다. 왜냐하면 모델은 원래 훈련 중에 사용된 특정 정규화 및 리사이징 파라미터를 따르는 입력을 기대하기 때문입니다.
일관성을 유지하기 위해 ViTImageProcessor는 사전 훈련된 모델(예: google/vit-base-patch16-224-in21k)에서 구성을 로드하는 데 사용됩니다. 프로세서는 다음 작업을 처리합니다:
- Resizing: 이미지를 표준 크기(예: 224x224 픽셀)로 조정합니다.
- Normalization: 픽셀 데이터에 특정 평균과 표준편차 값을 적용합니다.
- Resampling: 모델에 맞게 이미지가 올바르게 샘플링되도록 보장합니다.
이 도구를 통해 이미지를 처리하면 모델에 필요한 숫자 텐서 표현인 pixel_values를 포함하는 사전이 반환됩니다.
트랜스폼을 사용한 효율적인 데이터셋 처리
이미지 데이터셋을 다룰 때 ds.map을 통해 모든 예시에 변형을 적용하면 계산 비용이 많이 들고 느릴 수 있습니다. 대신 허깅 페이스는 datasets 라이브러리의 with_transform 메서드를 사용하는 것을 권장합니다.
트랜스폼은 전체 데이터셋을 사전 처리하는 대신 예시가 인덱싱될 때 실시간으로 적용됩니다. 이 접근 방식은 배치 데이터를 처리할 수 있는 트랜스폼 함수가 필요하며, PIL 이미지 목록을 필요한 pixel_values 텐서로 변환하면서 관련된 레이블을 유지해야 합니다.
미세 조정 파이프라인 및 구성
ViT 모델을 미세 조정하여 모델이 수렴하고 올바르게 평가되도록 하는 몇 가지 핵심 구성 요소가 포함됩니다.
데이터 콜레이션 및 메트릭
배치가 딕셔너리 목록으로 제공되므로, pixel_values와 labels를 토치 텐서로 스택하기 위해 사용자 정의 collate_fn이 필요합니다. 평가에서는 일반적으로 evaluate 라이브러리의 accuracy 메트릭을 사용하여 모델의 예측 클래스(예측에 대해 np.argmax를 통해 결정)와 실제 레이블을 비교합니다.
모델 초기화
사전 훈련된 ViT를 특정 작업에 맞게 조정하기 위해 ViTForImageClassification이 사용됩니다. 모델은 num_labels로 초기화되어 올바른 수의 출력 단위를 가진 분류 헤드를 생성합니다. 또한, 허깅 페이스 허브에서 호스팅될 때 모델의 출력이 인간이 읽을 수 있도록 id2label과 label2id 매핑이 제공됩니다.
훈련 인수
TrainingArguments의 주요 구성에는 다음이 포함됩니다:
remove_unused_columns=False: 이는 중요합니다. 기본적으로 트레이너는 모델의 순전파에 사용되지 않는 컬럼을 삭제합니다. 그러나image컬럼은pixel_values를 생성하기 위해 트랜스폼 함수에서 필요하므로 보존해야 합니다.fp16=True: 혼합 정밀도 훈련을 활성화하여 메모리 사용량을 줄이고 훈련 속도를 높입니다.evaluation_strategy="steps": 훈련 과정 중에 주기적인 평가를 허용합니다.
성능 결과
제공된 예시에서 beans 데이터셋(건강한 vs. unhealthy bean 잎을 분류)을 사용한 미세 조정 ViT 모델은 4 에포크 훈련 후 평가 정확도 0.985 및 평가 손실 0.0637을 달성했습니다.
Sources
관련
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch