「最新の学習済みモデルをPyTorchで利用したい」
「画像や音声を扱った機械学習をPythonで行いたい」
このような場合には、Diffusersがオススメです。
この記事では、Diffusersについて解説しています。
本記事の内容
- Diffusersとは?
- Diffusersのシステム要件
- Diffusersのインストール
- Diffusersの動作確認
それでは、上記に沿って解説していきます。
Diffusersとは?
Diffusersは、画像や音声に対応した事前学習済みの拡散モデルを提供します。
そして、Diffusersは拡散モデルの推論と学習のためのモジュール式ツールボックスとして機能します。
これが、公式におけるDiffusersの説明です。
簡単に言うと、Diffusersは機械学習を行う上での便利ツールだと言えます。
Diffusersを使えば、モデルのダウンロードも簡単にできます。
わざわざ自分でモデルをダウンロードして、設置するなどの作業が不要になります。
また、HuggingFaceがDiffusersを開発しています。
そのため、利用できるモデルの種類も豊富です。
とにかく、目新しい先端のモデルを利用したいなら、Diffusersはオススメと言えます。
以上、Diffusersについて説明しました。
次は、Diffusersのシステム要件を説明します。
Diffusersのシステム要件
現時点(2022年8月末)でのDiffusersの最新バージョンは、0.2.4となります。
この最新バージョンは、2022年8月23日にリリースされています。
更新履歴を見るとわかるように、更新は随時行われています。
まだまだ、開発途上ということがわかります。
そんなDiffusersのシステム要件は、以下に注目します。
- OS
- Pythonバージョン
- PyTorch
- Transformers
OS
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
Pythonバージョン
サポート対象となるPythonのバージョンは、以下となっています。
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
これは、以下のPython公式開発サイクルとは少しだけズレがあります。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
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月 |
ここでは、Python 3.7以降の利用を推奨しておきます。
なお、Python 3.10でもDiffusersのインストールは問題ありません。
PyTorch
Diffusersでは、PyTorchが必須です。
バージョンは、1.4以降であれば大丈夫だと記載されています。
しかし、できる限りで最新のモノを利用するようにしましょう。
加えて、PyTorchはGPU版を利用することをオススメします。
CPU版PyTorchでも、Diffusersが動くことは動きます。
ただ、GPU版PyTorchと比べると明らかに処理速度は落ちるでしょう。
そもそも、Diffusersは画像や音声に特化していますからね。
GPU版PyTorchのインストールについては、次の記事で解説しています。
Transformers
Diffusersのインストール時点では、Transformersは必須ではありません。
しかし、Diffusersを動かす時点ではほぼTransformersは必須です。
Diffusersのサンプルコードを動かした時点、次のようなエラーが表示されます。
StableDiffusionPipeline requires the transformers library but it was not found in your environment. You can install it with pip: `pip install transformers`
そのため、システム要件としてTransformersを載せておきます。
Transformersのインストールについては、次の記事で解説しています。
以上、Diffusersのシステム要件を説明しました。
次は、Diffusersのインストールを説明します。
Diffusersのインストール
Diffusersのインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。
検証は、次のバージョンのPythonで行います。
> python -V Python 3.10.4
まずは、現状のインストール済みパッケージを確認しておきます。
事前にGPU版PyTorchとTransformersがインストール済みです。
> pip list Package Version ------------------ ------------ certifi 2022.6.15 charset-normalizer 2.1.1 colorama 0.4.5 filelock 3.8.0 huggingface-hub 0.9.0 idna 3.3 numpy 1.23.2 packaging 21.3 Pillow 9.2.0 pip 22.2.2 pyparsing 3.0.9 PyYAML 6.0 regex 2022.8.17 requests 2.28.1 setuptools 65.2.0 tokenizers 0.12.1 torch 1.12.1+cu113 torchaudio 0.12.1+cu113 torchvision 0.13.1+cu113 tqdm 4.64.0 transformers 4.21.1 typing_extensions 4.3.0 urllib3 1.26.12 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、Diffusersのインストールです。
Diffusersのインストールは、以下のコマンドとなります。
pip install diffusers
Diffusersのインストールでは、次のパッケージが追加されます。
diffusers-0.2.4 importlib-metadata-4.12.0 zipp-3.8.1
以上、Diffusersのインストールを説明しました。
次は、Diffusersの動作確認を説明します。
Diffusersの動作確認
Diffusersの動作確認を行います。
動作内容は、テキストから画像を生成モノとなります。
from diffusers import DiffusionPipeline model_id = "CompVis/ldm-text2im-large-256" # load model and scheduler ldm = DiffusionPipeline.from_pretrained(model_id) # run pipeline in inference (sample random noise and denoise) prompt = "A painting of a squirrel eating a burger" images = ldm([prompt], num_inference_steps=50, eta=0.3, guidance_scale=6)["sample"] # save images for idx, image in enumerate(images): image.save(f"squirrel-{idx}.png")
上記コードを実行すると、初回時であればかなりの時間待たされます。
それは、指定している学習済みモデルのダウンロードに時間がかかるからです。
(※2回目以降は、モデルのダウンロードは省略されます)
コードを実行した結果、次のように100%となれば処理は完了となります。
{'set_alpha_to_one'} was not found in config. Values will be initialized to default values. {'cross_attention_dim'} was not found in config. Values will be initialized to default values. 100%|██████████| 50/50 [01:54<00:00, 2.29s/it]
そして、次のような画像がディレクトリ上に作成されています。
squirrel-0.png
画像の内容は、ランダムのため同じモノは表示されないはずです。
とにかく、画像が設定したテキスト通りであれば成功と言えるでしょう。
prompt = "A painting of a squirrel eating a burger"
ここのテキストや画像名を変更して、再度コードを実行してみましょう。
「squirrel」と「dog」に変更した結果、次のような画像が作成されました。
dog-0.png
確かに、犬がハンバーガーを食べてはいます・・・
リスみたいには、上手くはいかないようですね。
以上、Diffusersの動作確認を説明しました。