テキストだけで画像編集ができるInstructPix2Pixのインストール

テキストだけで画像編集ができるInstructPix2Pixのインストール 機械学習

「テキストだけで画像を編集できるとは、どういうこと?」
「元画像への変更を最小限にしてInpaintingのようなことを行いたい」

このような場合には、InstructPix2Pixがオススメです。
この記事では、InstructPix2Pixをローカル環境にインストールする方法を解説しています。

本記事の内容

  • InstructPix2Pixとは?
  • InstructPix2Pixのシステム要件
  • InstructPix2Pixのインストール
  • InstructPix2Pixの動作確認
  • 「ModuleNotFoundError: No module named ‘taming’」が出る場合

それでは、上記に沿って解説していきます。

InstructPix2Pixとは?

InstructPix2Pixとは、指示ベースの画像編集モデルです。
画像に対してテキストで指示を与えると、その指示通りに画像が編集されます。

InstructPix2Pixは、Stable Diffusion v1-5モデルをベースに開発されています。
指示であるテキスト情報については、GPT-3を利用して用意したということです。

GPT-3は、以下のテキストを作成するために利用しているということです。

  1. 画像を説明するキャプション
  2. 編集指示
  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.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月
3.112022年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’」が出る場合を説明しました。

タイトルとURLをコピーしました