HAQM Web Services ブログ

HAQM Nova Canvas を使用したテキストからの画像生成の基本

本記事は 2025 年 5 月 29 日に AWS Machine Learning Blog で公開された Text-to-image basics with HAQM Nova Canvas を翻訳したものです。翻訳はソリューションアーキテクトの川戸渉が担当しました。
ブログ翻訳時点(2025 年 6 月)では、HAQM Nova Canvas は英語のみをサポートしており、プロンプトは英語で記載する必要があります。本記事では理解の助けになるよう、英文プロンプトに和訳を併記しています。

AI による画像生成は、近年最も革新的な技術の一つとして注目を集め、ビジュアルコンテンツの作成や活用方法を大きく変えています。HAQM Nova Canvas は、HAQM Nova クリエイティブコンテンツ生成モデルの一つで、簡単なテキスト入力から、リアルで創造性に富んだ画像を生成することができます。

この記事は、HAQM Nova Canvas の使い方を学ぶ初心者向けガイドです。まず、HAQM Bedrock のセットアップ手順を説明します。HAQM Bedrock は、テキスト、コード、画像生成、要約、質問応答などのさまざまなユースケース向けに業界をリードする最新の基盤モデル (FM) を提供するフルマネージドサービスです。また、ファインチューニングや検索拡張生成 (RAG) を含むカスタムユースケースにも対応しています。この記事では、米国の AWS リージョンで利用可能な HAQM Nova 画像生成モデルである HAQM Nova Canvas モデルを紹介します。具体的には、拡散モデル (diffusion-based model) による画像生成プロセスの概要と、HAQM Nova Canvas を使用したテキストからの画像生成に必要な入力パラメータについて詳しく解説します。

HAQM Bedrock で画像生成をはじめよう

HAQM Nova Canvas と Image playground にアクセスできるようにするには、以下の手順を完了させてください:

  1. AWS アカウントをお持ちでない場合は、新規作成してください。
  2. AWS Identity and Access Management (IAM) 管理者または適切な IAM ユーザーとして、HAQM Bedrock コンソールを開きます。
  3. HAQM Nova Canvas モデルが利用可能なリージョンのいずれか ( 例:米国 ( バージニア北部 )) を選択します。
  4. ナビゲーションペインで、Bedrock configurations の下にある Model access ( モデルアクセス ) を選択します。
  5. What is Model access ( モデルアクセスとは ?) の下で、Modify model access ( モデルアクセスを変更 ) または まだ有効化されていない場合は、Enable specific models ( 特定のモデルを有効にする ) を選択します。
  6. Nova Canvas を選択し、Next ( 次へ ) をクリックします。
  7. Review and submit ( 確認して送信 ) ページで、Submit ( 送信 ) を選択します。
  8. Base models ( ベースモデル ) を更新します。
    HAQM Nova Canvas モデルが Access Granted ( アクセスが付与されました ) のステータスで表示されていれば、次の手順に進む準備ができています。
  9. ナビゲーションペインで、Playgrounds ( プレイグラウンド ) の下にある Image / Video を選択します。
  10. Select model ( モデルを選択 ) を選び、HAQMNova Canvas を選択します。その後、Apply ( 適用 ) を選択します。

これで、HAQM Bedrock で HAQM Nova Canvas を使用して画像生成を始める準備が整いました。以下のスクリーンショットは、プレイグラウンドの例を示しています。

画像生成のプロセスを理解しよう

HAQM Nova Canvas は画像生成に拡散モデル (diffusion-based model) を使用しています:

  • 初期状態 – 画像生成プロセスはランダムな値からなるノイズ画像 ( 完全なノイズ画像 ) から始まります。
  • 反復的なノイズ除去 – モデルは、ユーザーが入力したプロンプトを参考にしながら、段階的にノイズを除去していきます。各ステップでどのくらいノイズを除去すべきかは、事前のトレーニングで学習された知識に基づいています。例えば、モデルが猫の画像を生成するためには、複数の猫の画像でトレーニングされ、それらの画像に徐々にノイズを挿入して完全なノイズ状態にする過程を学習します。各ステップで追加するノイズの量を学習することで、モデルは逆のプロセスを実行できるようになり、ノイズの多い画像から始めて徐々にノイズを取り除き、猫の画像を作り出します。
  • テキストによる条件付け – テキストプロンプトは、どのような画像を生成するかの方向づけの役割を担います。プロンプトは数値ベクトルとしてエンコードされ、学習済みのテキスト-画像の埋め込み空間との類似ベクトルと照合されます。これらのベクトルを使用して、ノイズの多い画像から徐々に入力プロンプトの内容を表現する画像へと変換させていきます。
  • 画像による条件付け – HAQM Nova Canvas はテキストプロンプトの入力だけでなく、画像の入力にも対応しています。
  • 安全性と公平性 – ユーザーが入力したプロンプトと、モデルが生成した画像の両方が安全性と公平性の基準を満たしているかを確認するためのフィルター処理が行われます。どちらも問題がないと判断された場合にのみ、最終的な画像がユーザーに提供されます。

