diff --git a/docs/source/ko/_toctree.yml b/docs/source/ko/_toctree.yml index 75632c1f59a5..1c878260f6e5 100644 --- a/docs/source/ko/_toctree.yml +++ b/docs/source/ko/_toctree.yml @@ -740,8 +740,8 @@ title: (번역중) TVLT - local: in_translation title: (번역중) ViLT - - local: in_translation - title: (번역중) Vision Encoder Decoder Models + - local: model_doc/vision-encoder-decoder + title: 비전 인코더-디코더 모델 - local: in_translation title: (번역중) Vision Text Dual Encoder - local: in_translation diff --git a/docs/source/ko/model_doc/vision-encoder-decoder.md b/docs/source/ko/model_doc/vision-encoder-decoder.md new file mode 100644 index 000000000000..9ff984fb6a8c --- /dev/null +++ b/docs/source/ko/model_doc/vision-encoder-decoder.md @@ -0,0 +1,184 @@ + + +# 비전 인코더-디코더 모델[[vision-encoder-decoder-models]] + +
+PyTorch +TensorFlow +Flax +FlashAttention +SDPA +
+ +## 개요[[overview]] + +[`VisionEncoderDecoderModel`]은 사전훈련된 Transformer 기반 비전 모델을 인코더로 (*예:* [ViT](vit), [BEiT](beit), [DeiT](deit), [Swin](swin)), +사전훈련된 언어 모델을 디코더로 (*예:* [RoBERTa](roberta), [GPT2](gpt2), [BERT](bert), [DistilBERT](distilbert)) 사용하여 이미지-텍스트 모델을 초기화하는 데 사용할 수 있습니다. + +사전훈련된 체크포인트로 이미지-텍스트 시퀀스 모델을 초기화하는 효과는 (예를 들어) Minghao Li, Tengchao Lv, Lei Cui, Yijuan Lu, Dinei Florencio, Cha Zhang, +Zhoujun Li, Furu Wei의 [TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models](https://huggingface.co/papers/2109.10282)에서 입증되었습니다. + +이러한 [`VisionEncoderDecoderModel`]이 훈련/미세 조정된 후에는 다른 모델들과 마찬가지로 저장하거나 가져올 수 있습니다 (자세한 내용은 아래 예제를 참조하세요). + +응용 예시로는 이미지 캡셔닝이 있습니다. 여기서는 인코더가 이미지를 인코딩하고, 이후 자기회귀 언어 모델이 캡션을 생성합니다. 다른 예시로는 광학 문자 인식(OCR)이 있습니다. [`VisionEncoderDecoderModel`]의 인스턴스인 [TrOCR](trocr)을 참조하세요. + +## 모델 설정으로 `VisionEncoderDecoderModel` 랜덤 초기화하기[[randomly-initializing-visionencoderdecodermodel-from-model-configurations]] + +[`VisionEncoderDecoderModel`]은 인코더와 디코더 설정을 이용해 랜덤하게 가중치를 초기화할 수 있습니다. 다음 예제에서는 인코더에 기본 [`ViTModel`] 설정을, +디코더에 기본 [`BertForCausalLM`] 설정을 사용하여 이를 수행하는 방법을 보여줍니다. + +```python +>>> from transformers import BertConfig, ViTConfig, VisionEncoderDecoderConfig, VisionEncoderDecoderModel + +>>> config_encoder = ViTConfig() +>>> config_decoder = BertConfig() + +>>> config = VisionEncoderDecoderConfig.from_encoder_decoder_configs(config_encoder, config_decoder) +>>> model = VisionEncoderDecoderModel(config=config) +``` + +## 사전훈련된 인코더와 디코더에서 `VisionEncoderDecoderModel` 초기화하기[[initialising-visionencoderdecodermodel-from-a-pretrained-encoder-and-a-pretrained-decoder]] + +[`VisionEncoderDecoderModel`]은 사전훈련된 인코더 체크포인트와 사전 훈련된 디코더 체크포인트에서 초기화할 수 있습니다. 사전 훈련된 Transformer 기반 비전 모델(*예:* [Swin](swin))은 인코더 역할을 할 수 있으며, 사전 훈련된 오토 인코딩 모델(*예:* BERT), 사전 훈련된 인과적 언어 모델(*예:* GPT2), 그리고 시퀀스-투-시퀀스 모델의 사전 훈련된 디코더 부분(*예:* BART의 디코더)은 모두 디코더로 사용할 수 있습니다. +디코더로 선택하는 아키텍처에 따라 교차 어텐션(cross-attention) 레이어가 랜덤하게 초기화될 수 있습니다. +사전 훈련된 인코더와 디코더 체크포인트에서 [`VisionEncoderDecoderModel`]을 초기화하려면 [*Warm-starting-encoder-decoder blog post*](https://huggingface.co/blog/warm-starting-encoder-decoder)에서 보여준 바와 같이 다운스트림 작업에서 모델을 미세 조정해야 합니다. +이를 위해 `VisionEncoderDecoderModel` 클래스는 [`VisionEncoderDecoderModel.from_encoder_decoder_pretrained`] 메소드를 제공합니다. + +```python +>>> from transformers import VisionEncoderDecoderModel + +>>> model = VisionEncoderDecoderModel.from_encoder_decoder_pretrained( +... "microsoft/swin-base-patch4-window7-224-in22k", "google-bert/bert-base-uncased" +... ) +``` + +## 기존 `VisionEncoderDecoderModel` 체크포인트 불러와 추론하기[[loading-an-existing-visionencoderdecodermodel-checkpoint-and-perform-inference]] + +`VisionEncoderDecoderModel` 클래스의 미세 조정된 체크포인트를 가져오기 위해, [`VisionEncoderDecoderModel`]은 Transformers의 다른 모델 아키텍처와 마찬가지로 `from_pretrained(...)` 메소드를 제공합니다. + +추론을 수행하려면 [`generate`] 메소드를 사용합니다. 이 메소드는 자기회귀적으로 텍스트를 생성할 수 있습니다. 이 메소드는 그리디(greedy), 빔 서치(beam search), 다항 샘플링(multinomial sampling) 등 다양한 형태의 디코딩을 지원합니다. + +```python +>>> import requests +>>> from PIL import Image + +>>> from transformers import GPT2TokenizerFast, ViTImageProcessor, VisionEncoderDecoderModel + +>>> # 미세 조정된 이미지 캡셔닝 모델과 해당 토크나이저 및 이미지 프로세서를 가져옵니다 +>>> model = VisionEncoderDecoderModel.from_pretrained("nlpconnect/vit-gpt2-image-captioning") +>>> tokenizer = GPT2TokenizerFast.from_pretrained("nlpconnect/vit-gpt2-image-captioning") +>>> image_processor = ViTImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning") + +>>> # 이미지에 대해 추론을 수행해보겠습니다 +>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" +>>> image = Image.open(requests.get(url, stream=True).raw) +>>> pixel_values = image_processor(image, return_tensors="pt").pixel_values + +>>> # 자기회귀적으로 캡션 생성 (기본적으로 그리디 디코딩 사용) +>>> generated_ids = model.generate(pixel_values) +>>> generated_text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] +>>> print(generated_text) +a cat laying on a blanket next to a cat laying on a bed +``` + +## PyTorch 체크포인트를 `TFVisionEncoderDecoderModel`로 가져오기[[loading-a-pytorch-checkpoint-into-tfvisionencoderdecodermodel-]] + +[`TFVisionEncoderDecoderModel.from_pretrained`]는 현재 PyTorch 체크포인트에서 모델을 초기화하는 것을 지원하지 않습니다. 이 메소드에 `from_pt=True`를 전달하면 예외가 발생합니다. 특정 비전 인코더-디코더 모델에 PyTorch 체크포인트만 있는 경우, 해결 방법은 다음과 같습니다: + +```python +>>> from transformers import VisionEncoderDecoderModel, TFVisionEncoderDecoderModel + +>>> _model = VisionEncoderDecoderModel.from_pretrained("nlpconnect/vit-gpt2-image-captioning") + +>>> _model.encoder.save_pretrained("./encoder") +>>> _model.decoder.save_pretrained("./decoder") + +>>> model = TFVisionEncoderDecoderModel.from_encoder_decoder_pretrained( +... "./encoder", "./decoder", encoder_from_pt=True, decoder_from_pt=True +... ) +>>> # 이것은 이 특정 모델의 몇 가지 특정 속성을 복사하기 위한 것입니다. +>>> model.config = _model.config +``` + +## 훈련[[training]] + +모델이 생성되면, (이미지, 텍스트) 쌍으로 구성된 데이터셋을 사용하여 BART, T5 또는 다른 인코더-디코더 모델과 유사하게 미세 조정할 수 있습니다. +보시다시피, 손실을 계산하기 위해 모델에 필요한 입력은 단 2개입니다: `pixel_values` (이미지)와 `labels` (인코딩된 대상 시퀀스의 `input_ids`)입니다. + +```python +>>> from transformers import ViTImageProcessor, BertTokenizer, VisionEncoderDecoderModel +>>> from datasets import load_dataset + +>>> image_processor = ViTImageProcessor.from_pretrained("google/vit-base-patch16-224-in21k") +>>> tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased") +>>> model = VisionEncoderDecoderModel.from_encoder_decoder_pretrained( +... "google/vit-base-patch16-224-in21k", "google-bert/bert-base-uncased" +... ) + +>>> model.config.decoder_start_token_id = tokenizer.cls_token_id +>>> model.config.pad_token_id = tokenizer.pad_token_id + +>>> dataset = load_dataset("huggingface/cats-image") +>>> image = dataset["test"]["image"][0] +>>> pixel_values = image_processor(image, return_tensors="pt").pixel_values + +>>> labels = tokenizer( +... "an image of two cats chilling on a couch", +... return_tensors="pt", +... ).input_ids + +>>> # forward 함수가 자동으로 올바른 decoder_input_ids를 생성합니다 +>>> loss = model(pixel_values=pixel_values, labels=labels).loss +``` + +이 모델은 [nielsr](https://github.com/nielsrogge)이 기여했습니다. 이 모델의 TensorFlow와 Flax 버전은 +[ydshieh](https://github.com/ydshieh)가 기여했습니다. + +## VisionEncoderDecoderConfig[[transformers.VisionEncoderDecoderConfig]] + +[[autodoc]] VisionEncoderDecoderConfig + + + + +## VisionEncoderDecoderModel[[transformers.VisionEncoderDecoderModel]] + +[[autodoc]] VisionEncoderDecoderModel + - forward + - from_encoder_decoder_pretrained + + + + +## TFVisionEncoderDecoderModel[[transformers.TFVisionEncoderDecoderModel]] + +[[autodoc]] TFVisionEncoderDecoderModel + - call + - from_encoder_decoder_pretrained + + + + +## FlaxVisionEncoderDecoderModel[[transformers.FlaxVisionEncoderDecoderModel]] + +[[autodoc]] FlaxVisionEncoderDecoderModel + - __call__ + - from_encoder_decoder_pretrained + + +