画像生成AI「Stable Diffusion」を使ってみる

「Stable Diffusion」って?

「Stable Diffusion(ステーブルディフュージョン)」とは、ユーザーから入力されたテキストをもとに画像を生成する「訓練済のAIモデル(Diffusion Model)」を搭載した画像生成AIです。ユーザーの生成したい画像イメージを、英単語で区切って入力することで、様々な画像を生成することができます。
(例:「夜の東京タワー」の場合→「Tokyo Tower at night」など)

どうやって利用するの?

Stable Diffusionの利用方法は、

①Webアプリケーション上の環境で生成する
②自身で作成した環境にStable Diffusionをインストール、またはプログラムコードを書き込んで生成

の二通りの方法があります。今回は、手軽に利用できる①の方法でStable Diffusionを利用してみます。

利用までの流れ

まずはStable Diffusionのページ(https://stablediffusionweb.com)にアクセスします。
URLにアクセスすると上記のページが表示されるので、下にスクロールしていくと「Stable Diffusion Playground」と書かれた見出しの下にテキストボックスがあります。そこにAIに画像生成を行ってもらうテキスト(呪文)を入力します。

※以下のようにうまく表示できない場合があるので、その際はページの再表示で解消することがあります。

早速画像を生成してみる

ページにアクセスして準備が整ったら、早速呪文を入力して画像を生成してもらいましょう。
最初は簡単なキーワードで生成してみます。「Tokyo Olympics(東京オリンピック)」と入力後、右の「Generate image」で画像を生成できます。
早ければ8~9秒、遅くても1分程度で画像が生成されるので、押下後、しばらく待ってみます。

生成されたら、4つの画像が表示されるので、生成結果を確認してみましょう。
オリンピックの象徴である五輪の画像をメインに生成したようです。

同じものが表示されないか、もう一度同じ呪文で生成をしてみます。
1回目の生成結果と比較すると、より五輪に近い画像が生成されました。このように、同じ呪文でも何回も生成してもらうことで、より自身のイメージに合った画像を見つけ出すことができます。(このように、呪文の試行錯誤や、画像の選定をする過程を「ガチャを回す」と呼ぶようです)

今度は、日本語で入力した呪文だとどのような生成結果になるかを試してみます。

結果は以下のようになりました。
オリンピック要素がなくなり、街並みのような画像や、地図のような画像が生成されてしまいました。
このように、日本語でも生成自体は可能ですが、英単語での生成に比べると、画像生成の精度は落ちるようです。自分のイメージ通りの画像を生成してもらいたい場合は、なるべく英単語で生成をかけるとよいでしょう。

今度は、有名人の名前を呪文にして生成してみます。
人の画像を生成してもらうので、ついでにその人の挙動も含めて生成してみましょう。
大多数に認知されている方がよいので、「タモリ(森田 一義)さんがスターバックスでコーヒーを飲んで休憩している写真」の画像を生成してもらいます。
(上記をDeepL翻訳ツールで翻訳すると、「Photo of Kazuyoshi Morita taking a coffee break at Starbucks.」となりました。)

生成結果は以下のようになりました。
私達が知るタモリさんとは異なる人物が生成されました。
個人名ではあまりうまく描写できていないようですが、右下画像のコーヒーカップに印刷されているロゴと、画像全体のカフェのような背景から、「スターバックス」そのものがどのようなものであるかは認識しているようです。

もしかすると、海外でも認知度の高い人物であれば、うまく生成してくれるかもしれません。
というわけで、今度はシュワちゃんにコーヒーを飲んでもらいましょう。
「シュワちゃんがスターバックスでコーヒーを飲んで休憩している写真」を翻訳して、「Photo of Schwarzenegger taking a coffee break at Starbucks.」を呪文として入力します。(地味に「シュワちゃん」を「シュワルツェネッガー」として翻訳していますね)

生成した結果は以下の通り。
どの画像もそこそこの精度で生成されています。右上の画像が一番シュワちゃんに近いですね。
この結果から、生成で人物やものを模倣できる範囲の基準としては、「世界的に知名度があるかどうか」が一つのラインとなっていそうです。

どんなときに使う?

3つの単語・シチュエーションで画像を生成してみましたが、AIの画像生成が利用できそうな場面を考えてみました。

1.イメージ通りの画像が見つからないとき
→プレゼンテーションなどで画像を利用したい時、自身の想像する画を自動生成してくれます。
2.普段起こり得ないシチュエーションを見てみたいとき
→有名人Aと有名人Bの共演など、自分の夢見たシチュエーションを生成してくれるかもしれません。

最初のうちは、中々イメージ通りの画像を生成してくれないかもしれませんが、一度コツを掴んでしまえば、いつでも好きなときに、自分が欲する画像を用意してくれる便利ツールになってくれるかもしれません。

イメージ通りの画像を生成してくれる点ではかなり便利なので、是非一度利用してみてください。

今回利用したサイト

「Stable Diffusion」:https://stablediffusionweb.com
「DeepL翻訳ツール」:https://www.deepl.com/translator

【Java】MapとListについて

【MapとListについて】

【Mapにつて】
Mapとは、連想配列のことであり、keyvalueをペアとして保持するクラスです。

valueを追加する時にキーを設定し、keyを使ってvalueを検索・取得が可能になります。

【Listについて】
Javaには、配列という、複数のオブジェクトを管理する仕組みがありますが、事前に要素数を決めなければならず、様々な処理がかかる要素に対しての管理には適してるとはいません。。。
そこでListです。

Listは、格納された要素を順番にインデックスを付けて管理することが特徴です。他にも、重複したデータでも格納できる、既存のインデックスを指定して割り込ませるようなデータ追加が可能です。

【MapとListの違い】

Mapはインデックスとなるkeyとそのデータとなるvalueの両方を定義することができます。keyには整数値のほかにString型などの変数なども指定することができます。keyに指定した変数から、valueを呼び出すことができます。

なお、Mapのキーは重複させることはできません。これに対して、Listは要素を格納した順に自動的に整数値のインデックスが生成され、値と紐づけされます。

Listの要素はインデックス番号を指定して、値を呼び出します。keyと関連付けて値を保持する必要がある場合はMapが適しています。

また、Listは要素の値で並び順を替えるソートができますが、Mapはそのままではできません。

【定義の仕方】
MapもListもインターフェースで、インスタンスを生成することができませんが、オブジェクトは宣言できます。
それぞれのインターフェースを実装したクラスのインスタンスをオブジェクトに格納していおり。
基本的に、MapはHashMapクラスを、ListはArrayListクラスといった、インターフェースを実装したクラスを使用しています。
Map<String, Integer> map = new HashMap<>();
List<String> list = new ArrayList<>();

今回は、MapとListの違いと、実装方法まで書いてみました。
応用としてMapのkeyやvalueをList化させたり、Listの値をMapのkeyやvalueにしたりと、いろいろ関連の深い機能なので、興味があったら是非使ってみて下さい。

巷で話題のChatGPTを使ってみました

chatGPTとは

OpenAIが開発した大規模な自然言語処理モデルの1つ。自然言語での対話や文章生成などのタスクに優れた能力を持っており、様々な用途に利用できると期待されています。

ただし、モデルの性質上、完全に正確な回答を生成できるわけではないため注意が必要だそうです。

早速使ってみた

chatGPTはコードの生成を行ってくれるらしく、早速試してみました。

HTMLでテンプレートとなる最もポピュラーなコードを教えて

image.png

なんとびっくり!コードの生成だけでなく、それぞれのタグの解説まで行ってくれるとは…
これは初心者の勉強ハードルがかなり低くなったのではないでしょうか。

次は少しだけ難しいことを聞いてみます。

HTML、CSSを使って右から左に移動する正方形のコードを教えて

image.png

image.png

image.png

上記のコードがたった数秒で作成されてしまいました。
やばい…!!と思いつつもついつい楽しくなってしまい、AIにできるのか?!というかなり難しい質問をしてみました。

番外編

2泊3日で回れるおすすめ観光スポットを教えて。電車の時間を考慮した移動スケジュール表もよろしく

image.png

image.png

回答が途中で切れてしまいましたね…

でもほとんど大丈夫!

image.png

途中で回答が途切れてしまった場合は「続き」と入力すると続きを送ってくれるそうです。
電車の時間も発→着まで書いてくれるとは…
chatGPT恐るべし!

みなさんも気になったら是非使ってみてください。