モデル概要
モデル特徴
モデル能力
使用事例
🚀 AltDiffusion
AltDiffusionは、Stable Diffusionをベースにした多言語テキストから画像への拡散モデルで、中英文の対応に優れています。
🚀 クイックスタート
モデル情報
名称 | タスク | 言語 | モデル | Github |
---|---|---|---|---|
AltDiffusion | 多モーダル | 中国語と英語 | Stable Diffusion | FlagAI |
Gradio
AltDiffusionを実行するためのGradio Web UIをサポートしています。
モデルのトレーニング
我々はAltCLIPを使用し、Stable Diffusionをベースにして、WuDaoデータセットとLAIONのデータを用いて、バイリンガルの拡散モデルをトレーニングしました。
モデルの特徴
このモデルは、中英文のアライメントに非常に優れており、現在市販されているオープンソースの中で最も強力なバージョンです。元のstable diffusionの大部分の機能を保持し、一部の例では元のモデルよりも優れた能力を持っています。
オンラインデモ
AltDiffusionはオンラインデモをサポートしています。こちらをクリックして試してみてください!
✨ 主な機能
- 中英文のアライメントに優れた多言語テキストから画像への拡散モデル
- Gradio Web UIをサポート
- オンラインデモを提供
📦 インストール
AltDiffusionモデルを初めて実行するときは、ここから以下のウェイトが自動的にダウンロードされます。
モデル名 | サイズ | 説明 |
---|---|---|
StableDiffusionSafetyChecker | 1.13G | 画像の安全チェッカー |
AltDiffusion | 8.0G | バイリンガルのAltDiffusionモデル |
AltCLIP | 3.22G | バイリンガルのAltCLIPモデル |
💻 使用例
基本的な使用法
🧨Diffusers Example
AltDiffusion は 🧨Diffusersに追加されています!
我々のコード例はcolabに公開されていますので、ご利用ください。
ドキュメントページはここで確認できます。
以下の例では、fast DPMスケジューラを使用して画像を生成し、V100で約2秒で完了します。
まず、diffusersのメインブランチといくつかの依存関係をインストールする必要があります。
pip install git+https://github.com/huggingface/diffusers.git torch transformers accelerate sentencepiece
次に、以下の例を実行できます。
from diffusers import AltDiffusionPipeline, DPMSolverMultistepScheduler
import torch
pipe = AltDiffusionPipeline.from_pretrained("BAAI/AltDiffusion", torch_dtype=torch.float16, revision="fp16")
pipe = pipe.to("cuda")
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
prompt = "黑暗精灵公主,非常详细,幻想,非常详细,数字绘画,概念艺术,敏锐的焦点,插图"
# or in English:
# prompt = "dark elf princess, highly detailed, d & d, fantasy, highly detailed, digital painting, trending on artstation, concept art, sharp focus, illustration, art by artgerm and greg rutkowski and fuji choko and viktoria gavrilenko and hoang lap"
image = pipe(prompt, num_inference_steps=25).images[0]
image.save("./alt.png")
Transformers Example
import os
import torch
import transformers
from transformers import BertPreTrainedModel
from transformers.models.clip.modeling_clip import CLIPPreTrainedModel
from transformers.models.xlm_roberta.tokenization_xlm_roberta import XLMRobertaTokenizer
from diffusers.schedulers import DDIMScheduler, LMSDiscreteScheduler, PNDMScheduler
from diffusers import StableDiffusionPipeline
from transformers import BertPreTrainedModel,BertModel,BertConfig
import torch.nn as nn
import torch
from transformers.models.xlm_roberta.configuration_xlm_roberta import XLMRobertaConfig
from transformers import XLMRobertaModel
from transformers.activations import ACT2FN
from typing import Optional
class RobertaSeriesConfig(XLMRobertaConfig):
def __init__(self, pad_token_id=1, bos_token_id=0, eos_token_id=2,project_dim=768,pooler_fn='cls',learn_encoder=False, **kwargs):
super().__init__(pad_token_id=pad_token_id, bos_token_id=bos_token_id, eos_token_id=eos_token_id, **kwargs)
self.project_dim = project_dim
self.pooler_fn = pooler_fn
# self.learn_encoder = learn_encoder
class RobertaSeriesModelWithTransformation(BertPreTrainedModel):
_keys_to_ignore_on_load_unexpected = [r"pooler"]
_keys_to_ignore_on_load_missing = [r"position_ids", r"predictions.decoder.bias"]
base_model_prefix = 'roberta'
config_class= XLMRobertaConfig
def __init__(self, config):
super().__init__(config)
self.roberta = XLMRobertaModel(config)
self.transformation = nn.Linear(config.hidden_size, config.project_dim)
self.post_init()
def get_text_embeds(self,bert_embeds,clip_embeds):
return self.merge_head(torch.cat((bert_embeds,clip_embeds)))
def set_tokenizer(self, tokenizer):
self.tokenizer = tokenizer
def forward(self, input_ids: Optional[torch.Tensor] = None) :
attention_mask = (input_ids != self.tokenizer.pad_token_id).to(torch.int64)
outputs = self.base_model(
input_ids=input_ids,
attention_mask=attention_mask,
)
projection_state = self.transformation(outputs.last_hidden_state)
return (projection_state,)
model_path_encoder = "BAAI/RobertaSeriesModelWithTransformation"
model_path_diffusion = "BAAI/AltDiffusion"
device = "cuda"
seed = 12345
tokenizer = XLMRobertaTokenizer.from_pretrained(model_path_encoder, use_auth_token=True)
tokenizer.model_max_length = 77
text_encoder = RobertaSeriesModelWithTransformation.from_pretrained(model_path_encoder, use_auth_token=True)
text_encoder.set_tokenizer(tokenizer)
print("text encode loaded")
pipe = StableDiffusionPipeline.from_pretrained(model_path_diffusion,
tokenizer=tokenizer,
text_encoder=text_encoder,
use_auth_token=True,
)
print("diffusion pipeline loaded")
pipe = pipe.to(device)
prompt = "Thirty years old lee evans as a sad 19th century postman. detailed, soft focus, candle light, interesting lights, realistic, oil canvas, character concept art by munkácsy mihály, csók istván, john everett millais, henry meynell rheam, and da vinci"
with torch.no_grad():
image = pipe(prompt, guidance_scale=7.5).images[0]
image.save("3.png")
高度な使用法
predict_generate_images
関数でパラメータを変更することで、設定を調整できます。詳細は以下の通りです。
パラメータ名 | タイプ | 説明 |
---|---|---|
prompt | str | プロンプトテキスト |
out_path | str | 画像を保存する出力パス |
n_samples | int | 生成する画像の数 |
skip_grid | bool | Trueの場合、画像のグリッディングステップをスキップします |
ddim_step | int | DDIMモデルのステップ数 |
plms | bool | Trueの場合、PLMSサンプラーを使用します |
scale | float | この値は、プロンプトが生成される画像にどれだけ影響を与えるかを決定します。値が大きいほど影響力が強くなります |
H | int | 画像の高さ |
W | int | 画像の幅 |
C | int | 生成される画像のチャンネル数 |
seed | int | 乱数シード番号 |
⚠️ 重要提示
モデルの推論には、少なくとも10G以上のGPUが必要です。
📚 ドキュメント
生成結果の例
中英文アライメント能力
英文プロンプトによる生成結果
prompt: dark elf princess, highly detailed, d & d, fantasy, highly detailed, digital painting, trending on artstation, concept art, sharp focus, illustration, art by artgerm and greg rutkowski and fuji choko and viktoria gavrilenko and hoang lap
中文プロンプトによる生成結果
prompt: 黑暗精灵公主,非常详细,幻想,非常详细,数字绘画,概念艺术,敏锐的焦点,插图
中文表現能力
prompt: 带墨镜的男孩肖像,充满细节,8K高清
prompt: 带墨镜的中国男孩肖像,充满细节,8K高清
長画像生成能力
prompt: 一只带着帽子的小狗
元のstable diffusion
当モデル
注: ここでの長画像生成技術は、Right Brain Technologyによって提供されています。
モデルのパラメータ数
モジュール名 | パラメータ数 |
---|---|
AutoEncoder | 83.7M |
Unet | 865M |
AltCLIP TextEncoder | 859M |
🔧 技術詳細
AltCLIPに関する報告
AltCLIPに関する詳細は、以下の報告を参照してください。もしあなたの研究に役立つ場合は、引用を検討してください。
@article{https://doi.org/10.48550/arxiv.2211.06679,
doi = {10.48550/ARXIV.2211.06679},
url = {https://arxiv.org/abs/2211.06679},
author = {Chen, Zhongzhi and Liu, Guang and Zhang, Bo-Wen and Ye, Fulong and Yang, Qinghong and Wu, Ledell},
keywords = {Computation and Language (cs.CL), FOS: Computer and information sciences},
title = {AltCLIP: Altering the Language Encoder in CLIP for Extended Language Capabilities},
publisher = {arXiv},
year = {2022},
copyright = {arXiv.org perpetual, non-exclusive license}
}
モデルの引用
もしこの研究が役に立った場合は、以下の論文を引用してください。
@misc{ye2023altdiffusion,
title={AltDiffusion: A Multilingual Text-to-Image Diffusion Model},
author={Fulong Ye and Guang Liu and Xinya Wu and Ledell Wu},
year={2023},
eprint={2308.09991},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
📄 ライセンス
このモデルは、CreativeML Open RAIL-M licenseに基づいてライセンスされています。作者は、あなたが生成した出力に対して何らの権利も主張せず、あなたはそれらを自由に使用し、それらの使用について責任を負うことができますが、このライセンスの規定に違反してはなりません。このライセンスでは、あなたが何らかの法律に違反する内容、他人に危害を与える内容、危害をもたらす可能性のある個人情報を拡散する内容、誤情報を広める内容、および弱者グループを対象とした内容を共有することを禁止しています。あなたは、商業目的でモデルを変更して使用することができますが、同じ使用制限のコピーを含める必要があります。制限の完全なリストについては、ライセンスを読む を参照してください。









