【Stable Diffusion】写真と絵の混在

Stable Diffusion(画像生成システム)を使って人物画を作ると、写真と間違えるクオリティができたりする。

自分の顔を描かせているうちに
 俺、こんなところに旅行したのかな?
と記憶が錯乱する可能性を感じる。

人物は写真っぽいけど、背景はイラストっぽい。
こんな感じで現実じゃないぞ!と区別できる工夫をしておくと良いのかも。

と思ったけど、壁画の前で写真を撮ったのかな、とか考え始めるとキリがない。

これは現実とは思えない画像、写真にはできない画像を作ると、AIを活用してる感覚が増えて良いかもしれない。


【Stable Diffusion】画像生成AIに挑戦

人工知能(AI)ブームが発展してます。
生成系AIなるものが、世の中を変え始めました。
いえ、すでに変わったのかも知れません。

対話系の生成AI「ChatGPT」の技術は、
数十年後もしくは数年後には、
現在のスマホくらい普及するでしょう。

萩原が注目しているのは画像生成AIです。
そのうちの1つ Stable Diffusion を使用し始めました。

Stable Diffusion は text-to-image モデルと呼ばれるジャンルのシステムの1つ。

「犬」と文字(text)で入力すると、犬の画像(image)を描いてくれます。
「火星を歩く犬」と入力したら、犬が火星を歩いている画像を描いてくれます。
写真と見間違うようなクオリティにもできるし、マンガっぽいタッチにもできます。
写真のようにしたければ
「写真, 火星を歩く犬」のように、作りたい画像を説明するキーワードを羅列するだけでOKです。

Stable Diffusionを使うメジャーな方法は3通り。
1.「Stable Diffusion Online」というウェブサイトにブラウザでアクセスして、ブラウザ上でサービスを利用。
2.Stable Diffusionのファイルをダウンロードして、パソコンにインストール。
3.Google Colab上にインストールして利用。

一番お手軽は1番目。お試しするだけでビックリすると思います。
もしも2.が可能であれば、自宅のパソコンなどにインストールして、好きな画像を好きなだけ作ったりして楽しめます。でも、GPUと呼ばれる処理装置が無いパソコンだと、画像生成時間がべらぼうにかかります。GPUがあれば1分で造れる画像も、ない場合は15分など。(実体験)
Google Colabを使う3.であればGoogleのGPUを利用できるので、2.を仮想的に実現できます。ただし、GPU利用によってColabの料金が発生します。

Stable Diffusionを使う時に入力する文字列(例:写真, 火星を歩く犬)は「prompt(プロンプト)」とか「呪文」と呼ばれます。
promptを工夫することで、好きな画像を作れるようになります。逆に、うまく工夫できないと、満足できない画像が生成されることも。

説明はこのくらいにして、Stable Diffusionを使って、実際に僕が作った画像をお見せしますね。

Stable Diffusionの生成例1

頭にバラを乗せた萩原(私)。

写真じゃなくて、Stable Diffusionが作った画像です。

他の例も観てみましょう。

Stable Diffusionの生成例2
Stable Diffusionの生成例3
Stable Diffusionの生成例4
Stable Diffusionの生成例5
Stable Diffusionの生成例6
Stable Diffusionの生成例7

こんな感じです。

萩原の可能性をグイグイと引き出してくれますね。

最後の例7に写った女性は、実在しません。絵です。

萩原の画像を生成できるのは、私が工夫をしたからです。オリジナルのstable diffusion周りでは出来ません。

stable diffusionはモデルと呼ばれるファイルを基に画像を生成します。私は自分の顔写真を使って、独自のモデルを作成しました。そして、stable diffusionに独自モデルを参照させています。

独自モデルを作る為にDreamBoothと呼ばれるシステムを使いましたが、ここでは説明を省きます。DreamBoothも無料です。

さらに工夫すると、生成した画像が喋る動画を作ることもできます。

顔画像1枚と音声ファイルから動画を生成するシステム SadTalker。
文字列から音声を合成するサービスCoeFont。
これらを利用して作ったのが次の動画です。

あなたの優しさや思いやりに いつも感動します

というわけで画像生成AIで造った画像、その先の話を例で紹介しました。

おじさんの顔をメインにした画像の例は、検索してもあまり見つかりませんでした。
この記事の画像はレアものってことかもね。

生成していて楽しいので、気が向いたら新たな画像を上げるかも知れません。
いや、きっと上げるよ。

AIで造るおじさん画像集みたいなサイトになるよ、ここ。


