1. GPT-4 Vision Model 소개
GPT-4 Vision 모델 (GPT-4V)은 OpenAI에서 소개한 다중 모달 인공지능 모델로, GPT-4를 기반으로 시각 이해 능력을 통합하고 있습니다. 전통적인 텍스트 처리 모델과 달리 GPT-4V는 이미지 콘텐츠를 받아들이고 분석하여 이미지와 관련된 설명을 제공하며, 질문에 대답하고 상호 작용할 수 있습니다.
예시 적용 분야:
- 제품 인식 및 분류: 전자상거래 플랫폼은 GPT-4V를 사용하여 제품 이미지를 식별하고 설명하여 검색 및 추천 시스템을 개선할 수 있습니다.
- 의료 의사 결정 지원: GPT-4V는 직접적인 의료 이미지 진단에는 적합하지 않지만, 의료 인력이 초기 이미지 이해와 데이터 조직을 돕는 데 사용될 수 있습니다.
- 교육 및 연구: 교육과 과학 연구에서 GPT-4V는 차트, 실험 결과를 분석하고 과학적 이미지 데이터를 자동으로 해석하는 데 사용될 수 있습니다.
- 교통 모니터링 및 분석: 교통 감시 이미지를 분석함으로써 GPT-4V는 교통 관리 시스템이 실시간 상태 보고와 사고 식별에 도움을 줄 수 있습니다.
2. 간단한 예시
다음은 CURL 요청을 사용하여 GPT-4 Vision 모델을 사용하여 이미지를 분석하는 방법을 보여주는 간단한 예시입니다.
API 요청 매개변수:
-
model
: 사용할 모델 버전을 지정합니다. 여기서는 "gpt-4-vision-preview"를 사용합니다. -
messages
: 역할 정의 및 내용이 포함된 매개변수로, 내용에는 텍스트 및 이미지 링크가 포함될 수 있습니다. -
max_tokens
: 생성된 텍스트의 최대 길이 제한을 지정합니다.
CURL 요청 예시:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "이 이미지에 뭐가 있어?"
},
{
"type": "image_url",
"image_url": {
"url": "이미지 링크"
}
}
]
}
],
"max_tokens": 300
}'
위의 요청에서는 이미지를 GPT-4 Vision 모델에 제출하고 간단한 질문 "이 이미지에 뭐가 있어?"를 물었습니다. 모델은 이미지 내용을 분석하고 이미지 내용을 기반으로 답변을 제공할 것입니다.
3. Base64 인코딩을 사용하여 이미지 업로드하기
일부 경우에는 로컬 이미지 파일을 GPT-4 Vision 모델에 업로드해야 할 수 있습니다. 이런 경우에는 이미지 데이터를 base64 인코딩을 사용하여 API 요청에 포함할 수 있습니다.
파이썬 코드 예시:
import base64
import requests
api_key = "당신의_OPENAI_API_KEY"
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
image_path = "당신의_이미지_경로.jpg"
base64_image = encode_image(image_path)
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "이 이미지에 뭐가 있어?"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
"max_tokens": 300
}
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
print(response.json())
위의 코드에서 우리는 먼저 로컬 이미지 파일을 base64로 인코딩된 문자열로 변환하고, 그 후 이 문자열을 API 요청의 일부로 보내고 있습니다. 모델의 응답에는 이미지 내용의 설명이 포함됩니다.
4. 여러 이미지 입력 다루기
때로는 여러 이미지를 동시에 분석해야 할 필요가 있습니다. GPT-4 Vision 모델은 동시에 여러 이미지 입력을 받아들일 수 있으며, 이러한 이미지들에 대해 질문하거나 차이를 비교할 수 있도록 합니다.
다중 이미지 입력 예시
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "이미지 간에 어떤 점이 다른가요?"
},
{
"type": "image_url",
"image_url": {
"url": "첫 번째 이미지의 URL",
}
},
{
"type": "image_url",
"image_url": {
"url": "두 번째 이미지의 URL",
}
}
]
}
],
"max_tokens": 300
}'
이 요청에서는 두 개의 이미지를 API에 제출합니다. 모델은 각 이미지를 개별적으로 분석하고 제기된 질문에 기반하여 설명과 비교를 제공합니다. 이 방법은 이미지 집합의 전반적인 분석에 이상적입니다.
5. 이미지 분석 세부 수준 설정
GPT-4 비전 모델을 사용하여 이미지 분석 시 필요에 따라 세부 수준을 설정할 수 있습니다. detail
매개변수를 조정하여 low
, high
, 또는 auto
중 하나를 선택할 수 있습니다. 각 옵션의 상세한 설명과 설정 방법은 다음과 같습니다:
-
low
: 낮은 세부 수준을 선택하면 "고해상도" 모델이 비활성화됩니다. 이 모델은 이미지의 512픽셀 x 512픽셀의 저해상도 버전을 받아들이고 이미지를 나타내기 위해 65토큰의 예산을 사용합니다. 이는 고해상도 세부 정보가 필요하지 않은 경우에 적합하며, 빠른 응답 시간을 달성하고 적은 입력 토큰을 사용하는 데 도움이 됩니다. -
high
: 고해상도 수준을 선택하면 모델은 먼저 저해상도 이미지를 보고 입력 이미지의 크기를 기준으로 512픽셀 그리드에 자세히 잘라낸 상세 버전을 만들 수 있습니다. 각 상세한 잘라내기는 129토큰의 두 배 예산으로 나타냅니다 (즉, 기본 잘라내기당 65토큰). -
auto
: 자동 세부 수준은 입력 이미지의 크기를 기준으로low
또는high
세부 수준을 사용할지를 결정합니다.
다음 코드 예제는 세부 수준을 설정하는 방법을 보여줍니다:
import base64
import requests
api_key = "your_OPENAI_API_KEY"
image_path = "당신의_이미지_경로.jpg"
base64_image = base64.b64encode(open(image_path, "rb").read()).decode('utf-8')
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "이 이미지에는 무엇이 있나요?"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}",
"detail": "high" # 고해상도 세부 수준으로 설정
}
}
]
}
],
"max_tokens": 300
}
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
print(response.json())
6. 모델 제한 사항 및 이미지 관리 이해
6.1. 제한 사항
GPT-4 비전 모델의 강력한 기능에도 불구하고 제한 사항이 존재하며, 이러한 제한 사항을 이해하는 것은 이미지 이해를 위해 모델을 사용하는 데 중요합니다. 알려진 몇 가지 제한 사항에 대한 개요는 다음과 같습니다:
-
의료 이미지: 모델은 CT 스캔과 같은 전문적인 의료 이미지를 해석하는 데 적합하지 않으며 의료 상담에 사용해서는 안 됩니다.
-
비영어 텍스트: 모델은 일본어 또는 한국어와 같은 비라틴 문자 텍스트를 포함하는 이미지를 처리할 때 성능이 좋지 않을 수 있습니다.
-
공간적인 위치 파악: 모델은 체스판의 말의 위치와 같은 정확한 공간적 위치 관련 작업에서 성능이 최적이 아닐 수 있습니다.
-
이미지 세부 정보: 모델은 이미지에서 선, 점선과 같은 색과 스타일의 변화가 있는 차트 또는 텍스트를 이해하는 데 어려워할 수 있습니다.
-
이미지 회전: 모델은 기울어진 또는 뒤집힌 텍스트와 이미지를 잘못 해석할 수 있습니다.
6.2 세션에서 이미지 관리하기
채팅 완성 API가 상태를 유지하지 않으므로 모델에 전달되는 메시지(이미지 포함)를 직접 관리해아 합니다. 동일한 이미지를 여러 번 사용하려면 각 API 요청마다 이미지 데이터를 다시 전송해야 합니다.
additional_payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "이 이미지를 기반으로 하는 제안은 무엇인가요?"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
"max_tokens": 300
}
new_response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=additional_payload)
print(new_response.json())
7. 비용 계산
detail: low
옵션을 사용하는 각 이미지는 고정된 85 토큰을 사용합니다. detail: high
옵션을 가진 이미지의 경우, 이미지는 먼저 2048px x 2048px 크기에 맞게 비례적으로 조정되고, 그런 다음 이미지의 짧은 쪽이 768px이 되도록 보장합니다. 그런 다음 이미지는 여러 개의 512px 정사각형으로 나누어지며, 각 정사각형은 170 토큰을 사용하며, 최종 총 토큰 수에 추가로 85 토큰이 추가됩니다.
예를 들어, 이미지의 크기가 1024px x 1024px이고 detail: high
옵션이 선택된 경우, 토큰 비용은 다음과 같습니다:
- 먼저, 1024가 2048보다 작기 때문에 초기 크기 조정이 없습니다.
- 그런 다음 짧은 쪽이 1024이므로, 이미지를 768 x 768로 크기를 조정합니다.
- 이미지를 나타내기 위해 4개의 512px 정사각형이 필요하므로 최종 토큰 비용은 170 * 4 + 85 = 765가 됩니다.
비용 계산 방법에 대한 자세한 내용은 GPT-4 Vision 모델의 문서를 참조하십시오.
8. 자주 묻는 질문
GPT-4 Vision 모델을 사용하는 중에 사용자가 마주칠 수 있는 일반적인 질문과 그에 대한 답변은 다음과 같습니다:
Q: gpt-4
의 이미지 기능을 파인 튜닝할 수 있나요?
A: 현재로서는 gpt-4
의 이미지 기능을 파인 튜닝하는 것을 지원하지 않습니다.
Q: gpt-4
를 사용하여 이미지를 생성할 수 있나요?
A: 아니요, 이미지를 생성하려면 dall-e-3
를 사용하고 이미지를 이해하려면 gpt-4-vision-preview
를 사용할 수 있습니다.
Q: 어떤 유형의 파일 업로드가 지원되나요?
A: 현재 PNG (.png), JPEG (.jpeg 및 .jpg), WEBP (.webp) 및 비 애니메이션 GIF (.gif) 파일이 지원됩니다.