見出し画像

生成 AI を使ってじょしちゅうがくせを創って自分もじょしちゅうがくせいになって会話した話(4)じょしちゅうがくせい生成編-2

前回までのあらすじ

  • じょしちゅうがくせいのキャラクター性を持つ Voice Chat 作成:

    • OpenAI の ChatGPT API を使えば、それぽいテキストチャットが比較的楽に作れてしまった。

    • 音声生成も VOICEVOX という神アプリによってそこそこ良い品質で達成できてしまった。

これまでの記事:

ということで、本記事では前回分に収められなかった「 2. じょしちゅうがくせい(びしょうじょ)生成」の最終工程である、「キャラクターのガワの用意」について、実際に使った各手法の説明とその参考情報についての記録をしていきます。

そして、最終的な動画の作成についての説明を「一人じょしちゅうがくせいコラボ動画の作成」の節に記載し、最後に一連の記事のまとめと Future work について「Discussion and Conclusion」に書いて終わりにしたいと思います。


2. じょしちゅうがくせい(びしょうじょ)生成-2

2. キャラクターのガワの用意

キャラクターの外装というか身体については、可能なら自分と同じように Live2d モデルが欲しいところです。ただし、今回の動画では、以下の理由で断念しました。

  • Live2d モデルを作る場合、かなり時間がかかる(適当な見積もりだが、フルタイム労働しながら、私たちの様な普通の人が Live2d モデルを 1 体作ろうとすると 2~3 か月程度はかかってしまう)。

  • とはいえ、数十万円もの大金を何のお金も生み出さない趣味に支払える様な余裕は自分にない。

  • Live2d モデルが用意できたとしても、音声に合わせたリップシンクを実装する必要がある。単純な口パクであれば SpeechRecognition の応用などで可能かもしれない。しかし、発声に合わせた口の形の制御となると難易度が一気に跳ね上がる。

  • より難しいタスクとして、発言に合わせた表情制御、身体制御が必要になる。これは、身体性のない ChatGPT に解かせるのは少し厳しいかもしれない。代替案として、宇宙世紀の一般モビルスーツみたいに、事前に複数パターンのモーションを Live2d のアニメーション機能で作成しておき、ChatGPT に出力させた何等かの指標(例:感情パラメータ等)の値によって、適切なモーションを呼びだすと言った制御方法が考えられる。ただ、この方法をとるとしても、モーションの作成、そして制御用のコード実装が必要である。これは、そこそこの(いや、かなりの)作業時間がかかると予想される。

ということで、Live2d モデル を準備して AI キャラクターの身体に活用するというのは結構大変なため、代替案として、今回は以下の手順でお手軽にキャラクターのガワを用意しました。

  • AI 画像生成を用いてキャラクターの立ち絵を生成

  • 生成したキャラクターの立ち絵から、表情差分画像を生成する

  • 表情差分画像を用いて簡易的なリップシンクと瞬きを実現する

それでは各手順について、やった内容の概略を説明していきます。なお、本手順については、参考情報に上げている、「Talking Head Anime from a Single Image 3 で Novel AI で作った猫耳メイドを動かす」を参考にしています。

ただし、最後の手順である「表情差分画像を用いて簡易的なリップシンクを実施する」については、情報源がどこだったのかブラウザの履歴を探してもわかりませんでした。内容的には以下のページに記載されている手順とほぼ同じです(ですが、記事の日付が 2023.06.20 となっているので、自分が初めにやった時と日付が合わないですね。検索しても他に同様の手順で実施しているページが見つけられませんでした)。

AI 画像生成を用いてキャラクターの立ち絵を生成

AI 画像生成については、最早説明不要でしょうね・・・去年の今頃はまだキャラクターを生成しようとすると余裕で溶けており(Midjourney や Stable Diffusion の初期モデル)、まともにキャラ生成なんてできた物ではありませんでしたが、今ではキャラクター画像生成も余裕で出来てしまう様になってしまいました。