プロンプト作成の基本

画像生成を成功させるには、まず効果的なプロンプト作成が重要です。プロンプト作成とは、求める画像をモデルに生成してもらうための的確な言葉選びの技術です。優れたプロンプトには、被写体に関する具体的な特徴、スタイル、照明、視点、雰囲気、構図の要素が含まれています。また、命令文や会話調ではなく、画像の説明文として構成すると効果的です。例えば、“generate an image of a mountain( 山の画像を生成して )” と言うよりも、より効果的なプロンプトは “a majestic snow-capped mountain peak at sunset with dramatic lighting and wispy clouds, photorealistic style ( 夕暮れ時の雄大な雪をかぶった山頂、ドラマチックな照明と薄い雲がある写実的なスタイルの画像 )” のようになります。プロンプト作成についてさらに詳しく知りたい場合は、HAQM Nova Canvas prompting best practices を参照してください。

以下のプロンプト要素について、それぞれが最終的な出力画像にどのような影響を与えるのか見てみましょう:

  • 被写体の説明 ( 画像に何 / 誰が映っているか ) – この例で使用しているプロンプトは “a cat sitting on a chair ( 椅子に座る猫 )” です。

  • スタイル参照 ( 写真、油絵、3D レンダー ) – この例で使用しているプロンプトは、”A cat sitting on a chair, oil painting style ( 椅子に座る猫、油絵スタイル )” と “A cat sitting on a chair, anime style ( 椅子に座る猫、アニメスタイル )” です。

  • 構図要素と技術的仕様 ( 前景、背景、視点、照明 ) – この例で使用しているプロンプトは “A cat sitting on a chair, mountains in the background ( 椅子に座る猫、背景に山々 )” と “A cat sitting on a chair, sunlight from the right low angle shot ( 椅子に座る猫、右側から差し込む日光の低アングル撮影 )” です。

負のプロンプト ( ネガティブプロンプト )

メインプロンプトは、モデルに含めるべき要素を指示します。これらは、最終的な画像に表現したい要素、スタイル、特徴です。プロンプトの中で “no”, “not”, “without” などの否定語の使用は避けてください。HAQM Nova Canvas は画像とキャプションのペアでトレーニングされていますが、キャプションは通常、画像に存在しないものについては記述しません。そのため、モデルは否定の概念を学習していません。代わりに、出力から除外したい要素を指定するために負のプロンプトを使用してください。

負のプロンプトは画像に含めたくない要素を指定します。一般的な負のプロンプトには “blurry ( ぼやけた )”, “distorted ( 歪んだ )”, “low quality ( 低品質 )”, “poor anatomy (不自然な体の構造)”, “bad proportions ( 不均衡な比率 )”, “disfigured hands ( 変形した手 )”, “extra limbs ( 余分な手足 )” などがあり、これらはモデルが画像生成時によく起きる問題を防ぐのに役立ちます。

以下の例では、最初の例では “An aerial view of an archipelago (群島の空中写真)” というプロンプトを使用し、次の例では、メインプロンプトを “An aerial view of an archipelago ( 群島の空中写真 )”, 負のプロンプトを“Beaches ( ビーチ )” として調整しています。

通常のプロンプトと負のプロンプトをバランスよく組み合わせることで、モデルの創作範囲が適切に定まり、結果としてより予測可能で望ましい画像が得られるようになります。

画像のサイズとアスペクト比

