Amazon Web Services ブログ

NFT用の画像を生成AIを使用して大量に作成する方法

NFTにおける画像生成

NFT(Non-Fungible Token)市場では、プログラムによって自動生成されたデジタルアート作品が多数取引されています。これらの作品はジェネラティブアートと呼ばれ、アルゴリズムを用いて無数のバリエーションの作品を生成することができます。

代表的な手法として、CryptoKittiesのようにキャラクターのパーツ(体、目、耳、尾など)を予め用意し、それらをランダムに組み合わせることで新しいキャラクターを生成する方法があります。この方法ではアーティストがルールを決めた上で、そのルールに基づいてさまざまなバリエーションの新しい画像をプログラムで作り出すことができます。最近では、DALL・EやStable Diffusionなどの生成AIを活用し、テキストのプロンプトからNFT用の画像を自動生成する試みも増えています。

NFT(Non-Fungible Token)は1点モノのデジタルアートであることが多く、多数のNFTを作成する場合は素材となる多様な画像が必要です。しかしアーティストにとって多数の画像を手作業で作成することは大きな負担です。

そこで注目されているのが、生成AIを活用した自動画像生成です。
本記事では、生成AIを使ったNFT用の大量画像生成の方法を解説します。
生成AIが持つ創造性を活用することで、効率的かつ魅力的なバリエーション豊かなNFT用の画像生成が期待できます。

Amazon Bedrockを用いたNFT用の画像生成

NFT用の向けに大量の画像を効率よく生成する手法としてお勧めするのが、Amazon Web Services が提供するAmazon Bedrockの生成AIを使用する方法です。

Amazon Bedrockはクラウド上で動作する生成AIの基盤モデルで、大規模言語モデルや画像生成モデルをAPI通じて呼び出せます。基盤モデルに対してテキストのプロンプトを入力することで高品質な画像を生成してくれます。NFT用の場合、コンセプトなどのテキストを入力することで、作品の世界観を反映した多様なバリエーション画像を大量生成できます。

生成AIが作成したNFT用の画像
Amazon BedrockとStable Diffusionを使用して生成した画像

Amazon Bedrockを使ってNFT用の画像を生成するには、まずコンセプトとなる入力画像を用意します。作品のイメージを決め、その世界観や構成を示した代表的な画像です。

この入力画像をbase64形式にエンコードし、テキスト形式のプロンプトと合わせてAmazon Bedrockに入力することで、画像の持つ特徴を生成AIに伝えられます。その結果、入力画像の世界観や構図を保ちつつ、プロンプトで指定した要素を含んだ新しい画像を生成できます。

AWS Step Functions Distributed MapとAmazon Bedrockを使用した大量生成

AWS Step FunctionsのDistributed Mapを使うと、Amazon Bedrockによる画像生成を並列で実行できます。これにより大量のバリエーション画像を効率的に生成できます。ただし、Amazon Bedrockにクオータの制限があるため、並列実行数は低めに設定しましょう。

Distributed Mapは、CSVやJSON等で定義された入力データを並列のブランチに分割して処理し、結果をまとめる機能です。NFT用画像を生成する場合、入力値であるプロンプト定義をJSON形式で事前に用意しておきます。プロンプト定義はプログラムを用いて、例えば「髪型をショートカットにする」「髪色を金色にする」「背景色を金屏風にする」などさまざまな要素を事前に用意し、乱数に基づいて選択すると思いもよらない組み合わせができて面白いかもしれません。

このようにプロンプトとAWS Step FunctionsとAmazon Bedrockを組み合わせることで、大量のバリエーションに富んだNFT用の画像を効率よく生成できます。

AWS Step Functionsに渡す入力値の例です. 使用する生成AIのモデルや入力画像を保存しているAmazon Simple Storage Service(Amazon S3)の情報も一緒に渡します。 id や rank といった情報を生成AIのseed値に変換して用いることでバリエーションを増やすこともできます。

[
  {
    "id":"A1",
    "rank":"nomal","inputBucketName":"111122223333-aa-example-1-input-image-bucket",
    "inputKeyName":"image.jpeg",
    "model":"stability.stable-diffusion-xl-v0",
    "prompt":"hair color is brown, backglound color is white"
  },
  {
    "id":"A2",
    "rank":"vip","inputBucketName":"111122223333-aa-example-1-input-image-bucket",
    "inputKeyName":"image.jpeg",
    "model":"stability.stable-diffusion-xl-v0",
    "prompt":"hair color is gold, backglound color is red"
  },
]

大量に生成する場合、再現性を確保するためにプロンプトの管理や保存が必要となります。また、並列実行数の制御やエラーハンドリングなど、細かな制御を実装する必要が出てきます。AWS Step FunctionsのDistributed Mapを使用することで、プロンプトや入力値等のパラメータの管理は事前に作成したJSONファイルに、並列実行数の制御やエラーハンドリングはAWS Step Functionsに任せることができるため、エンジニアが実装する箇所を減らすことができます。

サンプルコード

aws-samplesのnft-image-generatorでサンプルコードを公開しています。これを使用することにより、AWS Step FunctionsとAmazon Bedrockを組み合わせたNFT用画像生成の仕組みを体験することができます。
環境構築の方法や使用方法についてはGithubのドキュメントを参照してください。

アーキテクチャ

実際に生成した画像

冒頭で作成した画像を入力画像として使用し、複数のバリエーションを生成しました。キャラクターのイメージやコンセプト、世界観などを維持しながら、髪色や髪型、メガネの色や形などが少しずつ異なる画像に仕上がったと思います。

実際に生成した画像
Amazon Bedrockを使用して入力画像をベースに生成した画像

まとめ

NFT用の画像生成には、生成AIを活用することで効率的に多様なバリエーションを作り出すことができます。
今回使用したアセットはaws-samplesのnft-image-generatorで公開しています。NFT用の画像生成についてチャレンジしたい方はご活用ください。

深津 颯騎

Amazon Web Service JapanのBlockchain Prototyping Engineer.
Blockchain, Web3に関わるお客様を中心に技術支援を行っています。