「あると便利かも」という思いつきから始まった、SDXLを活用したバナー画像生成の試み

この記事はGoodpatch Advent Calendar 2023の23日目の投稿になります。

Goodpatchでソフトウェアエンジニアをしている 中田 です。

寒さがグッときて、もうすぐクリスマスって感じの12月23日ですね。アドベントカレンダーもあっという間に23日目。クリスマスまで待ち遠しい気持ちは、皆さんも感じているはず。そんなわくわく感を共有しつつ、「気軽にちょっと楽しく」がモットーに、画像生成AIを活用したバナー画像生成アプリを開発していることを共有します。思いつきで始めたこの小さなプロジェクトを一緒にのぞいていきましょう。

あると便利かも?ABDDってなに?

プログラム開発手法にはいろいろありますが、「(それ)あると便利かもドリブン開発 Aruto Benri-kamo Driven Development」、略してABDDはご存知ですか?ざっくり言うと、ふとした瞬間に閃いたアイデアや、話題になっている技術を軽い気持ちで形にしてみる開発手法です。2017年、まさにそんな休日のひらめきから筆者が生み出した造語で、xDD(x駆動開発:x Driven Development)の一つとして(勝手に)位置づけています。

ABDDの定義

プログラム開発手法の一種で、ユーザー機能駆動開発から派生。Slack に投稿された同僚の何気ない一言や、チーム内の備忘録にストックされた要望、開発者自身の怠惰などがソフトウェアに必要な要件となるのが特徴。また、数時間・数日といった短い期間内に顧客に提供するため、休日プロジェクトに最適。ただし、要件は曖昧であり、それが提供されても課題が解決しないこともある。

2017年当時の勤務先での社内LT会の発表スライドより抜粋

世に広まっているわけではありませんが、ABDD の特徴は何といってもそのカジュアルさです。Slack での同僚の一言や、自らの怠惰から生まれるインスピレーションを要件として取り込みます。そして、それを数時間から数日という短いスパンで形にしてみる。お手軽で気楽な開発ですが、新しい技術への挑戦があったり、長期的なプロジェクトに発展することもあります。

この記事では、ABDD で始めたアプリ開発が長期的なプロジェクトに発展した実例を紹介します。

実際にバナー画像を生成してみた

さて、この記事のバナー画像、見てくれましたか?実は画像生成AIを活用した自作のアプリケーションで生成しています。

この記事の他にも次の記事でも使用されていて、写真のようなもの、ローポリ(ローポリゴン)、サイバーパンク、抽象的なものなどバリエーション豊かです。

開発した Mac アプリを使って生成したバナー画像の使用例

次の4つは後述する Midjounery でプロンプト修行していた期間に生成した画像を使用しています。

Midjounery でプロンプト修行していた期間に生成した画像の使用例

ことの始まり

筆者が投稿するテックブログ記事では、長く同じバナー画像を使っており、新鮮味が失われていきつつあるという感じていて、そこを改善したいと思っていました。しかし画像を自分で一から作るのは困難であり、バナー画像を生成できるツールがあると便利かもと考えていました。

そうしていると、2023年4月14日に Stability AI が Stable Diffusion XL(以下、SDXL)のベータ版を公開し、API からも利用できようになったので、週末に試してみることにしました。

Stable Diffusionの上位モデルXLのベータ版を、Dreamstudioにて一般公開。API提供も開始。|Stability AI 日本公式

4月29日の夕飯前に生成した画像

画像生成 AI の仕組みを学ぶ

SDXL でひたすら画像を生成していると、画像生成プロセスで用意されているパラメータがどのように使用されているのか疑問に思いました。これもタイミングよく WEB+DB PRESS Vol.134 に特集記事『画像生成AIのしくみ Stable Diffusionの内部を探る』を見つけ迷わず購入。この特集を読み、疑問が払拭し、Stable Diffusion が苦手としていること、効率的よく画像生成する方法を学びました。

しかし、しばらく画像生成を繰り返したのですが、望むような画像を生成できませんでした。

プロンプト修行の旅