HAQM Nova Canvas は 正方形 (1:1)、縦長、横長の解像度でトレーニングされています。画像生成タスクでは、最大出力解像度は 419 万ピクセル ( 例えば 2048×2048 や 4096×1024 など ) となっています。画像編集タスクについては、画像の最長辺が 4,096 ピクセル以内で、アスペクト比が 1:4 から 4:1 の間であること、そして総ピクセル数が 419 万以下であることが求められます。これらの制限を理解しておくと、特に細部にこだわったレイアウトや構図が必要な場面で、画像の歪みや不自然な引き伸ばしを防ぐことができます。

Classifier-free guidance スケール

Classifier-free guidance (CFG) スケールは、モデルがプロンプトにどれだけ忠実に従うかを制御するパラメータです:

  • 低い値 (1.1–3) – AI により多くの創造的自由を与え、美的に優れた結果が得られる可能性がありますが、コントラストが低くプロンプトへの忠実度も低くなります
  • 中間の値 (4–7) – バランスの取れたアプローチで、ほとんどの画像生成において推奨される範囲です
  • 高い値 (8–10) – プロンプトに厳密に従い、より正確な結果を生成できますが、時に自然な美しさが損なわれ、色の彩度が上がりすぎることがあります

以下の例では、“Cherry blossoms, bonsai, Japanese style landscape, high resolution, 8k, lush greens in the background. ( 桜、盆栽、日本風の風景、高解像度、8K、背景の豊かな緑 )” というプロンプトを使用しています。

1 枚目の画像 ( CFG 値 2) は桜と盆栽の要素をある程度捉えています。2 枚目の画像 (CFG 値 8) はプロンプトにより忠実で、鉢植えの盆栽、より強調された桜の花、背景の豊かな緑が表現されています。

CFG スケールとは、プロンプトをどれだけ忠実に反映するか、あるいはどれだけ自由な創作性を加えるかを調整する機能だと考えるとよいでしょう。

シード値と再現性

画像を生成する際には、必ずランダム化シード ( 初期条件を決める数値 ) が使われます:

  • シードは通常、長い整数 ( 例えば、1234567890) として表現されます
  • シード値、プロンプト、パラメータの条件が同じなら、毎回完全に同じ画像が生成されます
  • 成功した画像生成のシード値を記録しておけば、後でその画像を正確に再現したり、その有望な結果をもとに微調整されたバリエーションを作成したりすることが可能です
  • シード値そのものに優劣はなく、単に異なる生成起点として機能するものです

シード値を活用した再現性は、専門的な制作プロセスに欠かせません。同じシード値を使うことで、全く異なるランダムな画像が生成されるのではなく、プロンプトや設定値だけで微調整し、その変更がもたらす影響を正確に比較検討できるようになります。下の画像は、シード値と他のすべてのパラメータを同じにしたまま、プロンプトだけを “A portrait of a girl smiling ( 微笑んでいる少女の肖像画 )” と “A portrait of a girl laughing ( 笑っている少女の肖像画 )” に変えて生成したものです。

この記事に掲載されているこれまでの画像はすべて、HAQM Bedrock InvokeModel API を通じて利用できる HAQM Nova Canvas のテキストから画像への変換 (TEXT_IMAGE) 機能を使って生成されています。以下は、画像生成に関する API リクエストとレスポンスの構造です:

#Request Structure
{
    "taskType": "TEXT_IMAGE",
    "textToImageParams": {
        "text": string,         #Positive Prompt
        "negativeText": string  #Negative Prompt
    },
    "imageGenerationConfig": {
        "width": int,           #Image Resolution Width
        "height": int,          #Image Resolution Width
        "quality": "standard" | "premium",   #Image Quality
        "cfgScale": float,      #Classifer Free Guidance Scale
        "seed": int,            #Seed value
        "numberOfImages": int   #Number of images to be generated (max 5)
    }
}
#Response Structure
{
    "images": "images": string[], #list of Base64 encoded images
    "error": string
}

コード例

ここで紹介するソリューションは、Python スクリプトまたは Jupyter ノートブックを使って、ローカルでテストすることもできます。この記事では、Python (v3.12) を使用した HAQM SageMaker AI ノートブックを使用しています。詳細については、Run example HAQM Bedrock API requests using an HAQM SageMaker AI notebook をご覧ください。SageMaker ノートブックインスタンスのセットアップ手順については、Create an HAQM SageMaker notebook instance を参照してください。インスタンスが、HAQM Nova Canvas アクセスが有効になっている同じリージョンでセットアップされていることを確認してください。
この記事では、HAQM Nova Canvas が有効になっているリージョン (us-east-1) と一致するようにリージョン変数を作成します。別のリージョンでモデルを有効にしている場合は、この変数を変更する必要があります。以下のコードは、HAQM Bedrock を使用して HAQM Nova Canvas v1.0 モデルを呼び出すことによるテキストから画像への生成を示しています。さまざまな種類の生成の API リクエストとレスポンス構造、パラメータ、およびその他のコード例については、Generating images with HAQM Nova を参照してください。

