【CoDi】テキストから画像、動画、音声が一発で生成できるGPT-4V超えマルチモーダルAI
みなさん、生成AIを使って複数のデータを出力する際に何度もプロンプトを入力するのって面倒ではないでしょうか?
CoDiを使えば、たったひとつのプロンプトから複数の異なる種別のデータを生成することができますよ!
CoDiは大手IT企業であるMicrosoftから発表された新しい生成AIモデルで、他の生成AIとは違い、テキスト、画像、動画、音声など異なるモダリティ(データ種別)を同時に生成することができるマルチモーダルAIモデルなんです。
簡単に言ってしまえば、一言投げかければ画像と動画とBGMが一発で生成できるということ。
いやいや、そんな都合のいいことができるわけない?
本記事ではCoDiの導入方法からデータの生成まで細かく解説していますので、この記事を見ながら実際に試していただければ約1時間でCoDiのすごさを体験してもらえます。
ぜひ最後までご覧ください!
CoDiの概要
CoDi(Composable Diffusion)はMicrosoftが開発したマルチモーダルAIモデルです。
もともとMicrosoftが進めていたi-Codeプロジェクトの一つで、その中の「i-Code-V3」がCoDiと呼ばれています。
そんなCoDiの特徴は以下の3つです
・マルチモーダルAIモデル
CoDiと従来の生成AIモデルが違うところは同時に複数の異なるデータを出力できるという点です。
例えば、画像系の生成AIだとテキストからイラストや画像を作りますが、CoDiはそれに加え、動画や音楽も一つのテキストから生成することができるのです。
・多岐にわたる活用法
例えば耳の不自由な人のためにビデオや画像のキャプションを生成することができたり、目の不自由な人のために、音声ガイドやテキストの要約を生成したりなど、体が不自由な人のためにアクセシビリティの向上に活用できます。
また、教育現場では生徒が知っていることと、達成したいことに合わせて学習コンテンツを生成することも可能になります。
・オープンソースソフトウェア
CoDiはGitで公開されており、オープンソースソースソフトウェアとなっています。
ライセンスはMITライセンスですので商用利用も可能です。
※ライセンスに関しては2023年10月現在の情報となりますので、利用する際はその都度ご確認ください。
では早速CoDiを使ってみましょう!
なお、その他のマルチモーダルAIについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
→【NExT-GPT】テキスト、画像、ビデオ、音声、全部対応できるLLM(大規模言語モデル)が登場
CoDiの導入方法
今回はGoogle ColabPro+でCoDiを試してみました。
コードは以下のGithubページを参考にしています。
CoDiのマニュアルではcondaを使い、Python3.8で環境構築をしていますがColabのPython 3.10.12でも動作を確認しました。※2023年10月現在
なお、無料版のColabだとシステムRAMが足りなくてクラッシュしてしまいますのでご注意ください。
Gitからファイルのクローン
まず、GitからCoDiのファイル一式をクローンします。
!git clone https://github.com/microsoft/i-Code.git
ファイル構成は下記のようになるはずです。
ディレクトリの移動
次に、CoDiが格納されている「i-Code-V3」のディレクトリへ移動します。
※初期値の/contentにいない場合は、pwdコマンドで現在のディレクトリを確認し移動を行ってください。
cd i-Code/i-Code-V3/
必要なパッケージのインストール
i-Code-V3配下にあるrequirement.txtを読み込んで必要なパッケージのインストールを行います。
!pip install -r requirement.txt
インターフェースのダウンロード
/checkpointsの中に必要なファイルをダウンロードします。
なお、Colab上ではスペックの都合上FP16でしか動作ができなかったので、fp16対応のインターフェースをwgetコマンドで落としてきます。
!wget https://huggingface.co/ZinengTang/CoDi/resolve/main/checkpoints_fp16/CoDi_encoders.pth -P checkpoints/
!wget https://huggingface.co/ZinengTang/CoDi/resolve/main/checkpoints_fp16/CoDi_text_diffuser.pth -P checkpoints/
!wget https://huggingface.co/ZinengTang/CoDi/resolve/main/checkpoints_fp16/CoDi_audio_diffuser_m.pth -P checkpoints/
!wget https://huggingface.co/ZinengTang/CoDi/resolve/main/checkpoints_fp16/CoDi_video_diffuser_8frames.pth -P checkpoints/
モデルのロード
下記コマンドを実行し、モデルをロードします。
初期値では「fp16=False」となっていますが、今回はFP16を使用するので「fp16=True」に変更しています。
import os
from core.models.model_module_infer import model_module
model_load_paths = ['CoDi_encoders.pth', 'CoDi_text_diffuser.pth', 'CoDi_audio_diffuser_m.pth', 'CoDi_video_diffuser_8frames.pth']
inference_tester = model_module(data_dir='checkpoints/', pth=model_load_paths, fp16=True) # turn on fp16=True if loading fp16 weights
inference_tester = inference_tester.cuda()
inference_tester = inference_tester.eval()
モデルのロードが終われば準備完了です!
なお、メモリが足りないとこのモデルのロード時にクラッシュしてしまいます。
Google ColabPro+プランでもそのままだとメモリが足りなくなってしまうので、ハイメモリに変更するのを忘れないようにしてください。
モニタリングしていると、モデルのロード中にシステムRAMの使用量が約22GBまで上がっていました。
ロードが終わるとシステムRAMが約13GB、GPURAMが約11GBという使用量になっています。
もし、ローカルで開発環境を整えようと思っている方はシステムRAM及びGPU RAMが上記以上の容量を搭載しているマシンを用意する必要がありそうです。
CoDiを実際に使ってみた
それでは、CoDiを実際に使ってみます。テキスト、画像、音声を出力してみます。
テキストから画像の生成
まずはテキストから画像の生成を行ってみましょう。
プロンプト
# Give a prompt
prompt = "At the seaside, beautiful fireworks are lighting up the sky."
# Generate image
images = inference_tester.inference(
xtype = ['image'],
condition = [prompt],
condition_types = ['text'],
n_samples = 1,
image_size = 256,
ddim_steps = 50)
images[0][0]
結果
プロンプトの文章は日本語で「海辺では綺麗な花火が上がっている」というテキストをChatGPTに訳してもらったものを利用しました。
いくつか再生成を行ったのですが、いずれも上に花火が上がっていて下に海もしくは浜辺が広がっている画像が生成されました。
もしかして日本語でもうまく機能するかもしれないと思い、試してみました。
プロンプト
# Give a prompt
prompt = "海辺で綺麗な花火が上がっている"
# Generate image
images = inference_tester.inference(
xtype = ['image'],
condition = [prompt],
condition_types = ['text'],
n_samples = 1,
image_size = 256,
ddim_steps = 50)
images[0][0]
結果
微妙な感じですね・・・。何度か生成した中で一番花火っぽい画像が上記です。
「海」はうまく生成されるのですが「花火」が正常に認識しないようで海でなにかが爆発している画像が生成されるパターンがほとんどでした。
画像からテキスト
次に、画像からテキストを生成してみます。
使用する画像は先ほどCoDiに作ってもらったこちらの花火の画像です。
使用画像
プロンプト
# Load an image input
from PIL import Image
im = Image.open('./assets/demo_files/fireworks.png').resize((224,224))
im
結果
'sunset lights on a fireworks night at sunset on a beautiful city beach and sunset.',
'fireworks on a sunset',
'fireworks sunset on the bright night',
'sunset on the beach at night'
画像が明るいからか、sunset(日没・夕焼け)という単語が多く表れていますがbeachとfireworksという言葉も含まれるテキストがあり、概ね画像の説明としては成り立っているのではないでしょうか。
オーディオファイルの生成
次はオーディオファイルの生成能力を確かめてみましょう。
プロンプトには「傘に当たる雨音」という日本語を英訳したものを入力しました。
プロンプト
# Give a prompt
prompt = 'The sound of rain hitting an umbrella.'
# Generate audio
audio_wave = inference_tester.inference(
xtype = ['audio'],
condition = [prompt],
condition_types = ['text'],
scale = 7.5,
n_samples = 1,
ddim_steps = 50)[0]
# Play the audio
from IPython.display import Audio
Audio(audio_wave.squeeze(), rate=16000)
結果
生成されたファイルにはサーッと雨音がなる中、傘に当たるような少し強い音も混じっておりプロンプトの通りの環境音が作り出されました。
なお、ChatGPTのGPT-4Vについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
→【GPT-4V】ChatGPTがマルチモーダル対応!何がすごいかを徹底解説
CoDiの推しポイントである同時に複数の異なるデータを出力できるというのは本当なのか?
それでは、CoDiの推しポイントである同時に複数の異なるデータを出力できるのは本当なのか、を検証していきます。
テキストからオーディオと動画の生成
一つのテキストから複数のファイルを生成してみましょう。
まずは、公式のプロンプトを試してみます。
プロンプト
# Give A Prompt
prompt = 'walking inside a beautiful forest, nature, birds.'
n_samples = 1
outputs = inference_tester.inference(
['video', 'audio'],
condition = [prompt],
condition_types = ['text'],
n_samples = 1,
image_size = 256,
ddim_steps = 50,
num_frames = 8,
scale = 7.5)
音声ファイルの再生
video, audio_wave = outputs
from IPython.display import Audio
Audio(audio_wave.squeeze(), rate=16000)
動画ファイルの再生
# Visual video as gif
video, audio_wave = outputs
video = video[0]
from PIL import Image
frame_one = video[0]
path = "./generated_video.gif"
frame_one.save(path, format="GIF", append_images=video[1:],
save_all=True, duration=2000/len(video), loop=0)
from IPython import display
from IPython.display import Image
Image(data=open(path,'rb').read(), format='png')
結果
プロンプトでは「美しい森の中を歩いていると、自然と鳥の音が広がっています。」と入力しています。
出力されたオーディオファイルは森の中の音と動物の声が、動画ファイルでは森を歩いている人の後ろ姿が映っていますね。
短い一文からこの2つのファイルが生成されたのは驚きです!
8フレームほどの動画ですが、生成時間は1分ほどでした。
もう一つ、花火の動画とオーディオファイルを生成してみましょう。
プロンプトは一番最初に作ったものと同じテキストを入力しました。
プロンプト
# Give A Prompt
prompt = 'At the seaside, beautiful fireworks are lighting up the sky.'
n_samples = 1
outputs2 = inference_tester.inference(
['video', 'audio'],
condition = [prompt],
condition_types = ['text'],
n_samples = 1,
image_size = 256,
ddim_steps = 50,
num_frames = 8,
scale = 7.5)
オーディオファイル
video, audio_wave = outputs2
from IPython.display import Audio
Audio(audio_wave.squeeze(), rate=16000)
結果
動画ファイル
# Visual video as gif
video = video[0]
from PIL import Image
frame_one = video[0]
path = "./fireworks.gif"
frame_one.save(path, format="GIF", append_images=video[1:],
save_all=True, duration=2000/len(video), loop=0)
from IPython import display
from IPython.display import Image
Image(data=open(path,'rb').read(), format='png')
結果
オーディオファイルの方は「ザーーッ」という波音は収録されていましたが、花火の音はありませんでした。何度試してみても、花火の音は生成されず海のイメージに引っ張られている感じがしました。
動画ファイルに関しては花火は描画されますが逆に海辺が描画されていませんでした。
もう少しプロンプトを詳細に書くと精度の高いものが生成されるかもしれません。
とはいえ、ワンクリックでデータが複数出力されるという手軽さを感じていただけたのではないでしょうか?
CoDiの評価とまとめ
CoDiの概要、導入方法、実際に使ってみた感想、そして、推しポイントの結果をまとめます。
概要
CoDiはMicrosoftが開発したマルチモーダルAIモデルです。
既存の生成AIとは違い、複数のモダリティを生成することができるうえ、入力の組み合わせに制限がありません。
導入方法
公式マニュアルではcondaを使い、ローカルでの環境構築を行っていましたがマシンスペックが非常に高いものが必要なためGoogleColabPro+で試すことをおすすめします。
導入自体はマニュアル通りにインストールを進めるだけなので非常に簡単です。
ただ、マニュアルが英語のみなのと導入事例やサンプルがほとんどなく手探りで試しながら進めていく必要があります。
推しポイントを試した結果
CoDiを使えば短いテキストからオーディオファイルとそれに合致した動画ファイルが短時間で生成されるので、本当に簡単でびっくりしました!
例えば、今まで画像生成AIでイラストを作ってそれに合う音源を別の生成AIで作るもしくはどこからか素材を探して・・・といった作業が、CoDiを使えばワンクリックで作ることができます。
まだまだ情報が少ないところがデメリットではありますが、マルチモーダルAIモデルという先進的な技術が無料で試せるというのは大きなメリットです。
上記の導入部分から画像生成、オーディオ生成、オーディオ+動画生成まで通しで試しても1時間 ほどでCoDiを体験することができるという手軽さも大きなポイントですね。
ぜひ、Microsoftが開発したマルチモーダルAIのCoDi、試してみてください!
生成系AIの業務活用なら!
・生成系AIを活用したPoC開発
・生成系AIのコンサルティング
・システム間API連携
最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、サービス紹介資料もご用意しておりますので、併せてご確認ください。