Amazon Web Services 한국 블로그

Amazon Bedrock, Amazon Titan Image Generator와 워터마크 감지 API 정식 출시

AWS re:Invent 2023에서 우리는 Amazon Titan Image Generator의 평가판을 발표하였습니다. Amazon Titan Image Generator는 영어 자연어 프롬프트를 사용하여 사실적인 스튜디오 품질의 이미지를 빠르게 생성하고 개선하는 데 사용할 수 있는 생성형 인공 지능(생성형 AI) 파운데이션 모델(FM)입니다.

이제 Amazon Titan Image Generator가 Amazon Bedrock에 정식 출시되어 이미지의 즉각적인 사용자 지정 등 새 이미지 생성 및 이미지 편집 기능을 사용하여 생성형 AI 애플리케이션을 손쉽게 구축하고 확장할 수 있게 됐다는 사실을 알려드리게 되어 기쁩니다.

제가 전에 게시한 글에서는 Titan Image Generator로 생성한 모든 이미지에는 보이지 않는 워터마크가 기본적으로 포함되어 있다는 내용도 언급했는데요. 이 워터마크는 AI 생성 이미지를 식별하는 메커니즘을 제공하여 잘못된 정보의 확산을 줄이는 데 도움이 되도록 설계되었습니다.

Titan Image Generator의 워터마크 감지 기능이 이제 Amazon Bedrock 콘솔에서 정식으로 제공된다는 소식을 알려드리게 되어 기쁩니다. 또, 오늘은 Amazon Bedrock에 새로운 DetectGeneratedContent API(평가판)도 소개합니다. 이 API는 워터마크의 존재 여부를 확인하여 이미지가 Titan Image Generater에서 생성된 것인지를 확인하는 데 도움을 줍니다.

이 새로운 기능들을 시작하는 방법을 보여드리겠습니다.

Amazon Titan Image Generator를 사용한 즉각적인 이미지 사용자 지정
이제 최대 5개의 참조 이미지를 제시하여 특정 대상물에 대한 이미지들을 생성할 수 있습니다. 해당 주제의 주된 특성을 유지하면서 여러 장면에 대상물을 만들거나, 참조 이미지의 스타일을 새 이미지로 옮기거나, 여러 참조 이미지의 스타일들을 섞을 수 있습니다. 추가적인 프롬프트 엔지니어링이나 모델의 미세 조정 없이 이 모든 작업을 수행할 수 있습니다.

이 데모에서는 제가 Titan Image Generator에 “바나나를 먹고 있는 앵무새”의 이미지를 만들도록 요청하고 있습니다. 첫 번째 시도에서는 참조 이미지를 제공하지 않고 Titan Image Generator를 사용하여 이 새 이미지를 만들고 있습니다.

참고: 다음 코드 예제에서는 AWS SDK for Python(Boto3)을 사용하여 Amazon Bedrock과 상호 작용합니다. Bedrock 사용 설명서에서 C#/.NET, Go, Java 및 PHP에 대한 추가 코드 예제를 확인할 수 있습니다.

import boto3
import json

bedrock_runtime = boto3.client(service_name="bedrock-runtime")

body = json.dumps(
    {
        "taskType": "TEXT_IMAGE",
        "textToImageParams": {
            "text": "바나나를 먹는 앵무새",   
        },
        "imageGenerationConfig": {
            "numberOfImages": 1,   
            "quality": "premium", 
            "height": 768,
            "width": 1280,
            "cfgScale": 10, 
            "seed": 42
        }
    }
)
response = bedrock_runtime.invoke_model(
    body=body, 
    modelId="amazon.titan-image-generator-v1",
    accept="application/json", 
    contentType="application/json"
)

생성된 이미지를 다음 코드를 사용하여 표시할 수 있습니다.

import io
import base64
from PIL import Image

response_body = json.loads(response.get("body").read())

images = [
    Image.open(io.BytesIO(base64.b64decode(base64_image)))
    for base64_image in response_body.get("images")
]

for img in images:
    display(img)

생성된 이미지는 다음과 같습니다.

Amazon Titan Image Generator가 바나나를 먹는 앵무새의 이미지를 생성한 모습

그 다음에는 똑같은 프롬프트로 새 인스턴트 이미지 사용자 지정 기능을 사용하되, 이번에는 다음 두 개의 참조 이미지도 제공합니다. 더 쉽게 비교할 수 있도록, 이미지 크기를 조정하고 캡션을 추가한 다음 나란히 플로팅했습니다.

Amazon Titan Image Generator용 참조 이미지

코드는 다음과 같습니다. 새로운 인스턴트 사용자 지정은 IMAGE_VARIATION 작업을 통해 가능합니다.