import base64  #For encoding/decoding base64 data
import io  #For handling byte streams
import json  #For JSON processing
import boto3  #AWS SDK for Python
from PIL import Image  #Python Imaging Library for image processing
from botocore.config import Config  #For AWS client configuration

#Create a variable to fix the region to where Nova Canvas is enabled
region = "us-east-1"

#Setup an HAQM Bedrock runtime client
client = boto3.client(service_name='bedrock-runtime', region_name=region, config=Config(read_timeout=300))

#Set the content type and accept headers for the API call
accept = "application/json"
content_type = "application/json"

#Define the prompt for image generation
prompt = """A cat sitting on a chair, mountains in the background, low angle shot."""  # 椅子に座る猫、背景に山々、低アングル撮影

#Create the request body with generation parameters
api_request= json.dumps({
        "taskType": "TEXT_IMAGE",  #Specify text-to-image generation
        "textToImageParams": {
            "text": prompt  
        },
        "imageGenerationConfig": {
            "numberOfImages": 1,   #Generate one image
            "height": 720,        #Image height in pixels
            "width": 1280,         #Image width in pixels
            "cfgScale": 7.0,       #CFG Scale
            "seed": 0              #Seed number for generation
        }
})
#Call the Bedrock model to generate the image
response = client.invoke_model(body=api_request, modelId='amazon.nova-canvas-v1:0', accept=accept, 
contentType=content_type)
        
#Parse the JSON response
response_json = json.loads(response.get("body").read())

#Extract the base64-encoded image from the response
base64_image = response_json.get("images")[0]
#Convert the base64 string to ASCII bytes
base64_bytes = base64_image.encode('ascii')
#Decode the base64 bytes to get the actual image bytes
image_data = base64.b64decode(base64_bytes)

#Convert bytes to an image object
output_image = Image.open(io.BytesIO(image_data))
#Display the image
output_image.show()
#Save the image to current working directory
output_image.save('output_image.png')

クリーンアップ

ソリューションのテストが完了したら、使用していないリソースによる課金を防ぐため、以下のリソースをクリーンアップしてください:

  • SageMaker ノートブックインスタンス内の Jupyter ノートブックをバックアップしましょう
  • SageMaker ノートブックインスタンスをシャットダウンし、削除してください

コストに関する考慮事項

AWS にデプロイしたソリューションでは、以下の費用が発生します:

  • HAQM Bedrock での生成 AI 推論に対する料金が発生します。詳細は HAQM Bedrock の料金を参照してください。
  • SageMaker ノートブックインスタンスの使用料が発生します。詳細は HAQM SageMaker AI の料金を参照してください。

まとめ

この記事では、AI を使った画像生成について紹介し、HAQM Bedrock で利用可能な画像モデルへのアクセス方法の概要を説明しました。さらに、HAQM Nova Canvas を使用した画像生成プロセスと重要なパラメータについて例を交えながら解説しました。この記事で紹介したコードテンプレートとコード例は、HAQM Nova Canvas の基本を理解し、HAQM Bedrock で実際に AI による画像生成を始めるための第一歩となることを目指しています。

HAQM Nova Canvas のテキストからの画像生成機能やその他の機能の詳細については、Generating images with HAQM Nova をご覧ください。ぜひお試しいただき、ご感想をお聞かせください。


著者について

Arjun Singh は、HAQM のシニアデータサイエンティストとして活躍中で、人工知能、機械学習、ビジネスインテリジェンスの分野に精通しています。視覚的思考を得意とし、コンテンツ作成における生成 AI 技術に強い関心を持っています。顧客と協力して、顧客の目標達成に向けた機械学習および AI ソリューションの構築に取り組んでいます。シンシナティ大学にて情報システムの修士課程を修了。仕事以外では、テニスや筋トレ、新しいスキルの習得を趣味としています。