今回は、以下の自分で描いたキャラクターのラフ画像を入力にして、NovelAI の 画像生成機能を使い立ち絵の生成を行っています。デザインは自分がきんぱつへきがんなので、ぎんぱつせきがんにしました。

image-to-image の元絵にするキャラクターのラフ画

画像生成の際の手順は以下です。

  • キャラクターのラフ画を入力にして image-to-image で数枚画像を生成 -> 生成された画像の中から一番気に入った画像を選択してさらに image-to-image -> 気に入るまで繰り返す -> 最後に画像サイズを拡大する

こう書くとすぐに出来てしまいそうですが、実際の所は数時間やり直しをし続けましたし、気づいたらしばらく使わずにいた Anlas も半分以上消費していました。

これは印象でしかないですが、初めから image-to-image で、立ち絵を生成させるのって、AI 画像生成にとってはあまり得意なタスクではないのかも?しれないですね・・・

とはいえ、参考にしたページを見ると、「standing multi angle reference sheet」とプロンプトを入れているみたいです。私は当時この記述を全く見ずにやってしまって、全然上手く行かず何度もやり直す羽目になりましたが、このプロンプトを入れると、もしかしたら都合よく立ち絵(というか複数角度からの立ち絵ポーズ)が生成できるのかも。

ということで、何度も試行して最終的に選択したキャラ画像が以下になります。

AI 生成画像

この画像、拡大しなければあまりわからないですが、よく見ると、眉が薄くてほとんどなかったり、首回りの服と髪の毛が溶けあっていたりと、若干問題個所があります。そのため、この辺りについては、もう直接 CLIP STUDIO PAINT を使って修正してしまいました。その修正版キャラ画像が以下になります。また、次工程で必要なため、この段階でキャラ部分のみを切り出して背景を透明色にしています。

 修正版のキャラ画像

生成したキャラクターの立ち絵から、表情差分画像を生成する

キャラクターの立ち絵ができたので、次に立ち絵画像について表情差分画像を生成します。そんなことできるの?と一見思いますが、今では単純な立ち絵が対象であれば、その様なことも可能です。

それを可能とするのが、Demo Code for "Talking Head(?) Anime from A Single Image 3: Now the Body Too" という画像生成モデルです。

本モデルは、キャラクターの立ち絵一枚から、あたかも Live2d モデルを動かす様に、表情変化や簡単な身体の動きの変化など、様々なキャラクターの差分画像の生成ができるという、かなり凄いことを平然とやってのけるモデルです。連続的に画像を生成しているだけではありますが、Face Tracking と連携する機能も実装されているため、ハイパワーな GPU であれば、1枚絵から Face Tracking して Vtuber のアバターとして利用する使い方もやろうと思えばできますし、実際にそれを実践している人もいます。

とはいえ、自分はリアルタイムに動画が生成できるほどの GPU をロカールPCに備えていないので、Talking Head Anime は、単純に差分画像の生成用として利用します。Talking Head Anime には、マニュアル操作でパラメータを操作するインターフェースもあるので、今回はそれを用いて、以下 4 枚の差分画像を生成しました(目開け閉め×口開け閉めの計4枚)。この際、画像解像度に512×512pixelという制限があるため、元画像もこのサイズに合うようにサイズ縮小しています。 

表情差分1
表情差分2
表情差分3

この差分画像を使って、次工程のリップシンクと表情変化(瞬き)を実施します。

表情差分画像を用いて簡易的なリップシンクと瞬きを実現する

リップシンクと瞬きは、だれでもVtuber というアプリケーションを用いて実施しました。このアプリケーションは、4枚の画像(目開け閉め×口開け閉めの計4枚)を入力画像に指定することで、瞬きと口の開け閉め(リップシンク)を疑似的に表現するという機能を提供しています。

口の開け閉めや瞬きと言っても、別に画像間の補間の様な高度な手法ではなく、音声を入力として、発声があった時に口開けの画像を表示する、そして、時々瞬きの表現として目閉じ画像を表示する、ということをしているだけです。

