#
# Berlisensi di bawah Apache License, Versi 2.0 ("Lisensi");
# Anda mungkin tidak dapat menggunakan file ini kecuali sesuai dengan Lisensi.
# Anda dapat memperoleh salinan Lisensi di
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Kecuali diwajibkan oleh hukum yang berlaku atau disepakati secara tertulis, perangkat lunak
# distribusikan di bawah Lisensi berdasarkan basis "SEBAGAIMANA ADANYA",
# TANPA JAMINAN ATAU SYARAT DALAM BENTUK APAPUN, baik yang dinyatakan maupun yang tersirat.
# Lihat Lisensi untuk bahasa tertentu yang mengatur izin dan
# batasan di bawah Lisensi.
-->

# ConsisID

  

[Generasi Teks-ke-Video yang Mempertahankan Identitas melalui Dekomposisi Frekuensi](https://huggingface.co/papers/2411.17440) dari Peking University & University of Rochester & lainnya, oleh Shenghai Yuan, Jinfa Huang, Xianyi He, Yunyang Ge, Yujun Shi, Liuhan Chen, Jiebo Luo, Li Yuan.

Abstrak dari makalah tersebut adalah:

*Generasi teks-ke-video yang mempertahankan identitas (IPT2V) bertujuan untuk membuat video berkefideltasan tinggi dengan identitas manusia yang konsisten. Ini adalah tugas penting dalam generasi video, tetapi masih menjadi masalah terbuka bagi model generatif. Kertas ini mendorong batas teknis IPT2V dalam dua arah yang belum terselesaikan dalam literatur: (1) sebuah pipeline tanpa penyetelan (tuning-free) tanpa penyetelan ulang (finetuning) yang melelahkan untuk setiap kasus, dan (2) sebuah skema kontrol berbasis Diffusion Transformer (DiT) yang mempertahankan identitas dan peka terhadap frekuensi. Untuk mencapai tujuan ini, kami mengusulkan **ConsisID**, sebuah model IPT2V yang dapat dikendalikan berbasis DiT dan tanpa penyetelan (tuning-free) untuk menjaga **id**entitas manusia tetap **consis**ten dalam video yang dihasilkan. Terinspirasi oleh temuan-temuan sebelumnya dalam analisis frekuensi dari transformer visi/difusi, model ini menggunakan sinyal kontrol identitas di domain frekuensi, di mana fitur wajah dapat didekomposisi menjadi fitur global berfrekuensi rendah (misalnya, profil, proporsi) dan fitur intrinsik berfrekuensi tinggi (misalnya, penanda identitas yang tidak terpengaruh oleh perubahan pose). Pertama, dari perspektif frekuensi rendah, kami memperkenalkan ekstraktor wajah global, yang mengkodekan gambar referensi dan titik-titik kunci wajah ke dalam ruang laten, menghasilkan fitur yang diperkaya dengan informasi frekuensi rendah. Fitur-fitur ini kemudian diintegrasikan ke dalam lapisan dangkal jaringan untuk meredakan tantangan pelatihan yang terkait dengan DiT. Kedua, dari perspektif frekuensi tinggi, kami merancang ekstraktor wajah lokal untuk menangkap detail frekuensi tinggi dan menyuntikkannya ke dalam blok transformer, meningkatkan kemampuan model untuk mempertahankan fitur berbutir halus. Untuk memanfaatkan informasi frekuensi untuk pelestarian identitas, kami mengusulkan strategi pelatihan hierarkis, yang mengubah model generasi video pra-dilatih biasa menjadi model IPT2V. Eksperimen ekstensif menunjukkan bahwa skema heuristik peka-frekuensi kami menyediakan solusi kontrol optimal untuk model berbasis DiT. Berkat skema ini, **ConsisID** kami mencapai hasil yang sangat baik dalam menghasilkan video berkualitas tinggi yang mempertahankan identitas, melangkah menuju IPT2V yang lebih efektif. Bobot model ConsisID tersedia secara publik di https://github.com/PKU-YuanGroup/ConsisID.*

> [!TIP]
> Pastikan untuk melihat [panduan](../../using-diffusers/schedulers) Schedulers untuk mempelajari cara mengeksplorasi tradeoff antara kecepatan dan kualitas scheduler, serta lihat bagian [reuse components across pipelines](../../using-diffusers/loading#reusing-models-in-multiple-pipelines) untuk mempelajari cara memuat komponen yang sama secara efisien ke dalam beberapa pipeline.

Pipeline ini disumbangkan oleh [SHYuanBest](https://github.com/SHYuanBest). Basis kode aslinya dapat ditemukan [di sini](https://github.com/PKU-YuanGroup/ConsisID). Bobot aslinya dapat ditemukan di bawah [hf.co/BestWishYsh](https://huggingface.co/BestWishYsh).

Terdapat dua checkpoint resmi ConsisID untuk text-to-video yang mempertahankan identitas.

| checkpoints | dtype inferensi yang direkomendasikan |
|:---:|:---:|
| [`BestWishYsh/ConsisID-preview`](https://huggingface.co/BestWishYsh/ConsisID-preview) | torch.bfloat16 |
| [`BestWishYsh/ConsisID-1.5`](https://huggingface.co/BestWishYsh/ConsisID-preview) | torch.bfloat16 |

### Optimasi memori

ConsisID membutuhkan sekitar 44 GB memori GPU untuk mendekode 49 frame (6 detik video pada 8 FPS) dengan resolusi output 720x480 (W x H), sehingga tidak dapat dijalankan pada GPU konsumen atau Colab T4 tier gratis. Optimasi memori berikut dapat digunakan untuk mengurangi jejak memori. Untuk replikasi, Anda dapat merujuk pada skrip [ini](https://gist.github.com/SHYuanBest/bc4207c36f454f9e969adbb50eaf8258).

| Fitur (tumpuk yang sebelumnya) | Memori Maksimum yang Dialokasikan | Memori Maksimum yang Dipesan |
| :----------------------------- | :------------------- | :------------------ |
| -                              | 37 GB                | 44 GB               |
| enable_model_cpu_offload       | 22 GB                | 25 GB               |
| enable_sequential_cpu_offload  | 16 GB                | 22 GB               |
| vae.enable_slicing             | 16 GB                | 22 GB               |
| vae.enable_tiling              | 5 GB                 | 7 GB                |

## Muat Poin Pemeriksaan Model

Bobot model mungkin disimpan di subfolder terpisah di Hub atau secara lokal, dalam hal ini, Anda harus menggunakan metode [from_pretrained()](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained).

```python
# !pip install consisid_eva_clip insightface facexlib
import torch
from diffusers import ConsisIDPipeline
from diffusers.pipelines.consisid.consisid_utils import prepare_face_models, process_face_embeddings_infer
from huggingface_hub import snapshot_download

# Download ckpts
snapshot_download(repo_id="BestWishYsh/ConsisID-preview", local_dir="BestWishYsh/ConsisID-preview")

# Load face helper model to preprocess input face image
face_helper_1, face_helper_2, face_clip_model, face_main_model, eva_transform_mean, eva_transform_std = prepare_face_models("BestWishYsh/ConsisID-preview", device="cuda", dtype=torch.bfloat16)  # or "mps", "xpu", "cpu"

# Load consisid base model
pipe = ConsisIDPipeline.from_pretrained("BestWishYsh/ConsisID-preview", dtype=torch.bfloat16)
pipe.to("cuda")
```

## Teks-ke-Video yang Menjaga Identitas

Untuk teks-ke-video yang mempertahankan identitas, berikan prompt teks dan gambar yang menampilkan wajah dengan jelas (misalnya, lebih baik setengah badan atau seluruh badan). Secara default, ConsisID menghasilkan video 720x480 untuk hasil terbaik.

```python
from diffusers.utils import export_to_video

prompt = "The video captures a boy walking along a city street, filmed in black and white on a classic 35mm camera. His expression is thoughtful, his brow slightly furrowed as if he's lost in contemplation. The film grain adds a textured, timeless quality to the image, evoking a sense of nostalgia. Around him, the cityscape is filled with vintage buildings, cobblestone sidewalks, and softly blurred figures passing by, their outlines faint and indistinct. Streetlights cast a gentle glow, while shadows play across the boy's path, adding depth to the scene. The lighting highlights the boy's subtle smile, hinting at a fleeting moment of curiosity. The overall cinematic atmosphere, complete with classic film still aesthetics and dramatic contrasts, gives the scene an evocative and introspective feel."
image = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/consisid/consisid_input.png?download=true"

id_cond, id_vit_hidden, image, face_kps = process_face_embeddings_infer(face_helper_1, face_clip_model, face_helper_2, eva_transform_mean, eva_transform_std, face_main_model, "cuda", torch.bfloat16, image, is_align_face=True)

video = pipe(image=image, prompt=prompt, num_inference_steps=50, guidance_scale=6.0, use_dynamic_cfg=False, id_vit_hidden=id_vit_hidden, id_cond=id_cond, kps_cond=face_kps, generator=torch.Generator("cuda").manual_seed(42))
export_to_video(video.frames[0], "output.mp4", fps=8)
```

  
    Deskripsi Gambar Wajah Video
  
  
    
    
    Video ini, dengan gaya animasi yang indah dan terukur, menampilkan seorang wanita percaya diri yang menunggang kuda melintasi padang terbuka di hutan yang rimbun. Ekspresinya fokus namun tenang saat ia menyesuaikan topi bertepi lebarnya dengan tangan yang terlatih. Ia mengenakan gaun bohemian yang longgar, yang bergerak anggun mengikuti irama kuda, dengan kain yang mengalir mulus dalam gerakan animasi. Cahaya matahari yang tembus celah pepohonan menyaring ke bawah, menciptakan pola lembut bergaya lukisan di lantai hutan. Posturnya anggun, menunjukkan kontrol dan keanggunan saat ia memandu kuda dengan mudah. Gaya animasi yang lembut dan mengalir ini menambah nuansa mimpi pada adegan, dengan sikap tenang wanita tersebut dan lingkungan yang damai membangkitkan rasa kebebasan dan harmoni.
  
  
    
    
    Video tersebut, dengan gaya animasi yang memikat, menampilkan seorang wanita berdiri di tengah hutan bersalju, matanya menyipit dalam konsentrasi saat ia mengulurkan tangannya ke depan. Ia mengenakan jubah biru tua, napasnya terlihat di udara dingin yang digambarkan dengan goresan lembut dan etereal. Senyum samar terukir di bibirnya saat ia memanggil secercah sihir es, mengamati dengan fokus saat pohon-pohon dan tanah di sekitarnya mulai berkilau dan membeku, tertutup kristal es yang halus. Gerak animasi yang mengalir membuat sihir itu terasa hidup, dengan embun beku yang menyebar ke luar dalam pola rumit yang berkilauan. Lingkungan digambarkan dengan nuansa lembut seperti cat air, meningkatkan suasana magis yang seperti mimpi. Suasana keseluruhan tenang namun kuat, dengan udara musim dingin yang sunyi memperkuat keindahan halus dari adegan yang membeku tersebut.
  
  
    
    
    Animasi ini menampilkan potret imajinatif seorang penjual balon yang berdiri di tengah angin sepoi-sepoi, digambar dengan goresan kuas lembut dan berkabut yang membangkitkan nuansa hari musim semi yang tenang. Wajahnya dihiasi senyum lembut, matanya sedikit menyipit melawan sinar matahari, sementara beberapa helai rambutnya berkibar tertiup angin. Ia mengenakan kemeja berwarna pastel yang ringan, dan balon-balon di sekelilingnya bergoyang tertiup angin, menambah kesan ceria pada adegan. Latar belakangnya buram secara halus, dengan sentuhan pasar atau taman yang hidup, sehingga memperkuat suasana yang ringan namun penuh kelembutan pada momen tersebut.
  
  
    
    
    Video ini menangkap seorang anak laki-laki yang berjalan di sepanjang jalan kota, difilmkan dalam hitam putih menggunakan kamera 35mm klasik. Ekspresinya tampak penuh pikiran, alisnya sedikit berkerut seolah ia tenggelam dalam kontemplasi. Butiran film (film grain) menambah kualitas bertekstur dan abadi pada gambar, membangkitkan rasa nostalgia. Di sekelilingnya, pemandangan kota dipenuhi bangunan bergaya vintage, trotoar berbatu, dan siluet orang-orang yang lewat dengan lembut dan buram, dengan garis luar yang samar dan tidak jelas. Lampu jalan memancarkan cahaya yang lembut, sementara bayangan bermain di sepanjang jalan anak laki-laki tersebut, menambah kedalaman pada adegan. Pencahayaan menyoroti senyum halus anak laki-laki itu, mengisyaratkan momen singkat rasa ingin tahu. Suasana sinematik secara keseluruhan, lengkap dengan estetika still film klasik dan kontras dramatis, memberikan nuansa yang evokatif dan introspektif pada adegan tersebut.
  
  
    
    
    Video ini menampilkan bayi yang mengenakan jubah pahlawan super berwarna cerah, berdiri dengan percaya diri dengan kedua tangan terangkat dalam pose yang kuat. Bayi itu memiliki tatapan yang penuh tekad, dengan mata terbuka lebar dan bibir terkatup dalam konsentrasi, seolah-olah siap menghadapi tantangan. Pengaturannya tampak menyenangkan, dengan mainan-mainan berwarna-warni berserakan di sekitar dan karpet lembut di bawah kaki, sementara sinar matahari masuk melalui jendela di dekatnya, menyoroti jubah yang berkibar dan menambah kesan kepahlawanan. Suasana keseluruhan ringan dan menyenangkan, dengan ekspresi bayi yang menangkap campuran antara kepolosan dan upaya keberanian yang menggemaskan, seolah-olah benar-benar siap menyelamatkan hari.
  

## Sumber daya

Pelajari lebih lanjut tentang ConsisID dengan sumber daya berikut.
- Sebuah [video](https://www.youtube.com/watch?v=PhlgC-bI5SQ) yang mendemonstrasikan fitur utama ConsisID.
- Makalah penelitian, [Identity-Preserving Text-to-Video Generation by Frequency Decomposition](https://hf.co/papers/2411.17440) untuk detail lebih lanjut.

## ConsisIDPipeline[[diffusers.ConsisIDPipeline]]

#### diffusers.ConsisIDPipeline[[diffusers.ConsisIDPipeline]]

```python
diffusers.ConsisIDPipeline(*args, **kwargs)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/utils/dummy_torch_and_transformers_and_opencv_objects.py#L5)

#### __call__[[diffusers.ConsisIDPipeline.__call__]]

```python
__call__(*args, **kwargs)
```

Panggil self sebagai fungsi.

## ConsisIDPipelineOutput[[diffusers.pipelines.consisid.pipeline_output.ConsisIDPipelineOutput]]

#### diffusers.pipelines.consisid.pipeline_output.ConsisIDPipelineOutput[[diffusers.pipelines.consisid.pipeline_output.ConsisIDPipelineOutput]]

```python
diffusers.pipelines.consisid.pipeline_output.ConsisIDPipelineOutput(frames: Tensor)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/consisid/pipeline_output.py#L9)

**Parameter:**

frames (`torch.Tensor`, `np.ndarray`, atau list[list[PIL.Image.Image]]) : daftar output video - Dapat berupa daftar bersarang dengan panjang `batch_size,` di mana setiap sub-daftar berisi urutan gambar PIL yang telah didenoise dengan panjang `num_frames.` Dapat juga berupa array NumPy atau tensor Torch dengan bentuk `(batch_size, num_frames, channels, height, width)`.

Kelas output untuk pipeline ConsisID.

