-
Notifications
You must be signed in to change notification settings - Fork 26.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
🌐 [i18n-KO] Translated
image_to_image.md
to Korean (#32327)
* docs: ko: tasks/image_to_image.md * feat: nmt draft * fix: manual edits * fix: resolve suggestions Co-authored-by: Jihun Lim <31366038+heuristicwave@users.noreply.github.com> Co-authored-by: Jiwook Han <33192762+mreraser@users.noreply.github.com> * fix: handle remaining suggestions Co-authored-by: Jiwook Han <33192762+mreraser@users.noreply.github.com> --------- Co-authored-by: Jihun Lim <31366038+heuristicwave@users.noreply.github.com> Co-authored-by: Jiwook Han <33192762+mreraser@users.noreply.github.com>
- Loading branch information
1 parent
3b193c7
commit 6af0854
Showing
2 changed files
with
134 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
<!--Copyright 2023 The HuggingFace Team. All rights reserved. | ||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with | ||
the License. You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on | ||
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the | ||
specific language governing permissions and limitations under the License. | ||
⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be | ||
rendered properly in your Markdown viewer. | ||
--> | ||
|
||
# Image-to-Image 작업 가이드 [[image-to-image-task-guide]] | ||
|
||
[[open-in-colab]] | ||
|
||
Image-to-Image 작업은 애플리케이션이 이미지를 입력받아 또 다른 이미지를 출력하는 작업입니다. 여기에는 이미지 향상(초고해상도, 저조도 향상, 빗줄기 제거 등), 이미지 복원 등 다양한 하위 작업이 포함됩니다. | ||
|
||
이 가이드에서는 다음을 수행하는 방법을 보여줍니다. | ||
- 초고해상도 작업을 위한 image-to-image 파이프라인 사용, | ||
- 파이프라인 없이 동일한 작업을 위한 image-to-image 모델 실행 | ||
|
||
이 가이드가 발표된 시점에서는, `image-to-image` 파이프라인은 초고해상도 작업만 지원한다는 점을 유의하세요. | ||
|
||
필요한 라이브러리를 설치하는 것부터 시작하겠습니다. | ||
|
||
```bash | ||
pip install transformers | ||
``` | ||
|
||
이제 [Swin2SR 모델](https://huggingface.co/caidas/swin2SR-lightweight-x2-64)을 사용하여 파이프라인을 초기화할 수 있습니다. 그런 다음 이미지와 함께 호출하여 파이프라인으로 추론할 수 있습니다. 현재 이 파이프라인에서는 [Swin2SR 모델](https://huggingface.co/caidas/swin2SR-lightweight-x2-64)만 지원됩니다. | ||
|
||
```python | ||
from transformers import pipeline | ||
|
||
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') | ||
pipe = pipeline(task="image-to-image", model="caidas/swin2SR-lightweight-x2-64", device=device) | ||
``` | ||
|
||
이제 이미지를 불러와 봅시다. | ||
|
||
```python | ||
from PIL import Image | ||
import requests | ||
|
||
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/cat.jpg" | ||
image = Image.open(requests.get(url, stream=True).raw) | ||
|
||
print(image.size) | ||
``` | ||
```bash | ||
# (532, 432) | ||
``` | ||
<div class="flex justify-center"> | ||
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/cat.jpg" alt="Photo of a cat"/> | ||
</div> | ||
|
||
이제 파이프라인으로 추론을 수행할 수 있습니다. 고양이 이미지의 업스케일된 버전을 얻을 수 있습니다. | ||
|
||
```python | ||
upscaled = pipe(image) | ||
print(upscaled.size) | ||
``` | ||
```bash | ||
# (1072, 880) | ||
``` | ||
|
||
파이프라인 없이 직접 추론을 수행하려면 Transformers의 `Swin2SRForImageSuperResolution` 및 `Swin2SRImageProcessor` 클래스를 사용할 수 있습니다. 이를 위해 동일한 모델 체크포인트를 사용합니다. 모델과 프로세서를 초기화해 보겠습니다. | ||
|
||
```python | ||
from transformers import Swin2SRForImageSuperResolution, Swin2SRImageProcessor | ||
|
||
model = Swin2SRForImageSuperResolution.from_pretrained("caidas/swin2SR-lightweight-x2-64").to(device) | ||
processor = Swin2SRImageProcessor("caidas/swin2SR-lightweight-x2-64") | ||
``` | ||
|
||
`pipeline` 우리가 직접 수행해야 하는 전처리와 후처리 단계를 추상화하므로, 이미지를 전처리해 보겠습니다. 이미지를 프로세서에 전달한 다음 픽셀값을 GPU로 이동시키겠습니다. | ||
|
||
```python | ||
pixel_values = processor(image, return_tensors="pt").pixel_values | ||
print(pixel_values.shape) | ||
|
||
pixel_values = pixel_values.to(device) | ||
``` | ||
|
||
이제 픽셀값을 모델에 전달하여 이미지를 추론할 수 있습니다. | ||
|
||
```python | ||
import torch | ||
|
||
with torch.no_grad(): | ||
outputs = model(pixel_values) | ||
``` | ||
출력은 아래와 같은 `ImageSuperResolutionOutput` 유형의 객체입니다 👇 | ||
|
||
``` | ||
(loss=None, reconstruction=tensor([[[[0.8270, 0.8269, 0.8275, ..., 0.7463, 0.7446, 0.7453], | ||
[0.8287, 0.8278, 0.8283, ..., 0.7451, 0.7448, 0.7457], | ||
[0.8280, 0.8273, 0.8269, ..., 0.7447, 0.7446, 0.7452], | ||
..., | ||
[0.5923, 0.5933, 0.5924, ..., 0.0697, 0.0695, 0.0706], | ||
[0.5926, 0.5932, 0.5926, ..., 0.0673, 0.0687, 0.0705], | ||
[0.5927, 0.5914, 0.5922, ..., 0.0664, 0.0694, 0.0718]]]], | ||
device='cuda:0'), hidden_states=None, attentions=None) | ||
``` | ||
`reconstruction`를 가져와 시각화를 위해 후처리해야 합니다. 어떻게 생겼는지 살펴봅시다. | ||
|
||
```python | ||
outputs.reconstruction.data.shape | ||
# torch.Size([1, 3, 880, 1072]) | ||
``` | ||
|
||
출력 텐서의 차원을 축소하고 0번째 축을 제거한 다음, 값을 클리핑하고 NumPy 부동소수점 배열로 변환해야 합니다. 그런 다음 [1072, 880] 모양을 갖도록 축을 재정렬하고 마지막으로 출력을 0과 255 사이의 값을 갖도록 되돌립니다. | ||
|
||
```python | ||
import numpy as np | ||
|
||
# 크기를 줄이고, CPU로 이동하고, 값을 클리핑 | ||
output = outputs.reconstruction.data.squeeze().cpu().clamp_(0, 1).numpy() | ||
# 축을 재정렬 | ||
output = np.moveaxis(output, source=0, destination=-1) | ||
# 값을 픽셀값 범위로 되돌리기 | ||
output = (output * 255.0).round().astype(np.uint8) | ||
Image.fromarray(output) | ||
``` | ||
<div class="flex justify-center"> | ||
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/cat_upscaled.png" alt="Upscaled photo of a cat"/> | ||
</div> |