かなり単純な仕組みではありますが、キャラ表現で最低限必要な口パクと瞬きの表現はできるので、今回はこれでいくことにしました。

ここだけ生成 AI 技術ではないですが、Talking Head Anime でさえ、512×512pixel 程度の低い解像度の画像を(個人のPC向けの用途では)最高性能の GPU を使って何とか動かすのが限界、というのが今の生成 AI の到達点です。やはり動画のリアルタイムな生成となると、今の個人が運用できる計算リソースではまだかなり厳しく、現状主流である Live2d などを代替するには、まだ数年以上はかかりそうな印象が個人的にはあります(と、キャラクター画像生成についても、去年自分は思っていたのですが・・・思ったより発展がもの凄かった。これはやっぱりエロの力が強かったんじゃないかなぁと思っています。エロの力はエントロピーも凌駕しますからね)。

このキャラクター部分について改良するのであれば、生成 AI で頑張るのは今はまだ技術的に厳しくて、可能な能力を持っているなら Live2d で数か月かけて作ってしまう(か、富豪なら買ってしまう)のが現状のベストプラクティスかなぁ・・・というのが自分の中の結論ですね。来年どうなっているかはわかりませんが。

3. 一人じょしちゅうがくせいコラボ動画の作成

ということで、全ての材料が以下の様にそろいました。

  • じょしちゅうがくせい化

    • じょしちゅうがくせい体の作成(Live2d)

    • じょしちゅうがくせいボイスへの音声変換(MMVC)

  • じょしちゅうがくせい生成

    • じょしちゅうがくせいパーソナリティな Voice Chat の作成(SpeechRecognition、Whisper、ChatGPT、VOICEVOX)

    • じょしちゅうがくせいの身体生成(画像生成、Talking Head Anime、誰でもVtuber)

後はそれぞれの要素を動画として統合するだけです。これについては、通常の配信用アプリケーションを組み合わせることで可能なため、さっと説明していきます。

背景画像の生成

ほぼおまけですが、動画の背景画像についても説明しておきます。今回の動画で、背景は完全にサブ要素ですし、時間もかけたくなかったので、生成 AI で作ってしまいました。キャラクターと同様に Novel AI で生成(こちらは text-to-image でゼロから生成)しました。生成した画像は以下です。

AI 生成した背景用画像

この画像を元に、CLIP STUDIO PAINT を使って、LT 変換で線画を抽出し、さらに色調の調整や、グラデーションマップを掛けて雰囲気を調整した画像が以下になります(私の no+e のヘッダー画像もこの画像を編集した画像です)。

生成画像を編集した画像

動画としての統合

動画として各要素を統合する際は、配信用のアプリケーションとして非常に良く利用される OBS Studio を使いました。Vtuber 等の配信でも、このアプリが基本使われていますね。なので、使い方について改めてここで説明することはしません。

また、細かいつまづきポイントに、音声の入出力のインタフェースがあります。MMVC や VOICEVOX で生成した音声データは、直接スピーカーに出力するだけなら特に追加のアプリケーションは不要なのですが、OBS への入力にする様な場合、別途音声の入出力を担う仮想オーディオケーブルと呼ばれるアプリケーションが必要になります。これは、VOICEVOX の出力を だれでも Vtuber の入力にする場合でも同様ですね。

この仮想オーディオケーブルは、名前の通り仮想的な出力先として動くアプリケーションで、複数のアプリケーション間で音声データをやり取りする際に利用します。今回は、MMVC ―[仮想ケーブル1]―> OBS、VOICEVOX ―[仮想ケーブル 2]―>  OBS、VOICEVOX ―[仮想ケーブル 3]―> だれでもVtuber の様に、3 本の仮想ケーブルを用いました。

仮想オーディオケーブルのアプリケーションとしては、VB-CABLE Virtual Audio Device を用いています。1 本の利用であれば無料でも使用できますが、それ以上の使用では寄付が必須なため、今回は寄付して使える本数を増やしています。

