最近では、ユーザーが文章を入力すると、それに対応した画像を生成するという、Diffusion をベースにしたテキスト画像生成モデルが普及していますが、これは非常に興味深いものです。この記事では、PaddleHub を使用して上記のタスクを迅速に実現するプロセスを参考のために記録します。
1.PaddlePaddleをインストールする
PaddleHub の最下層は、Baidu が開発したオープン ソース フレームワークである PaddlePaddle に依存しており、公式の方法に従ってすぐにインストールできます。現在のドキュメントは非常に包括的です。
公式リンクは次のとおりです: https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html
インストール前にシステム関連の環境を確認する必要がありますが、私が選択したインストールコマンドは次のとおりです。
python -m pip install paddlepaddle-gpu==2.3.2.post111 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
2.PaddleHubをインストールする
PaddleHub は、大規模モデル、CV、NLP、オーディオ、ビデオ、主流の産業アプリケーションを含む 6 つのカテゴリの 360 以上の事前トレーニング モデルをカバーする、豊富な事前トレーニング モデルのセットをオープンソース化しました。ここでは主に、Stable Diffusion や Disco Diffusion などのテキスト生成モデルを使用します。
https://github.com/PaddlePaddle/PaddleHub/blob/develop/README_ch.md
!pip install --upgrade paddlehub -i https://mirror.baidu.com/pypi/simple
3. モデル推論
PaddleHub はすでにモデルのカプセル化を完成させており、数行のコードでテキストおよび画像生成モデルのインターフェイスをすばやく呼び出すことができます。以下は PaddleHub での紹介です。サンプルの安定拡散モデルの効果を見てみましょう。
公式サンプルのリンクは次のとおりです。
https://aistudio.baidu.com/aistudio/projectdetail/4512600
Stable Diffusion は、生成モデルに属する潜在拡散モデル (Latent Diffusion) であり、ランダム ノイズの除去とサンプリングを段階的に繰り返すことで目的の画像を取得し、驚くべき結果を達成しています。Disco Diffusion と比較すると、Stable Diffusion は元のピクセル空間ではなく低次元の潜在空間で反復するため、メモリと計算要件が大幅に削減され、V100 上で 1 分以内に完了し、目的の画像をレンダリングできます。
from PIL import Image
import paddlehub as hub
# 导入模型
module = hub.Module(name='stable_diffusion')
# 生成图像
result = module.generate_image(text_prompts="A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation.", output_dir='stable_diffusion_out')
# 将生成过程存成gif
result[0].chunks[-1].chunks.save_gif('beautiful_painting.gif')
输入:グレッグ・ルトコウスキーとトーマス・キンケードによる、荒れ狂う血の海に光を当てる特異な灯台の美しい絵画、アートステーションのトレンド。
デフォルトの出力画像は、次のように 512*512 です。
4. さらなるテスト
この時点で、さらに多くの入力のテストを開始できます。大胆に試してみましょう。シードが設定されている場合、実行するたびに異なるグラフが生成されます。
输入:秋の丘の上にある木。
生成プロセスは次のとおりです。
入力: 男の顔。
入力: 女性の顔。
5.中国語入力を試してみる
前述の安定拡散モデルは、入力として中国語をまだサポートしていません。現在、中国語入力に対応しているモデルは 2 つあり、どちらも Disco Diffusion モデルですが、画像の生成速度が Stable Diffusion に比べて非常に遅いため、気長に待つ必要があります。
公式サンプルのリンクは次のとおりです。
https://aistudio.baidu.com/aistudio/projectdetail/4444998
サンプルコードは次のとおりです。
from PIL import Image
import paddlehub as hub
# 导入模型
module = hub.Module(name='disco_diffusion_ernievil_base')
# 生成图像
result = module.generate_image(text_prompts="孤舟蓑笠翁,独钓寒江雪。", style='油画', width_height= [1280, 768], output_dir='孤舟蓑笠翁_油画', seed=1853109922)
# 将生成过程存成gif
result[0].chunks.save_gif('孤舟蓑笠翁.gif')
入力: ウェンは孤独なボートと帽子に乗り、冷たい川と雪の中で一人で釣りをしていました。
6. 問題の解決策
使用の過程でいくつかの問題が発生する可能性がありますが、それもここに記録されます。
問題 1: GPU を使用できない
解決策: インストールされている PaddlePaddle が GPU バージョンではない可能性があるため、GPU バージョンをアンインストールしてからインストールする必要があります。
まず、次のコマンドを使用して、現在インストールされているパドルと関連パッケージのバージョンを表示します。
pip list| grep paddle
クエリ情報は次のとおりです。
paddle-bfloat 0.1.7
paddle2onnx 1.0.0
paddlefsl 1.1.0
paddlehub 2.3.0
paddlenlp 2.4.0
paddlepaddle-gpu 2.3.2.post111
CPU バージョンがある場合は、次のコマンドでアンインストールできます。
pip uninstall paddlepaddle
次に、インストールする適切な GPU バージョンを選択します。
参考文献: https://github.com/PaddlePaddle/PaddleHub/issues/1301
質問 2: セグメンテーション違反 (コアダンプ)
解決策: cudnn のバージョンが一致していないことが原因である可能性があるため、cuda、cudnn、paddlepaddle-gpu のバージョンが一致しているかどうかを確認することをお勧めします。
参考文献: https://github.com/PaddlePaddle/PaddleHub/issues/1301
経験すると、パラメーターの text_prompts が非常に重要であり、どの入力を入力しても良好な画像を生成できないことがわかります。場合によっては効果があまり良くないと感じられる場合もあり、追跡調査の課題でもある。