そこで、社内でも活用している人の多かった Midjourney にチャレンジ。Twitter の ALT 属性で共有されるプロンプトから多くのインスピレーションを得ました。プロンプトの備忘録とバナー画像の種をストックすることを目的に、Notion でデータベースを構築。修行とはいえ、楽しみながら。

プロンプト修行中に生成した画像をプロンプトDBとしてストック

7月ごろになると Midjourney を使いこなせるようになってきた

Midjourney を使い始めて 2 ヶ月ほど、筆者が望むような画像を生成するプロンプトを作成できるようになってきたのですが、アプリケーション化した際、利用者が同じようにプロンプトを入力できないだろうという結論に至ります。

そこで、ユーザーからは求める画像のサマリーだけを入力してもらい、GPT-3.5 ないし GPT-4 を使いプロンプト化することで、生成する画像の広がりを持たせることにしました。

プロトタイプを作る

将来的には Web アプリケーションとして公開することを目指していますが、サクッと Mac アプリとしてプロトタイプを作りました。

最初期のプロトタイプ

stable.ai の text-to-image API には style_preset という、イメージモデルを特定のスタイルに導くパラメータがあります。現在 cinematic digital-art anime fantasy-art neon-punk など合計 17 個用意されており、たとえば low-poly をしているローポリ(ローポリゴン)な画像を生成できます。同じプロンプトで style_preset を変えることにより生成する画像のバリエーションを簡単に増やせます。筆者の好みとしては cinematic photographic isometric low-poly をよく使い、抽象的な画像を生成したい場合は tile-texture を使うこともあります。

現在のプロトタイプ。この記事のバナー画像を生成している

ちょっと脱線、gRPC に挑戦

stable.ai は REST API だけでなく gRPC API も提供しています。このプロトタイプの Mac アプリは、SwiftとSwiftUIで実装しています。そこで Swift の gRPC クライアントの実装にも挑戦。ドキュメント不足の中での試行錯誤は、新たな学びの機会となりました。gRPC API の仕様は Pythonのコード から読み解きました。

DALL·E 3 や GPT-4V(ision) にも波及

プロトタイプの最新バージョンでは OpenAI の DALL·E 3 もサポートしており、SDXL と DALL·E 3 の出力結果の比較も簡単です。

DALL・E 3 と SDXL の生成結果の比較(社内 wiki より抜粋)

プロトタイプとして作成した Mac アプリをベースに、GPT-4V(ision) を検証するツールも短時間で開発しました。

DALL・E 3 で生成した4つの画像から起承転結のストーリーを作ってもらう例

そして、たどり着いた境地

心境の変化

ここまで 500 個以上の画像を生成してきましたが、求めるバナー画像に近づけるには時間もかかり、なんだか疲れてしまいます。この過程でふと、自分の手でバナー画像を作ってみたいという気持ちが湧いてきました。これまで AI に頼ってきましたが、自分で何かを作り出すというのは、また違った種類の満足感を得られそうです。手探りになり、思うように進まないかもしれませんが、それを楽しんで…

と、心境の変化を感じていた矢先に、なんと! Stable Video Diffusion API(Alpha Release)が登場。

Stable Video Diffusion API Alpha Release | December 20th, 2023

このプロジェクトの過程で Runway の Gen-2 を使って image-to-video を試していたので興味津々。早く試したい。

これまでにSDXLで生成した画像たち

おわりに

さて、この記事でちょっと変わった開発方法「ABDD」と、それから生まれたバナー画像生成アプリについてお話ししました。最初はただのひらめきでしたが、実際に形にしてみるとすごく楽しかったです。開発する中で、AI の力を借りながらも、最終的には自分の手で何かを作りたいと思うようになりました。AI はどんどん進化して、動画生成にも手が出せそうな勢いです。

もし皆さんの中にも「それあると便利かも」と思うアイデアがあれば、手を動かしてみましょう。思いがけない創造性の扉が開かるかもしれませんよ。

それでは、よいクリスマスを!


Goodpatchではデザイン好きなエンジニアの仲間を募集しています。 少しでもご興味を持たれた方は、ぜひ一度カジュアルにお話ししましょう!