# 참조 이미지 가져오기
image_path_1 = "parrot-cartoon.png"
image_path_2 = "bird-sketch.png"

with open(image_path_1, "rb") as image_file:
    input_image_1 = base64.b64encode(image_file.read()).decode("utf8")

with open(image_path_2, "rb") as image_file:
    input_image_2 = base64.b64encode(image_file.read()).decode("utf8")

# ImageVariationParams 옵션:
# text: 변형을 생성하는 방법을 모델에게 안내하는 프롬프트
#   images: 참조 이미지에 대한 Base64 문자열 표현, 최대 5개 이미지 지원
#   similarityStrength: 참조 이미지와의 유사성을 제어하기 위해 조정할 수 있는 파라미터

body = json.dumps(
    {
        "taskType": "IMAGE_VARIATION",
        "imageVariationParams": {
            "text": "parrot eating a banana",  # 필수
            "images": [input_image_1, input_image_2],  # 필수 이미지 1~5개
            "similarityStrength": 0.7,  # 범위: 0.2 ~ 1.0
        },
        "imageGenerationConfig": {
            "numberOfImages": 1,
            "quality": "premium",
            "height": 768,
            "width": 1280,
            "cfgScale": 10,
            "seed": 42
        }
    }
)

response = bedrock_runtime.invoke_model(
    body=body, 
    modelId="amazon.titan-image-generator-v1",
    accept="application/json", 
    contentType="application/json"
)

다시 한 번, 생성된 이미지의 크기를 조정하고 캡션을 추가한 다음 기존에 생성했던 이미지와 나란히 플로팅했습니다.Amazon Titan Image Generator 인스턴스 사용자 지정 결과

인스턴트 이미지 사용자 지정 기능을 사용하여 생성한 두 번째 이미지의 앵무새가 제가 제시한 참조 이미지들의 조합과 스타일 면에서 얼마나 비슷한지 확인할 수 있습니다.

Amazon Titan Image Generator의 워터마크 감지
모든 Amazon Titan FM은 책임 있는 AI를 염두에 두고 구축하였습니다. 모든 FM은 데이터에서 유해한 콘텐츠를 탐지하여 제거하고 부적절한 사용자 입력을 거부하고 모델 출력을 필터링합니다. 콘텐츠 제작자는 AI를 사용하여 사실적인 이미지를 제작하므로, 이 기술의 책임 있는 개발을 촉진하고 잘못된 정보의 확산을 줄이는 것이 중요합니다. Titan Image Generato에서 생성된 모든 이미지에 보이지 않는 워터마크가 기본적으로 포함되어 있는 이유가 바로 이것입니다. 워터마크 탐지는 혁신적인 기술이며 Amazon Web Services(AWS)는 AI 이미지 출력용 내장 워터마크를 널리 배포한 최초의 대형 클라우드 제공업체 중 하나입니다.

Titan Image Generator의 새로운 워터마크 감지 기능은 Amazon Titan으로 생성한 이미지를 식별할 수 있는 메커니즘입니다. 이 워터마크는 변조를 방지하도록 설계되어 있고 그 기능이 계속 발전하고 있으므로 AI 생성 콘텐츠의 투명성을 높이는 데 도움을 줍니다.

콘솔을 사용한 워터마크 감지
워터마크 감지는 일반적으로 Amazon Bedrock 콘솔에서 사용할 수 있습니다. 이미지를 업로드하여 기본 모델과 사용자 지정 버전으로 생성한 이미지를 포함하여 Titan Image Generator로 생성한 이미지에 포함된 워터마크를 감지할 수 있습니다. Titan Image Generator로 생성하지 않은 이미지를 업로드하면 워터마크가 감지되지 않았다는 것을 모델이 표시합니다.

워터마크 감지 기능에는 신뢰도 점수도 함께 제공됩니다. 이 신뢰도 점수는 워터마크 감지의 신뢰 수준을 나타냅니다. 경우에 따라, 원본 이미지가 수정된 경우에는 감지 신뢰도가 낮을 수 있습니다. 콘텐츠 제작자, 언론사, 위험 분석가, 사기 감지 팀 등은 이 새로운 기능을 이용함으로써 오해의 소지가 있는 AI 생성 콘텐츠를 더 잘 식별하고 방지하여 조직 전체에 투명성과 책임 있는 AI 배포를 촉진할 수 있습니다.

API(평가판)를 사용한 워터마크 감지
콘솔을 사용한 워터마크 감지 외에도, 이 워터마크의 존재 여부를 확인하여 이미지가 Titan Image Generator에서 생성된 것인지를 확인하는 데 도움을 주는 새로운 DetectGeneratedContent API(평가판)를 Amazon Bedrock에 도입할 것입니다. 이것이 어떻게 작동하는지 보겠습니다.

