スタイル・エッジ技術ブログ

士業集客支援/コンサルティングのスタイル・エッジのエンジニアによるブログです。

流行りのテキストからの画像生成やってみました

はじめに

こんにちは、スタイル・エッジ・グループのぽんです。
今年はオフィス移転の業務に関わったりなど、バタバタしておりましたが…
ようやく、新しいオフィス周辺のお昼の探索を楽しみつつ、
新宿ど真ん中で濡れずに出勤できる喜びを日々かみしめています。

画像生成って?

今回は、ここ最近流行っているテキストからの画像の自動生成を自分の環境で試してみました!
LINEアカウントがあったり、アプリがあったり、色々と盛り上がっていますね。

組み合わせは「VQGAN+CLIP」でWindows環境で実施しています。

「VQGAN+CLIP」であれば、Google Colaboratory(https://colab.research.google.com/)でも可能なのですが
今回はあえて、ローカルPCで実施してみました!

Google Colaboratory(Google Colab)とは、環境構築をしなくても無料で
Pythonでの機械学習のプログラミングが行えるサービスです。
しかもGPUも使用できるため、GPUを積んだPCを持っていなくても実行が可能です。
オンラインベースなので、携帯からでもタブレットからでも
勿論PCからでも操作できるのは素敵ですね!
※より高性能な有料プランもあります。

今回採用した、VQGANはVQ-VAE(ベクトル量子化)を用いた、
敵対的生成ネットワーク(Generative Adversarial Networks通称GAN)です。
GANは、データから特徴を学習し実在しないデータを生成します。そしてそのデータが本物か偽物かの判定を
繰り返すことによって本物のような偽物のデータを作り上げます。

そして、CLIP(Contrastive Language-Image Pre-training)はモデルを持っているわけではなく、
インターネットから画像とテキストの組み合わせを収集することにより、
4億の画像とテキストの組み合わせをOpenAIで学習しています。
テキストのエンコーダとイメージのエンコーダ、それぞれで動作をし、
類似度が最も高い画像をピックアップします。


この2つを組み合わせることによって、入力したテキストから画像の自動生成を実現します!

環境構築と実働

Python 3.10をインストール

まずは、Windowspythonを利用できるようにします。
python
https://www.python.org/downloads/
公式サイトよりダウンロードしてインストーラにてインストールします。

インストールが完了したら、コマンドプロンプトを立ち上げ下記コマンドを実行。

python -v

バージョンがきちんと表示されれば問題ありません。

CUDAインストール

VQGAN+CLIPは、機械学習ライブラリのPyTorchを利用して動作させています。
GPUを積んでいるPCであれば、GPU利用版のPyTorchで動作させたいため…
PyTorchのインストール前にCUDAをインストールします。

CUDAは、NVIDIAGPU向けの統合開発環境です。
私の端末には以前CUDAを入れたことがあるのですが、バージョンが古くてPyTorchの要件に合わないので、
アップデートインストールを行います。

NVIDIAのサイトからCUDA11をダウンロードして、実行します。
CUDA Toolkit 11.8
https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10

環境変数にパスが追加されているか確認をします。
 システム環境変数の編集 ⇒ 詳細設定 ⇒ 環境変数をクリック

環境変数

CUDA_PATH_V11_8が追加されていることを確認。

コマンドプロンプトで下記コマンドを実行。

nvidia-smi

CUDA Version: 11.XXと表示されることを確認。
これで、無事にCUDAが入りました!

PyTorchインストール

改めまして、PyTorchインストールです。
PyTorch公式
https://pytorch.org/get-started/locally/

公式ページに行き、自分のPC環境に合わせてインストールしたい環境を選ぶと…
環境に合わせたコマンドが表示されます。

私は、condaコマンドで実行しました!
そのためには、前提としてAnacondaのインストールが必要です。

Anacondaインストール

Anaconda
https://www.anaconda.com/products/distribution

公式サイトからパッケージをダウンロード。
そして、インストーラで促されるままにインストール。
Windowsの場合、日本語が入っているフォルダにはインストールが行えないので注意してください。

上記によりAnacondaが無事に入ったので、condaコマンドを手軽に実行するために
スタートメニューで「Anaconda Prompt」を検索して立ち上げます。
そして、PyTorch公式に表示されているコマンドを実行します!

PyTorch公式から環境に合わせてコマンドを取得
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

condaコマンドにて無事にインストールが行えたことを確認したら、
公式に書いてあるコードを実行して確認します。
インストール途中でエラーが出た場合は、周辺コマンドなどのアップデートを適宜行ってください。
※私は、環境が古くて色々アップデートが必要でした。

コマンドプロンプトにて

python

Pythonを起動し入力モードにします。

import torch
x = torch.rand(5, 3)
print(x)

torchを実行!

tensor([[0.3380, 0.3845, 0.3217],
        [0.8337, 0.9050, 0.2650],
        [0.2979, 0.7141, 0.9069],
        [0.1449, 0.1132, 0.1375],
        [0.4675, 0.3947, 0.1426]])

結果が表示されれば無事にインストールはできています。
そして、GPUの利用もできます!
やっとPyTorchが入ったので次に行きます☆

Pythonの追加パッケージをインストール

追加パッケージをpipコマンドでインストールします。

pip install ftfy regex tqdm omegaconf pytorch-lightning IPython kornia imageio imageio-ffmpeg einops torch_optimizer setuptools==59.5.0

VQGAN+CLIPのソースをgitからおろしてきます。

GitリポジトリからVQGAN+CLIPをクローンしてきます。

git clone 'https://github.com/nerdyrodent/VQGAN-CLIP'
cd VQGAN-CLIP
git clone 'https://github.com/openai/CLIP'
git clone 'https://github.com/CompVis/taming-transformers'

クローン出来たら、VQGAN-CLIPフォルダの下に、checkpointsディレクトリを作成します。

VQGANの学習済モデルとyamlファイルをダウンロードします。

curl -L -o checkpoints/vqgan_imagenet_f16_16384.yaml -C - 'https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fconfigs%2Fmodel.yaml&dl=1' #ImageNet 16384
curl -L -o checkpoints/vqgan_imagenet_f16_16384.ckpt -C - 'https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fckpts%2Flast.ckpt&dl=1' #ImageNet 16384

公式には、curlコマンドでと書いてありますが…
直接ファイルをダウンロードして、checkpointsフォルダ下に
 ・vqgan_imagenet_f16_16384.yaml
 ・vqgan_imagenet_f16_16384.ckpt
という名前で保存しても問題ないです。
curlコマンド環境を整えるのに挫折して…私は直接ダウンロードしました。
 いや、こちらの方がダウンロード速度も早かったです。

動かしてみよう!!!

やっとここまで来ました!
コマンドプロンプトで、VQGAN-CLIPフォルダまで移動しPythonを実行します!

python generate.py -p "A painting of an apple in a fruit bowl"

こちらは、フルーツボールの中にあるリンゴを描いてほしいと命令を出しています。
※VQGAN-CLIPのチュートリアル用画像ですね。
実行が完了すると、同一フォルダにoutput.pngの名前で描いたイラストが出力されました!

フルーツボールの中のリンゴ

やりましたね☆
ようやくテキストから、画像を生成することに成功しました!!

ここで、注意点がありまして…
ローカルで実行してみたいからと言って、GPUを積んでいないマシンで実行をするのは
本当にオススメできません…!

私もこの対応を行う中で、一度、PyTorchの起動に失敗してCPU環境で実行してしまったのですが
GPU環境であれば1分程度で終わる処理が
CPU環境で実行してしまうと、一晩明かしても終わっていませんでした(悲)

色々動かしてみよう!!

折角出来上がった環境なので、他に何枚か描かせてみた画像を添付します。

python generate.py -p "sky and cat and magic"

空飛ぶ魔法ねこみたいなのが描かれたら良いなと思って実行しました!

空とねこと魔法と

割と目的通りな雰囲気は出たかなと思います☆

python generate.py -p "Mechanical robots and programming"

ロボ的な何かが描かれたらと思って実行しています。

ロボとプログラミング

ロボットがプログラミングをしている?みたいになりましたね(笑)

最後に

色々と予想外の仕上がりになるものもあり楽しい結果になりました!
業務には直接関係は無いものの、興味のあるものを環境を作って
実行してみるというのも、なかなか楽しいですね。

スタイル・エッジ・グループでは、色々なことに興味を持ってくれる、一緒に働く仲間を募集しています!
もし弊社に興味を持っていただけましたら、採用サイト↓も覗いてみてください!
recruit.styleedge-labo.co.jp