-
Notifications
You must be signed in to change notification settings - Fork 27.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🌐 [i18n-KO] Translated image_feature_extraction.md
to Korean
#32239
Merged
stevhliu
merged 14 commits into
huggingface:main
from
mreraser:ko-image_feature_extraction.md
Aug 7, 2024
Merged
Changes from 12 commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
4648ecf
docs: ko: tasks/images_feature_extraction.md
mreraser a58eece
Merge branch 'huggingface:main' into ko-image_feature_extraction.md
mreraser f8008dc
feat: nmt draft
mreraser ae286a9
Merge branch 'huggingface:main' into ko-image_feature_extraction.md
mreraser cd4498a
fix: manual edits
mreraser 1a2117e
fix: manual edits
mreraser 02a1f10
Merge branch 'huggingface:main' into ko-image_feature_extraction.md
mreraser 632dd62
fix: manual edits
mreraser 1a8593a
fix: manual edits
mreraser 98064cd
feat: manual edits
mreraser 3498039
Update docs/source/ko/tasks/image_feature_extraction.md
mreraser a816f25
Update docs/source/ko/tasks/image_feature_extraction.md
mreraser 4163183
fix: manual edits
mreraser b2f2f30
Merge branch 'main' into ko-image_feature_extraction.md
mreraser File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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,136 @@ | ||
<!--Copyright 2024 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-feature-extraction]] | ||
|
||
[[open-in-colab]] | ||
|
||
이미지 특징 추출은 주어진 이미지에서 의미론적으로 의미 있는 특징을 추출하는 작업입니다. 이는 이미지 유사성 및 이미지 검색 등 다양한 사용 사례가 있습니다. | ||
게다가 대부분의 컴퓨터 비전 모델은 이미지 특징 추출에 사용할 수 있으며, 여기서 작업 특화 헤드(이미지 분류, 물체 감지 등)를 제거하고 특징을 얻을 수 있습니다. 이러한 특징은 가장자리 감지, 모서리 감지 등 고차원 수준에서 매우 유용합니다. | ||
또한 모델의 깊이에 따라 실제 세계에 대한 정보(예: 고양이가 어떻게 생겼는지)를 포함할 수도 있습니다. 따라서 이러한 출력은 특정 데이터 세트에 대한 새로운 분류기를 훈련하는 데 사용할 수 있습니다. | ||
|
||
이 가이드에서는: | ||
|
||
- `image-feature-extraction` 파이프라인을 활용하여 간단한 이미지 유사성 시스템을 구축하는 방법을 배웁니다. | ||
- 기본 모델 추론으로 동일한 작업을 수행합니다. | ||
|
||
## `image-feature-extraction` 파이프라인을 이용한 이미지 유사성[[image-similarity-using-image-feature-extraction-pipeline]] | ||
|
||
물고기 그물 위에 앉아 있는 두 장의 고양이 사진이 있습니다. 이 중 하나는 생성된 이미지입니다. | ||
|
||
```python | ||
from PIL import Image | ||
import requests | ||
|
||
img_urls = ["https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/cats.png", "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/cats.jpeg"] | ||
image_real = Image.open(requests.get(img_urls[0], stream=True).raw).convert("RGB") | ||
image_gen = Image.open(requests.get(img_urls[1], stream=True).raw).convert("RGB") | ||
``` | ||
|
||
파이프라인을 실행해 봅시다. 먼저 파이프라인을 초기화하세요. 모델을 지정하지 않으면, 파이프라인은 자동으로 [google/vit-base-patch16-224](google/vit-base-patch16-224) 모델로 초기화됩니다. 유사도를 계산하려면 `pool`을 True로 설정하세요. | ||
|
||
|
||
```python | ||
import torch | ||
from transformers import pipeline | ||
|
||
DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') | ||
pipe = pipeline(task="image-feature-extraction", model_name="google/vit-base-patch16-384", device=DEVICE, pool=True) | ||
``` | ||
|
||
`pipe`를 사용하여 추론하려면 두 이미지를 모두 전달하세요. | ||
|
||
```python | ||
outputs = pipe([image_real, image_gen]) | ||
``` | ||
|
||
출력에는 두 이미지의 통합된(pooled) 임베딩이 포함되어 있습니다. | ||
|
||
```python | ||
# 단일 출력의 길이 구하기 | ||
print(len(outputs[0][0])) | ||
# 출력 결과 표시하기 | ||
print(outputs) | ||
|
||
# 768 | ||
# [[[-0.03909236937761307, 0.43381670117378235, -0.06913255900144577, | ||
``` | ||
|
||
유사도 점수를 얻으려면, 이들을 유사도 함수에 전달해야 합니다. | ||
|
||
```python | ||
from torch.nn.functional import cosine_similarity | ||
|
||
similarity_score = cosine_similarity(torch.Tensor(outputs[0]), | ||
torch.Tensor(outputs[1]), dim=1) | ||
|
||
print(similarity_score) | ||
|
||
# tensor([0.6043]) | ||
``` | ||
|
||
풀링 이전의 마지막 은닉 상태를 얻고 싶다면, `pool` 매개변수에 아무 값도 전달하지 마세요. 또한, 기본값은 `False`로 설정되어 있습니다. 이 은닉 상태는 모델의 특징을 기반으로 새로운 분류기나 모델을 훈련시키는 데 유용합니다. | ||
|
||
```python | ||
pipe = pipeline(task="image-feature-extraction", model_name="google/vit-base-patch16-224", device=DEVICE) | ||
output = pipe(image_real) | ||
``` | ||
|
||
아직 출력이 풀링되지 않았기 때문에, 첫 번째 차원은 배치 크기이고 마지막 두 차원은 임베딩 형태인 마지막 은닉 상태를 얻을 수 있습니다. | ||
|
||
```python | ||
import numpy as np | ||
print(np.array(outputs).shape) | ||
# (1, 197, 768) | ||
``` | ||
|
||
## `AutoModel`을 사용하여 특징과 유사성 얻기[[getting-features-and-similarities-using-automodel]] | ||
|
||
transformers의 `AutoModel` 클래스를 사용하여 특징을 얻을 수도 있습니다. `AutoModel`은 작업 특화 헤드 없이 모든 transformers 모델을 로드할 수 있으며, 이를 통해 특징을 추출할 수 있습니다. | ||
|
||
```python | ||
from transformers import AutoImageProcessor, AutoModel | ||
|
||
processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224") | ||
model = AutoModel.from_pretrained("google/vit-base-patch16-224").to(DEVICE) | ||
``` | ||
|
||
추론을 위한 간단한 함수를 작성해 보겠습니다. 먼저 입력값을 `processor`에 전달한 다음, 그 출력값을 `model`에 전달할 것입니다. | ||
|
||
```python | ||
def infer(image): | ||
inputs = processor(image, return_tensors="pt").to(DEVICE) | ||
outputs = model(**inputs) | ||
return outputs.pooler_output | ||
``` | ||
|
||
이 함수에 이미지를 직접 전달하여 임베딩을 얻을 수 있습니다. | ||
|
||
```python | ||
embed_real = infer(image_real) | ||
embed_gen = infer(image_gen) | ||
``` | ||
|
||
그리고 이 임베딩을 사용하여 다시 유사도를 계산할 수 있습니다. | ||
|
||
```python | ||
from torch.nn.functional import cosine_similarity | ||
|
||
similarity_score = cosine_similarity(embed_real, embed_gen, dim=1) | ||
print(similarity_score) | ||
|
||
# tensor([0.6061], device='cuda:0', grad_fn=<SumBackward1>) | ||
``` |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
원문에 "The output contains pooled embeddings of those two images." 라고 적혀 있고, 이후 번역에서도 pool을 풀링이라고 쓰셨기에 이렇게 쓰는 것은 어떠한지 제안드려 봅니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 @shinhyunji36 님! 이거 위쪽에서 @heuristicwave 님이 다음과 같이 제안해주어 변경하긴 했었습니다. 저는 어느쪽이든 괜찮은 것 같아 고민이긴 한데 어떻게 하는게 좋을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mreraser 아하! 흐음 고민이 되네요🥹 pooling에 통합이라는 의미가 담겨있을까요? Max pooling mean pooling 등으로 쓰일 때 중요 정보를 추출하거나 데이터 크기를 줄이는 역할이 아닐까?라고 단순하게 생각했는데 제가 놓치고 있는 부분이 있는 것 같아요🥹
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고민해봤는데 원문을 최대한 살리고, 일관적인게 좋은 것 같아서
풀링된(pooled)
을 하는게 나을 것 같습니다! 리뷰 감사드립니다!