
テストデータは探すから作る時代へ!Stable Diffusionでテスト用画像データを用意してみた
SETエンジニアの坂口です。テスト自動化を日々頑張っています💪
テストをする時のテストデータを大量に用意するのって大変ですよね。
万が一テスト環境が表に出てしまった時のことを考えると、外部に迷惑がかからないよう固有名詞を避けたり著作権フリーな素材を使うのが良いのですが、
名詞や人物名は自動生成するツールがある一方、画像は今まで補助ツールがなく頑張って探してくるしかありませんでした。
しかし近年AIでお絵描きができる技術としてStable Diffusionが注目されてきました。今回はこれを使ってテスト用の画像を生成してみます。
とりあえずやってみた
O:derは店舗向けのプラットフォームです。今回は飲食店をターゲットとし、料理をメインに作ってみます。
AIにプロンプトと呼ばれる文章を入力することでAIがそれを理解し画像を生成してくれます。
まずは店のロゴにワインをモチーフにしたものを作ってもらいました。
A company logo with red wine motif

3回目ぐらいの生成でいい感じのが出ました!今回はテストデータ用なので正しいかどうかより、雰囲気で採用するか決めています。
そのままカバー画像も生成します。カバー画像はもう少し直球に、
Red wine

斜めに曲がったワイングラスがなんとも言えない雰囲気ですね!
料理
いくつかのマジックワード(とりあえず入れておくと良いワード)を追加するとよりよい画像が生成できます。
マジックワードは欲しい画像が生成されるように調整するために使います。
A catalog photo of beef meat steak

ただ beef meat steak とするより A catalog photo of をおくことでよりおいしそうな画像が生成されやすくなります。
a menu photo of the restaurant of meat sause spaghetti, highly detailed

後ろで何か燃えている気がしますが、おいしそうなのでOK!
そしてこれらの画像をもとにテスト店舗を作ったのがこちら!



なんだかそれっぽいですね!料理の写真がとてもリアルで本当にお店の写真のように見えます。でもAIが生成したんです!すごい!
生成方法
Stable Diffusionを使うにはかなりのGPUパワーが必要となります。普通のPCでも実行するのは難しいでしょう。そこでGoogleから研究用にGPUインスタンスマシンを借りることができるGoogle Colabを使います。
Stable DiffusionはPythonで書かれていますが、より簡単に実行できるようJupyter Notebook形式にまとめたものがありますので、今回はそれを使います。
Stable Diffusion with 🧨 diffusers
基本的には上からポチポチと実行ボタンを押すだけでいいのですが、途中でhugging Faceへのアクセストークンを求められます。アクセストークンの取得は以下の記事を参考にすると良いです。
Stable Diffusion を Diffusersライブラリで実行する方法
「アクセストークンの取得」が参考になります。
スクロールしていくと宇宙飛行士が馬に乗っている写真が出てきます。そこの prompt = "a photograph of an astronaut riding a horse" を書き換えて実行することで画像が生成できます。あとは生成された画像を右クリックして保存すればOKです。
最初のうちは思い通りの絵がなかなか生成されないですが、何度か同じプロンプトで実行を繰り返してみてください。偶然良い絵ができたらそれを採用するような形で進めると良いでしょう。
なおColabの無料枠には時間制限があります。体感でおおよそ半日は連続で実行できますが、時間が切れると1日ほど開けないと使えませんので注意してください。
AIで生成したイラストの著作権について
こちらはStable Diffusionのライセンスに書かれています。
Stable DiffusionはCreativeML Open RAIL-M licenseで公開されています。
その一部を抜粋すると、
Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare, publicly display, publicly perform, sublicense, and distribute the Complementary Material, the Model, and Derivatives of the Model.
ざっくり意訳すると、生成した画像は生成者が著作権を持ち、自由に利用して良いと書かれています。なのでこの画像が何かに似ているからといって著作権を侵害したことにはなりません。もちろん混乱回避のためには人名や特定の固有名詞をプロンプトに入れない方が良いでしょう。もともとそういったリスクから回避するために今回の記事を書きましたので。
そして当たり前ですが、生成した画像の責任も当然生成者が持ちます。不適切な画像は生成しないようにしましょう。一応Stable DiffusionにはNSFWフィルタがあるので万が一そういった画像が生成されそうになると真っ黒な画像に差し替えられるのでご安心ください。
まとめ
すごくお手軽にAIで画像生成できる時代が来てしまったんですね。今までテスト用の画像データ探すのだりぃ〜となってた人はぜひ使ってみてはどうでしょうか。