ということで、「一人じょしちゅうがくせいコラボ動画」の全ての準備ができました。まとめとして初めの記事にも載せた構成図を再掲しておきます。

一人びしょうじょコラボ動画構成図

4. Discussion and Conclusion

思った以上の長文記事群になってしまいましたが、ひとまず書き残しておきたいことは記録できたかなと思います。

まとめると、今回の取り組みでは、以下の項目について実施することができました。

  • じょしちゅうがくせい体の作成(Live2d)

  • じょしちゅうがくせいボイスへの音声変換(MMVC)

  • じょしちゅうがくせい生成

    • じょしちゅうがくせいパーソナリティな Voice Chat の作成(SpeechRecognition、Whisper、ChatGPT、VOICEVOX)

    • じょしちゅうがくせいの身体生成(画像生成、Talking Head Anime、誰でもVtuber)

  • 一人じょしちゅうがくせいコラボ動画の作成(OBS Studio、仮想オーディオケーブル)

そして Future work ですが、簡単に思いつくことだけでも多数あります。今回の動画を作成した時点でも、いくつもの改善可能な課題があるなと思っていました。

例えば、比較的簡単に改善できそうな項目を列挙すると、以下などがありますね。

  • Voice Chat のストリーミング化処理

  • 短期記憶の実装が単純すぎる(トークン制限以上の情報を保持できない)

  • 長期記憶の実装が出来ていない(外部データベースとして保存した情報の利用)

  • じょしちゅうがくせいキャラクターのアバターの改善(新規の Live2d モデル作成)

以上の課題の内、上2つについては、4月下旬 - 5月中旬にかけて、Python 実装を全て LangChain による実装に置き換える作業を行ったことで、既に解決しているのですが、その手順や動画は次回以降の記事に記録出来ればと思います。

一方で、じょしちゅうがくせい化の方は、相対的には課題が少ないです。数年前は実現不可能に思えたことも、技術発展である程度出来るようになった or 出来そうな目途が出て来たということが大きいです。

音声変換は、より品質が向上すれば良いですが、今回利用した MMVC は開発が活発で、既に1年前と比較しても変換の品質は良くなっています。なので、ただの一般人である我々は、ただ性能が上がるのを待つくらいしか出来ることがないです(受け身)。

また、RVC など変換元話者を学習せずに利用できるタイプのニューラル音声変換モデルも出ており、より手軽に音声変換が利用できる状況になってきています。MMVC についても ver 1.5 がリリースされているので、それを使うだけでも更なる改善が期待できそうです。

また、キャラクターについては、2次元 Vtuber 的なモデルであれば、正直今の品質でも十分かなぁと思っています。とはいえ、やっぱり3次元モデルも欲しいよな~と思ってはいますが(3Dモデル作成は、ここ数年の間、手を出しては時間無くて棚上げを繰り返していて、一向に出来るようになる気がしないというが最大の課題ですね・・・)

ということで、じょしちゅうがくせい化と比較すると、比較的手の付けやすい課題が多いのは、じょしちゅうがくせい生成の方かなと考えています。そのため、この先はしばらく、じょしちゅうがくせい生成の方の課題解決を目指して改良をしていきたいかなと考えています。

参考情報(References)

(2)じょしちゅうがくせい生成-2

  1.  Diffusion Model によるキャラクター & 背景 画像生成

    1. NovelAI 

  2. キャラクター差分画像生成

    1. Demo Code for "Talking Head(?) Anime from A Single Image 3: Now the Body Too"

    2. Talking Head Anime from a Single Image 3 で Novel AI で作った猫耳メイドを動かす

  3. キャラクター差分画像を用いた簡易アニメーション作成

    1. だれでもVtuber

(3)動画作成

  1.  動画録画用

    1. OBS Studio

  2. 仮想ケーブル(各生成音源のOBSへの接続)

    1. VB-CABLE Virtual Audio Device.

  3. BGM

    1. 3:03 PM(LOOP), しゃろう


サポートありがとうございます!いただいたサポートは人類じょしちゅうがくせい化計画の活動費に使わせていただきます!