HuggingFace Diffusers 0.15 : リリースノート – 画像生成の枠を超えた Diffusers

HuggingFace Diffusers 0.15 : リリースノート – 画像生成の枠を超えた Diffusers (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 04/14/2023 (v0.15.0 – 04/13/2023)

* 本ページは、HuggingFace Diffusers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

 

HuggingFace Diffusers 0.15 : リリースノート – 画像生成の枠を超えた Diffusers

We are very excited about this release! これは動画と音声のための新しいパイプラインを diffusers にもたらし、すべての種類の生成タスクに対して diffusion が素晴らしい選択であることを示しています。diffusers のモジュール式の、プラグイン可能なアプローチは新しいモデルを残りのライブラリと直感的に一体感のある統合を行なうために重要でした。私たちの究極的な目標は、貴方が関心あるタスクを解決するのに役立つような最善なツールボックスを提供することですので、API と実装の一貫性を評価して頂くことを望みます。Don’t hesitate to get in touch if you use diffusers for other projects!

それに加えて、diffusers 0.15 は多くの新しい機能と改良を含みます。パフォーマンスと配備の改良 (より高速なパイプラインのロード) から、創造的なタスクのための更なる柔軟性 (Karras sigmas, 重みプロンプト, Automatic1111 textual inversion 用埋め込みのサポート)、追加のカスタマイズオプション (Multi-ControlNet)、訓練ユティリティ(ControlNet, Min-SNR 重み付け)等々です。Read on for the details!

 

🎬 テキスト-to-動画

テキスト誘導-動画生成はもはやファンタジーではありません – それは Colab を回して 2 つの強力なオープンソース化された動画生成モデルのいずれかを実行する程度に簡単です。

 

テキスト-to-動画変換

Alibaba の DAMO Vision Intelligence Lab は最初の研究専用の動画生成モデルをオープンソース化しました、これは 1 分間までの強力な動画クリップを生成できます。ダース・ベイダーが波乗りするのを見るには、以下の行を好みの Python インタープリターにコピーペーストするだけです :

import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
from diffusers.utils import export_to_video

pipe = DiffusionPipeline.from_pretrained("damo-vilab/text-to-video-ms-1.7b", torch_dtype=torch.float16, variant="fp16")
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
pipe.enable_model_cpu_offload()

prompt = "Spiderman is surfing"
video_frames = pipe(prompt, num_inference_steps=25).frames
video_path = export_to_video(video_frames)

For more information you can have a look at “damo-vilab/text-to-video-ms-1.7b

 

Text-to-Video Zero

Text2Video-Zero はゼロショット・テキスト-to-動画合成拡散モデルで、Stable Diffusion v1-5 のような単純な事前訓練済み stable diffusion モデルを使用して、事前訓練済みテキスト-to-画像拡散モデルだけによる低コストでしかし一貫した動画生成を可能にします。Text2Video-Zero はまた Instruct Pix2Pix, ControlNet と DreamBooth のような事前訓練済みテキスト-to-画像変換モデルのクールな拡張機能も自然にサポートしていて、それに基づいて私たちは Video Instruct Pix2Pix, Pose Conditional, Edge Conditional と Edge Conditional そして DreamBooth に特化された応用を提示しています。

For more information please have a look at PAIR/Text2Video-Zero

 

🔉 音声生成

テキスト誘導-音声生成は、拡散モデルに基づいた多くの進歩によりここ数ヶ月で大きな進捗を示しました。0.15.0 リリースは 2 つの強力な音声拡散モデルを含みます。

 

AudioLDM

Stable Diffusion にインスパイアされた、AudioLDM はテキスト-to-音声変換潜在的拡散モデル (LDM) で、CLAP 潜在的表現から連続的な音声表現を学習します。AudioLDM は入力としてテキストプロンプトを取り対応する音声を予測します。それはテキスト-条件付きの音声効果音, 人間の発話音声と音楽を生成できます。

from diffusers import AudioLDMPipeline
import torch

repo_id = "cvssp/audioldm"
pipe = AudioLDMPipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
pipe = pipe.to("cuda")

prompt = "Techno music with a strong, upbeat tempo and high melodic riffs"
audio = pipe(prompt, num_inference_steps=10, audio_length_in_s=5.0).audios[0]

The resulting audio output can be saved as a .wav file:

import scipy

scipy.io.wavfile.write("techno.wav", rate=16000, data=audio)

For more information see cvssp/audioldm

 

スペクトログラム拡散

Magenta チーム からのこのモデルは MIDI-to-音声生成器です。パイプラインは入力として MIDI ファイルを取り、自己回帰的に 5 秒間のスペクトログラムを生成します、これは最終的に一緒に連結されてスペクトログラム・デコーダを通して音声にデコードされます。

from diffusers import SpectrogramDiffusionPipeline, MidiProcessor

pipe = SpectrogramDiffusionPipeline.from_pretrained("google/music-spectrogram-diffusion")
pipe = pipe.to("cuda")
processor = MidiProcessor()

# Download MIDI from: wget http://www.piano-midi.de/midis/beethoven/beethoven_hammerklavier_2.mid
output = pipe(processor("beethoven_hammerklavier_2.mid"))

audio = output.audios[0]

 

📗 新しいドキュメント

ドキュメント化は diffusers に対して非常に重要です、それはすべてが動作する方法を理解し、観察している問題を修正しようとするための最初のリソースの一つだからです。このリリースでは私たちはすべてのドキュメントをレビューし、新しいものを追加し、セクションを再編し、そしてコードサンプルを最新の API を使用してアップデートするのに多くの時間を費やしました。This effort has been led by @stevhliu (thanks a lot! 🙌) and @yiyixuxu, but many others have chimed in and contributed.

Check it out: https://huggingface.co/docs/diffusers/index

Don’t hesitate to open PRs for fixes to the documentation, they are greatly appreciated as discussed in our (revised, of course) contribution guide.

 

🪄 Stable UnCLIP

Stable UnCLIP は並外れた最善のオープンソース化された画像バリエーションモデルです。画像のバリエーションを生成するために初期画像とオプションでプロンプトを渡します :

from diffusers import DiffusionPipeline
from diffusers.utils import load_image
import torch

pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1-unclip-small", torch_dtype=torch.float16)
pipe.to("cuda")

# get image
url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/tarsila_do_amaral.png"
image = load_image(url)

# run image variation
image = pipe(image).images[0]

For more information you can have a look at “stabilityai/stable-diffusion-2-1-unclip

 

🚀 More ControlNet

ControlNet は diffusers ではバージョン 0.14.0 でリリースされましたが、幾つかのエキサイティングな進展があります : Multi-ControlNet、訓練スクリプト、そして来たるイベントと @mikegarts の貢献によるコミュニティの画像-to-画像変換パイプラインです!

 

Multi-ControlNet

コミュニティメンバー @takuma104 のおかげで、幾つかの ControlNet 条件付けモデルが一度に利用できるようになりました!それは前と同じ API で動作し、一つの代わりに ControlNets のリストを供給するだけです :

import torch
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel

controlnet_canny = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", 
                                                   torch_dtype=torch.float16).to("cuda")
controlnet_pose = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-openpose", 
                                                   torch_dtype=torch.float16).to("cuda")

pipe = StableDiffusionControlNetPipeline.from_pretrained(
	"example/a-sd15-variant-model", torch_dtype=torch.float16,
	controlnet=[controlnet_pose, controlnet_canny]
).to("cuda")

pose_image = ...
canny_image = ...
prompt = ...

image = pipe(prompt=prompt, image=[pose_image, canny_image]).images[0]

And this is an example of how this affects generation:

 

以上