LaTeXもいけるよChatGPT

英語で論文を書くとき、
特に数式の含まれる論文を書くとき気になるのが

  • タイポ(スペルミス)
  • 文法間違い
  • 自然な表現、読みやすい表現

ではないでしょうか?

さて、数学・情報数理学系の我々が論文を書くときの標準ツールが
「LaTeX」
という組版システムです。(自動レイアウトワープロみたいなもの)

LaTeXでの数式表現は独特です。
例えば、
  XとYを集合として、f : X → Y を全単射とする。
というのをLaTeXで書くと
  $X$と$Y$を集合として、$f : X \rightarrow Y$ を全単射とする。
のように記述します。
「→」を「\rightarrow」と表現するなど、独特のコマンドを用います。

 コマンドが混在することで、上記のような短い文章でも、英語で書くとスペルミスや文法ミスがいつも以上に発生しやすくなります。

 スペルチェックや文法チェックのシステムは様々あります。

 例えば、LaTeXコマンドがあってもタイプミスを探し出せるスペルチェッカーのaspellがありますが、文法チェックはできません。また、文法チェックのGrammarlyを使うと、文法チェックができる上にお薦めの表現を教えてくれますが、LaTeXのコマンドが混ざった文章だと文法ミスの見逃しが発生しやすくなります。

 そこで朗報です!!
 ChatGPTを使うと、LaTeXコマンドを含む文章でも、
・スペル修正
・文法修正
・さらに推敲
などを同時に行えます。
 100%完全かどうかはわかりませんが、
以下の例をみると、その実力を確認できます。

 

 ChatGPTを起動したら、最初に次の文言を入力します。
以下、入力する文言をプロンプトと呼びます。

You are a professional editor with LaTeX.

すると、ChatGPTから次の回答がありました。

 なんだかノリノリに見えます。

そこで、次のプロンプトを入力しました。敢えて、よろしくない表現を散りばめています。

Please edit the following.

Let $X,Y$ be a set of integers, and $f$ be a map form $X$ to $Y$ and is a bijection.

これに対するChatGPTの回答は以下です。

完璧です。
・「$X,Y$」を「$X$ and $Y$」に修正。
・「a set of」を「sets of」に修正。
・「and $f$ be」 を「and let $f$ be」に修正。
・最後の「is a bijection」と「map」を合わせて「$f$ be a bijection」に修正。
・タイポ「form」を「from」に修正。
なんて、賢いのだ!

さらに続けて、次のプロンプトを入力しました。

Please edit the following.

Let $X,Y$ be a set of integers, and $f$ be a map form $X$ to $Y$ and is a bijection.
This implies that $\exists g$ from $Y$ to $X$ such that $g f (x) = x$ for $x \in X$.

これに対して

こちらも凄い。
・「a map from $X$ to $Y$」が「$f :X\rightarrow Y$」に。LaTeXのコマンド化。
・「that $\exists g$」という言葉足らずを「that there exists a map $g$」と文章で補完。
・式「$g f(x) = x$」を「$g\circ f(x)=x$」にして、写像の合成を明記。
・「for $x \in X$」を「for all $x \in X$」へと文章で補完。

惜しむらくは、, where $circ$ is the … のように写像の合成$\circ$の説明が欲しかったことか。

私の好みですが、LaTeXコマンドが直前の記号とくっつくと読みづらいと感じます。

そこで、次のプロンプトを与えました。

I prefer a blank before \ for mathematical symbols.

こうすることで次の回答を得ました。

私好みです。見やすい。

やっぱり、$\circ$が気になります。
次のプロンプトを入力。

I think the explanation of $\circ$ should be added.

これに対するChatGPTの回答は

ちゃんと、whereで補足を書いてくれました。
さらに定義に相当する$g(f(x))$も明記。
直前にお願いした、LaTeXコマンド前のスペースも忘れていない。

・スペルミスの修正(文脈を踏まえて、formがfromになりました!)
・文法の修正(a set of をsets ofに。and f be が and let f beに。)
・表現の推敲(bijectionをmapと一緒に。文法ミスでもありますがX, Yが X and Bに。)
・内容の補足(circの定義。anyの追加。)
・好みに合わせた記述(コマンド前にスペースを挿入。)
・LaTeXコマンド込みの編集(f from X to Y が f : X \rightarrow Y に)

これらを一括して行えるChatGPTは、
LaTeXを使った数式文書作成において
欠かせないパートナーになりそうです。