HuggingFace의 feature extractor를 알아보자.
HuggingFace
는 ai플랫폼으로, 트랜스포머 기반으로 하는 다양한 모델과 학습에 사용되는 기능을 구현해놓은 모듈이다. 자연어, 음성, 이미지, 멀티모달 등의 모델이 오픈되어있다. 최근 ViT모델을 학습 중인데 HuggingFace에서 원하는 모델을 클릭하면, 해당 모델을 inference하는 코드를 확인할 수 있다. google vit base 모델의 경우, img데이터를 사전에 feature extractor에 통과시킨 후 리턴값을 모델에 넣어 추론하는 구조였다.
살펴볼 모델은 ViT로, google/vit-base-patch16-224
이다.
🤗 허깅페이스에서 해당 메서드가 어떤 기능을 수행하는지 확인할 때엔 HuggingFace 깃에서 소스 코드를 확인하는 것을 추천한다.
허깅페이스에서 feature extractor의 정의는 다음과 같다.
A feature extractor is in charge of preparing input features for audio or vision models. This includes feature extraction from sequences, e.g., pre-processing audio files to Log-Mel Spectrogram features, feature extraction from images e.g. cropping image image files, but also padding, normalization, and conversion to Numpy, PyTorch, and TensorFlow tensors.
extractor = ViTFeatureExtractor.from_pretrained('google/vit-base-patch16-224')
print(extractor)
ViTFeatureExtractor {
"do_normalize": true,
"do_rescale": true,
"do_resize": true,
"image_mean": [
0.5,
0.5,
0.5
],
"image_processor_type": "ViTFeatureExtractor",
"image_std": [
0.5,
0.5,
0.5
],
"resample": 2,
"rescale_factor": 0.00392156862745098,
"size": {
"height": 224,
"width": 224
}
}
사이즈 조정, 정규화 등 모델 사전 학습 전에 필수로 수행되어야 하는 기능을 수행하는 것을 확인할 수 있다.
즉 전처리 모듈인 것이다.
(1) PIL IMAGE : 일단 PIL 이미지 객체를 INPUT으로 받는다.
(2) SIZE : (SIZE, SIZE) 크롭할 사이즈를 전달할 수 있다.
만약 파라미터로 전달한 사이즈보다 이미지의 크기가 작다면, Padding을 통해 나머지를 채워넣는다.
이미지 데이터를 augmentation을 하지 않는다면 단순하게 PIL을 사용해 이미지를 오픈하고 Feature extractor에 집어 넣어 편하게 전처리를 진행할 수 있을 것이다.
그러나 보통은 augmentation은 거의 필수로..진행하기때문에 그럴 일은 없을 것 같다.
추론을 할 때 편하게 이미지를 전처리하는 용도로 사용하면 편할 것 같다.
결론은, huggingFace에서 feature Extractor 모듈은 전처리 모듈이다.
+) feature extractor를 구글링하다가, TIMM의 feature extraction 모듈을 발견하였다.
사용하는 모델의 feature extractor(구조적 의미)에서 원하는 구조만 cut한 객체를 저장한다. 그 객체에 image를 전달하여 cut 이후 feature extractor가 이미지 피쳐를 어떻게 추출하는지 확인할 수 있다.