이 데모에서는 Titan Image Generator 평가판 포스트에서 보여드린 초록색 이구아나 이미지가 실제로 이 모델로 생성된 것인지 확인해 보겠습니다.

Amazon Titan Image Generator로 생성한 초록색 이구아나

임포트를 정의하고, Amazon Bedrock boto3 런타임 클라이언트를 설정하고, 이미지를 base64로 인코딩합니다. 그런 다음, 파운데이션 모델을 지정하고 인코딩된 이미지를 제공하여 DetectGeneratedContent API를 직접 호출합니다.

import boto3
import json
import base64

bedrock_runtime = boto3.client(service_name="bedrock-runtime")

image_path = "green-iguana.png"

with open(image_path, "rb") as image_file:
    input_image_iguana = image_file.read()

response = bedrock_runtime.detect_generated_content(
    foundationModelId = "amazon.titan-image-generator-v1",
    content = {
        "imageContent": { "bytes": input_image_iguana }
    }
)

이제 응답을 확인해 보겠습니다.

response.get("detectionResult")
'GENERATED'
response.get("confidenceLevel")
'HIGH'

신뢰 수준이 HIGHGENERATED라는 응답은 Amazon Bedrock이 Titan Image Generator에서 생성된 워터마크를 감지하였음을 확인해줍니다.

이제 Amazon Bedrock에서 제가 Stable Diffusion XL 1.0을 사용하여 생성한 또 다른 이미지를 확인해 보겠습니다. 이 이미지는 “석양을 바라보는 미어캣”입니다.

석양을 바라보는 미어캣

이번에는 미어캣의 이미지로 API를 다시 직접 호출합니다.

image_path = "meerkat.png"

with open(image_path, "rb") as image_file:
    input_image_meerkat = image_file.read()

response = bedrock_runtime.detect_generated_content(
    foundationModelId = "amazon.titan-image-generator-v1",
    content = {
        "imageContent": { "bytes": input_image_meerkat }
    }
)

response.get("detectionResult")
'NOT_GENERATED'

사실상, NOT_GENERATED라는 응답은 Titan Image Generator의 워터마크가 감지되지 않았으므로 이 이미지는 이 모델로 생성되지 않았을 가능성이 높다는 것을 말해줍니다.

콘솔에서 Amazon Titan Image Generator와 워터마크 감지 사용하기
다음은 Titan Image Generator와 Amazon Bedrock 콘솔의 새로운 워터마크 감지 기능을 시작하는 방법에 대한 간략한 데모로, 제 동료인 Nirbhay Agarwal이 만든 것입니다.

가용성
Amazon Titan Image Generator, 새로운 인스턴트 사용자 지정 기능, 그리고 Amazon Bedrock 콘솔의 워터마크 감지 기능은 현재 미국 동부(버지니아 북부)와 미국 서부(오레곤) AWS 리전에서 사용할 수 있습니다. 향후 업데이트 여부는 전체 리전 목록을 확인하세요. Amazon Bedrock의 새로운 DetectGeneratedContent API는 현재 미국 동부(버지니아 북부)와 미국 서부(오레곤) AWS 리전에서 공개 평가판으로 제공되고 있습니다.

Amazon Titan Image Generator, 이제 PartyRock에서도 사용 가능
이제 Titan Image Generator를 Amazon Bedrock 플레이그라운드인 PartyRock에서도 사용할 수 있습니다. PartyRock은 코딩이 필요 없는 AI 기반의 앱 구축 환경을 제공하며 신용 카드가 필요하지 않습니다. PartyRock을 사용하면 Stability AIAmazon의 이미지 생성 모델 중에서 선택하여 몇 초 안에 이미지를 생성해주는 앱을 만들 수 있습니다.

그 밖의 리소스
Amazon Titan 모델 제품군에 대해 더 자세히 알아보려면 Amazon Titan 제품 페이지를 방문하세요. 요금에 관한 세부 사항은 Amazon Bedrock 요금을 확인하세요.

PartyRock에서 Amazon Titan Image Generator를 사용해 보거나 Amazon Bedrock 콘솔에서 이 모델의 고급 이미지 생성 및 편집 기능을 살펴보세요. AWS re:Post for Amazon Bedrock으로 피드백을 보내주시거나 일반 AWS 문의처를 통해 피드백을 보내주세요.

보다 심층적인 기술 콘텐츠를 확인하고 생성형 AI Builder 커뮤니티에 참여하려면 community.aws의 생성형 AI 스페이스를 방문하세요.

— Antje