Diffusers documentation
OmniGenTransformer2DModel
OmniGenTransformer2DModel
Một mô hình Transformer nhận các chỉ thị đa phương thức để tạo hình ảnh cho OmniGen.
Tóm tắt từ bài báo là:
Sự ra đời của các Mô hình Ngôn ngữ Lớn (LLM) đã thống nhất các tác vụ tạo ngôn ngữ và cách mạng hóa tương tác giữa con người và máy móc. Tuy nhiên, trong lĩnh vực tạo ảnh, một mô hình thống nhất có khả năng xử lý nhiều tác vụ khác nhau trong cùng một khung kiến trúc vẫn chưa được khám phá nhiều. Trong công trình này, chúng tôi giới thiệu OmniGen, một mô hình khuếch tán mới cho tạo ảnh thống nhất. OmniGen có các đặc điểm sau: 1) Thống nhất: OmniGen không chỉ thể hiện khả năng tạo ảnh từ văn bản mà còn hỗ trợ nội tại nhiều tác vụ hạ nguồn khác nhau, chẳng hạn như chỉnh sửa ảnh, tạo ảnh theo chủ thể và tạo ảnh có điều kiện thị giác. 2) Đơn giản: Kiến trúc của OmniGen được đơn giản hóa cao, loại bỏ nhu cầu về các plugin bổ sung. Hơn nữa, so với các mô hình khuếch tán hiện có, nó thân thiện hơn với người dùng và có thể hoàn thành các tác vụ phức tạp theo hướng dẫn một cách end-to-end mà không cần các bước trung gian bổ sung, từ đó đơn giản hóa đáng kể quy trình tạo ảnh. 3) Chuyển giao kiến thức: Nhờ học tập theo định dạng thống nhất, OmniGen chuyển giao kiến thức hiệu quả giữa các tác vụ khác nhau, quản lý các tác vụ và miền chưa từng thấy, và thể hiện các khả năng mới. Chúng tôi cũng khám phá khả năng suy luận của mô hình và các ứng dụng tiềm năng của cơ chế chain-of-thought. Công trình này đại diện cho nỗ lực đầu tiên về một mô hình tạo ảnh đa dụng, và chúng tôi sẽ phát hành tài nguyên của mình tại https://github.com/VectorSpaceLab/OmniGen để thúc đẩy các tiến bộ trong tương lai.
import torch
from diffusers import OmniGenTransformer2DModel
transformer = OmniGenTransformer2DModel.from_pretrained("Shitao/OmniGen-v1-diffusers", subfolder="transformer", dtype=torch.bfloat16)OmniGenTransformer2DModel
lớp diffusers.OmniGenTransformer2DModel
< source >( in_channels: int = 4patch_size: int = 2hidden_size: int = 3072rms_norm_eps: float = 1e-05num_attention_heads: int = 32num_key_value_heads: int = 32intermediate_size: int = 8192num_layers: int = 32pad_token_id: int = 32000vocab_size: int = 32064max_position_embeddings: int = 131072original_max_position_embeddings: int = 4096rope_base: int = 10000rope_scaling: dict = Nonepos_embed_max_size: int = 192time_step_dim: int = 256flip_sin_to_cos: bool = Truedownscale_freq_shift: int = 0timestep_activation_fn: str = 'silu' )
Tham số
- in_channels (
int, mặc định là4) — Số lượng kênh trong đầu vào. - patch_size (
int, mặc định là2) — Kích thước của các patch không gian được sử dụng trong lớp nhúng patch. - hidden_size (
int, mặc định là3072) — Kích thước của các lớp ẩn trong mô hình. - rms_norm_eps (
float, mặc định là1e-5) — Eps cho lớp RMSNorm. - num_attention_heads (
int, mặc định là32) — Số lượng đầu (heads) được sử dụng cho cơ chế chú ý đa đầu (multi-head attention). - num_key_value_heads (
int, mặc định là32) — Số lượng đầu (heads) được sử dụng cho các key và value trong cơ chế chú ý đa đầu (multi-head attention). - intermediate_size (
int, mặc định là8192) — Kích thước của lớp ẩn trong các lớp FeedForward. - num_layers (
int, mặc định là32) — Số lượng lớp của các khối transformer cần sử dụng. - pad_token_id (
int, mặc định là32000) — ID của token đệm. - vocab_size (
int, mặc định là32064) — Kích thước của bảng từ vựng cho embedding. - rope_base (
int, mặc định là10000) — Giá trị theta mặc định được sử dụng khi tạo RoPE. - rope_scaling (
dict, tùy chọn) — Các hệ số tỷ lệ cho RoPE. Phải chứashort_factorvàlong_factor. - pos_embed_max_size (
int, mặc định là192) — Kích thước tối đa của các embedding vị trí. - time_step_dim (
int, mặc định là256) — Kích thước đầu ra của các embedding bước thời gian. - flip_sin_to_cos (
bool, mặc định làTrue) — Có nên đảo sin và cos trong các nhúng vị trí khi chuẩn bị các nhúng bước thời gian hay không. - downscale_freq_shift (
int, mặc định là0) — Giá trị dịch tần số được sử dụng khi thu nhỏ các nhúng bước thời gian (timestep embeddings). - timestep_activation_fn (
str, mặc định làsilu) — Hàm kích hoạt được sử dụng cho các nhúng bước thời gian (timestep embeddings).
Mô hình Transformer được giới thiệu trong OmniGen (https://huggingface.co/papers/2409.11340).
forward
< source >( hidden_states: Tensortimestep: typing.Union[int, float, torch.FloatTensor]input_ids: Tensorinput_img_latents: listinput_image_sizes: dictattention_mask: Tensorposition_ids: Tensorreturn_dict: bool = True ) → ~models.transformer_2d.Transformer2DModelOutput or tuple
Tham số
- hidden_states (
torch.Tensorcó hình dạng(batch_size, in_channels, height, width)) —hidden_statesđầu vào. - timestep (
torch.LongTensor) — Dùng để chỉ bước khử nhiễu. - input_ids (
torch.Tensor) — Các id token văn bản đa phương thức được sử dụng làm điều kiện. - input_img_latents (
listcủatorch.Tensor) — Danh sách các latent của hình ảnh đầu vào được sử dụng làm điều kiện. - input_image_sizes (
dictcủainttớilistcủaint) — Bản ánh từ chỉ số mẫu tới các vị trí mà các embedding ảnh đầu vào nên được đặt trong chuỗi điều kiện. - attention_mask (
torch.Tensor) — Mặt nạ chú ý cho chuỗi đa phương thức kết hợp. - position_ids (
torch.Tensor) — Các id vị trí được sử dụng để tính các nhúng vị trí. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về một~models.transformer_2d.Transformer2DModelOutputthay vì một tuple thông thường hay không.
Trả về
~models.transformer_2d.Transformer2DModelOutput hoặc tuple
Nếu return_dict là True, một ~models.transformer_2d.Transformer2DModelOutput sẽ được trả về, ngược lại
một tuple thông thường sẽ được trả về.
Phương thức forward của OmniGenTransformer2DModel.