はじめに
最近生成AIで画像生成が話題を呼んでいますが、実際に何かアプリに組み込もうとするとAPIで生成することが書かません。今回はGemini API の Imagen 3で遊んでいて不思議な現象を発見したので報告します。
girlを含む画像生成
実行はgoogle colabで行いましたnotebookは
!pip install google-genai
from google.colab import userdata
# 環境変数の準備 (左端の鍵アイコンでGOOGLE_API_KEYを設定)
GOOGLE_API_KEY = userdata.get("GOOGLE_API_KEY")
from google import genai
# クライアントの準備
client = genai.Client(api_key=GOOGLE_API_KEY)
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
from google.colab import userdata
# 環境変数の準備 (左端の鍵アイコンでGOOGLE_API_KEYを設定)
GOOGLE_API_KEY = userdata.get("GOOGLE_API_KEY")
from google import genai
# クライアントの準備
client = genai.Client(api_key=GOOGLE_API_KEY)
response = client.models.generate_images(
model='imagen-3.0-generate-002',
prompt='A 17 aged girl in the spring next to a lake',
config=types.GenerateImagesConfig(
number_of_images= 1,
)
)
for generated_image in response.generated_images:
image = Image.open(BytesIO(generated_image.image.image_bytes))
image.save('imagen3.png')
image.show()
gemini API keyの設定などが必要ですが、それは各自行ってください(参考)。正常に実行されれば左端のファイルメニューにimagen3.pngという画像が生成されるはずですが、エラーが出ます。このエラーは画像が生成されなかったときに出るエラーのようです。何がいけないのでしょうか?
年齢で制限?
17歳の少女というところ(A 17 aged girl)を20歳に変えてみます('A 20 aged girl)。
問題なく生成されるようです。それでは何才だったらNGなんでしょう?調べた限りでは17歳以下だとダメなみたいです。
他の表現
性別を表す他の表現はどうでしょう?A 17 aged person with two X chromosomeとしてみました。ダメでした。ちなみにA 20 aged person with two X chromosomeだと普通に成功するのでX染色体が2個という指示が理解されていないわけではないようです。どうやら、17歳以下の若い女性の画像をimagen3 APIで生成することがアラインメントで禁止されているようです。A 17 aged elf who wears skirt in the spring next to a lakeでもダメだったので空想上の存在でもハイティーン少女を連想させるとみなダメなようです。A 20 aged elf who wears skirt in the spring next to a lakeなOKでした。
この画像なんかは上半身裸なんですが(それに中性的でどっちかというと男性です)、20歳ならいいのが面白かったです。
ブラウザ版ではOK
ブラウザ版のGeminiでも絵を描かせることができます。2.5 pro(preview)にdraw a 17 aged girl in the spring next to a lakeと入れてみました
普通に描いてくれるようです。これ中身はimagen3だとされているので同じimagen3でもAPIでは17歳以下の少女の画像が生成できず、ブラウザ版ならできるみたいです
考察
なぜこうなっているのでしょうか?APIではヤバい画像(裸体とか)を描かされてしまった場合、止めるのが難しいが、ブラウザ版ならプロンプトにヤバい命令が入っていたら拒否するという機能を内部的に設定できるからそこまで厳しくしなくてもいい、ということじゃないでしょうか?APIは多数回の実行が予想されますし、その一回一回にヤバい画像かどうかの判断を設定するので重くなり、負荷が増えるので厳しめにアラインメントされているのでは、と予想しました
おわりに
APIをつかって何かしようとする人はこれから増えて来ると思うのですがこういうことがこれからもあるのかな、と思いました。