「テキストだけで画像を編集できるとは、どういうこと?」
「元画像への変更を最小限にしてInpaintingのようなことを行いたい」
このような場合には、InstructPix2Pixがオススメです。
この記事では、InstructPix2Pixをローカル環境にインストールする方法を解説しています。
本記事の内容
- InstructPix2Pixとは?
- InstructPix2Pixのシステム要件
- InstructPix2Pixのインストール
- InstructPix2Pixの動作確認
- 「ModuleNotFoundError: No module named ‘taming’」が出る場合
それでは、上記に沿って解説していきます。
InstructPix2Pixとは?
InstructPix2Pixとは、指示ベースの画像編集モデルです。
画像に対してテキストで指示を与えると、その指示通りに画像が編集されます。
InstructPix2Pixは、Stable Diffusion v1-5モデルをベースに開発されています。
指示であるテキスト情報については、GPT-3を利用して用意したということです。
GPT-3は、以下のテキストを作成するために利用しているということです。
- 画像を説明するキャプション
- 編集指示
- 編集後の画像を説明するキャプション
これらをもとに生成した画像(編集前後)が、データセットに含まれると説明されています。
これらの画像とテキストの組み合わせで、学習を繰り返したようです。
では、InstructPix2Pixを使ってどんなことができるのでしょうか?
それは、実際の結果を見た方がイメージしやすいでしょう。
以下は、有名なフリー素材の男性をもとに作成した画像です。
一番左が、ダウンロードしてきたフリー素材の画像になります。
これを入力画像として、以下のテキストで指示を行いました。
- He is sad.
- He is very sad.
- He became a Furankenshutain.
また、次のような編集も可能です。
一番左が、入力画像になります。
この画像は、aErosで生成した画像です。
この入力画像に対して、以下の指示を出しています。
- She wears glasses.
- She is bald.
他にも背景を編集することなども可能です。
開発者のサイトで多くのサンプルを見ることができます。
https://www.timothybrooks.com/instruct-pix2pix
なお、InstructPix2PixではNSFWコンテンツ向けのフィルタリングを実施しています。
つまり、NSFWコンテンツを生成できないということです。
しかし、NSFWコンテンツを入力画像には利用できます。
あくまで、NSFW的な指示ができないということになります。
以上、InstructPix2Pixについて説明しました。
次は、InstructPix2Pixのシステム要件を説明します。
InstructPix2Pixのシステム要件
timothybrooks/instruct-pix2pix
https://github.com/timothybrooks/instruct-pix2pix
InstructPix2Pixのシステム要件としては、明示されていはいません。
ライブラリなどから、推測するしかありません。
公式では、Linuxが前提で説明が行われています。
ただし、Windowsでも動くことが確認できています。
Pythonのバージョンについては、次のPython公式開発サイクルに従えばOKでしょう。
バージョン | リリース日 | サポート期限 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
3.11 | 2022年10月25日 | 2027年10月 |
重要になるのが、以下のシステム要件です。
- FFmpeg
- PyTorch
それぞれを以下で説明します。
FFmpeg
必要とするライブラリに、FFmpegを必要とするモノが存在しています。
そのため、事前にインストールしておく必要があります。
FFmpegのインストールは、以下の記事を参考にしてください。
PyTorch
PyTorchは、GPU版が必須とは記載されていません。
しかし、GPU版でないと使い物にはならないでしょう。
GPU版PyTorchのインストールは、次の記事で説明しています。
バージョンについては、最新バージョンでも問題ありません。
以上、InstructPix2Pixのシステム要件を説明しました。
次は、InstructPix2Pixのインストールを説明します。
InstructPix2Pixのインストール
InstructPix2Pixのインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。
検証は、次のバージョンのPythonで行います。
> python -V Python 3.10.4
そして、システム要件としてはGPU版PyTorchとFFmpegをインストール済という状況です。
ここでは、condaを用いずにpipのみでインストールを行います。
condaを使いたい方は、公式のインストール手順を参考にしてください。
最初に、リポジトリをクローンしましょう。
git clone https://github.com/timothybrooks/instruct-pix2pix.git
ダウンロードできたら、リポジトリのルートへ移動します。
cd instruct-pix2pix
この場所では、「environment.yaml」を確認できます。
公式の説明であれば、「environment.yaml」を利用してインストールを進めます。
しかし、pipのみでは「environment.yaml」を利用できません。
そこで、「environment.yaml」を「requirements.txt」に変換します。
上記記事を参考に変換したのが、次のファイルです。
requirements.txt(PyTorch関連はインストール済みのため除去)
numpy albumentations datasets diffusers opencv-python pudb invisible-watermark imageio imageio-ffmpeg pytorch-lightning omegaconf test-tube streamlit einops torch-fidelity transformers torchmetrics kornia git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers git+https://github.com/openai/CLIP.git@main#egg=clip openai gradio seaborn git+https://github.com/crowsonkb/k-diffusion.git
このファイルを用いて、インストールを行います。
pip install -r requirements.txt
インストールは、かなり時間がかかります。
ゆっくりと待ちましょう。
インストールが完了したら、学習済みのチェックポイントをダウンロードしましょう。
公式では、ダウンロード用のスクリプトを実行することが説明されています。
内容は、以下。
#!/bin/bash SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) mkdir -p $SCRIPT_DIR/../checkpoints curl http://instruct-pix2pix.eecs.berkeley.edu/instruct-pix2pix-00-22000.ckpt -o $SCRIPT_DIR/../checkpoints/instruct-pix2pix-00-22000.ckpt
この程度であれば、手動でも十分できます。
まずは、リポジトリルート上で設置用のディレクトリを作成します。
mkdir checkpoints
そして、そこにチェックポイントを保存します。
チェックポイントのURLは、上記のスクリプトの記載されています。
7GB以上の容量があるので、時間帯によってはかなり待たされるかもしれません。
以上、InstructPix2Pixのインストールを説明しました。
次は、InstructPix2Pixの動作確認を行います。
InstructPix2Pixの動作確認
GUIツールが用意されています。
それを起動させて、動作確認を行います。
リポジトリルート上で、以下のコマンドを実行。
python edit_app.py
ズラズラと流れますが、最後に次のように表示されれば起動はOKです。
Running on local URL: http://127.0.0.1:7860 Running on public URL: https://4e01e9c1-b731-421e.gradio.live This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces
途中で次のエラーが出たら、後述の「ModuleNotFoundError: No module named ‘taming’」が出る場合へ。
ModuleNotFoundError: No module named 'taming'
起動が成功した場合に、話を戻しましょう。
URLは二つ表示されていますが、とりあえず「http://127.0.0.1:7860」にアクセスします。
画像をアップロードして、指示するだけです。
「Generate」ボタンを押すと、編集処理が始まります。
処理が終わると、次のような画像が「Edited Image」に表示されます。
背景だけではなく、「彼女」もサイバーシティ色に染まるんですね。
最後に、GUIツール起動時にURLが二つ出る件を説明しておきます。
Running on local URL: http://127.0.0.1:7860 Running on public URL: https://4e01e9c1-b731-421e.gradio.live
外部に公開用する場合には、このままでも良いのでしょう。
でも、閉じた環境で利用する場合に「public URL」は不要です。
正直、セキュリティ的にはよろしくはないでしょう。
どんな仕組みで公開(連携)しているのかは、まだ調べていませんけどね。
とにかく、公開しない方法を載せておきます。
「edit_app.py」に、次のような箇所があります。
「share=False」と変更することで、起動時には次のように表示されます。
Running on local URL: http://127.0.0.1:7860 To create a public link, set `share=True` in `launch()`.
非公開となりました。
以上、InstructPix2Pixの動作確認を説明しました。
次は、「ModuleNotFoundError: No module named ‘taming’」が出る場合について説明します。
「ModuleNotFoundError: No module named ‘taming’」が出る場合
InstructPix2Pixの起動時に、次のエラーが出ることがあります。
ModuleNotFoundError: No module named 'taming'
インストール済みのパッケージには、それらしきモノは存在しています。
> pip show taming-transformers Name: taming-transformers Version: 0.0.1 Summary: Taming Transformers for High-Resolution Image Synthesis Home-page: Author: Author-email: License: Location: ~\lib\site-packages Requires: numpy, torch, tqdm Required-by:
ただ、このライブラリはメンテナンスが実施されていませんね。
結論となりますが、以下を実行すれば解決します。
pip install taming-transformers-rom1504
新たにインストールしたパッケージ情報を確認。
> pip show taming-transformers-rom1504 Name: taming-transformers-rom1504 Version: 0.0.6 Summary: Taming Transformers for High-Resolution Image Synthesis Home-page: UNKNOWN Author: UNKNOWN Author-email: UNKNOWN License: UNKNOWN Location: ~\lib\site-packages Requires: numpy, omegaconf, pytorch-lightning, torch, torchvision, tqdm Required-by:
上書きではなく、併存しています。
そのため、影響範囲は限定的になるはずです。
taming-transformers 0.0.1 taming-transformers-rom1504 0.0.6
なお、「rom1504」というのはアカウント名です。
rom1504氏のGithubページ
https://github.com/rom1504
この方は、多くのライブラリを自発的にメンテナンスしているようです。
ありがたく、taming-transformers-rom1504を使わせてもらいましょう。
以上、「ModuleNotFoundError: No module named ‘taming’」が出る場合を説明しました。