Lewati ke konten utama
Kembali ke Blog

Konsistensi Karakter dalam Video AI: Cara Model Mengingat Wajah

Pembahasan teknis mendalam tentang inovasi yang mempertahankan identitas karakter di seluruh pengambilan gambar, dari mekanisme perhatian hingga embedding identitas.

Alexis · Penulis AI, pemeriksaan otomatis, editor bertanggung jawab9 min read

Konsistensi Karakter dalam Video AI: Cara Model Mengingat Wajah

Salah satu tantangan paling persisten dalam pembuatan video AI adalah menjaga konsistensi karakter di seluruh pengambilan gambar. Tanyakan kepada sineas mana pun: cerita akan runtuh saat wajah protagonis Anda berubah secara halus di antara potongan. Pada 2025, akhirnya kita melihat model memecahkan masalah ini dengan inovasi arsitektural yang terasa seanggun rute yang direncanakan dengan baik menuju puncak sulit. Mari saya jelaskan bagaimana model video modern belajar mengingat wajah.

Tantangan Konsistensi

Model difusi tradisional menghasilkan setiap frame dengan sampling probabilistik. Hal ini menimbulkan variasi, yang berguna untuk keragaman tetapi bermasalah bagi identitas. Saat menghasilkan video 10 detik pada 24fps, model membuat 240 keputusan berurutan, masing-masing dengan peluang terjadinya pergeseran.

# The core problem: each denoising step introduces variance
def denoise_step(x_t, model, t):
    noise_pred = model(x_t, t)
    # This sampling introduces stochasticity
    x_t_minus_1 = scheduler.step(noise_pred, t, x_t).prev_sample
    return x_t_minus_1  # Slight variations accumulate over frames

Model video awal seperti Gen-1 dan Pika 1.0 tampak kesulitan dalam hal ini. Penampilan karakter akan berubah, sedikit menua di antara pengambilan gambar, atau mengembangkan ciri yang tidak konsisten, yang oleh praktisi disebut "identity drift." Terobosan datang dari memperlakukan konsistensi karakter bukan sebagai masalah pascapemrosesan, melainkan masalah arsitektur.

Embedding yang Mempertahankan Identitas: Fondasinya

Inovasi besar pertama adalah memperkenalkan embedding identitas khusus yang bertahan sepanjang proses pembuatan. Alih-alih hanya mengandalkan conditioning teks, model kini mempertahankan token identitas eksplisit:

class IdentityEncoder(nn.Module):
    def __init__(self, embed_dim=768):
        super().__init__()
        self.face_encoder = FaceRecognitionBackbone()  # Pre-trained face model
        self.projection = nn.Linear(512, embed_dim)
        self.identity_bank = nn.Parameter(torch.randn(32, embed_dim))
 
    def encode_identity(self, reference_frame):
        # Extract identity features from reference
        face_features = self.face_encoder(reference_frame)
        identity_embed = self.projection(face_features)
 
        # Cross-attend with learned identity tokens
        identity_tokens = self.cross_attention(
            query=self.identity_bank,
            key=identity_embed,
            value=identity_embed
        )
        return identity_tokens

Token identitas ini kemudian disuntikkan ke dalam proses difusi pada setiap langkah denoising, menciptakan sesuatu yang saya anggap sebagai "titik jangkar", seperti perlindungan tetap pada rute panjat yang selalu dapat Anda kaitkan kembali saat kondisi menjadi tidak pasti.

Perhatian Lintas Frame: Mempelajari Identitas Temporal

Terobosan kedua bersifat arsitektural: model kini secara eksplisit memperhatikan lintas frame saat mengambil keputusan tentang penampilan karakter. Transformer difusi secara alami mendukung hal ini melalui pemrosesan patch ruang-waktu mereka, tetapi model yang berfokus pada konsistensi melangkah lebih jauh.

Inovasi Utama: Lapisan perhatian identitas khusus yang secara spesifik memperhatikan wilayah wajah di seluruh dimensi temporal:

class IdentityAwareAttention(nn.Module):
    def __init__(self, dim, num_heads=8):
        super().__init__()
        self.spatial_attn = nn.MultiheadAttention(dim, num_heads)
        self.temporal_attn = nn.MultiheadAttention(dim, num_heads)
        self.identity_attn = nn.MultiheadAttention(dim, num_heads)
 
    def forward(self, x, identity_tokens, face_masks):
        # Standard spatial attention within frames
        x = self.spatial_attn(x, x, x)[0] + x
 
        # Temporal attention across frames
        x = rearrange(x, '(b t) n d -> (b n) t d', t=num_frames)
        x = self.temporal_attn(x, x, x)[0] + x
        x = rearrange(x, '(b n) t d -> (b t) n d', n=num_patches)
 
        # Identity-specific attention using face regions
        face_tokens = x * face_masks.unsqueeze(-1)
        x = self.identity_attn(
            query=x,
            key=identity_tokens,
            value=identity_tokens
        )[0] + x
 
        return x

Mekanisme perhatian tiga lapis ini, yang menggabungkan perhatian spasial, temporal, dan khusus identitas, memungkinkan model mengambil keputusan penampilan sambil secara eksplisit merujuk pada identitas yang telah ditetapkan dan frame sebelumnya.

Perbandingan Pendekatan Model Saat Ini

Platform pembuatan video utama menerapkan konsistensi karakter secara berbeda:

ModelPendekatanMetode KonsistensiEfektivitas
Sora 2Patch ruang-waktuImplisit melalui konteks panjangBaik untuk klip pendek
Veo 3Pembuatan multi-tahapPenjangkaran keyframeKuat untuk gerakan manusia
Gen-4.5Conditioning referensiPenyuntikan identitas eksplisitKonsistensi terbaik di kelasnya
Kling 1.6Perhatian sadar wajahPelacakan wajah khususKuat untuk close-up

Gen-4.5 milik Runway layak mendapat perhatian khusus di sini. Pendekatan mereka menggabungkan conditioning gambar referensi dengan apa yang mereka sebut "identity locks", token terpelajar yang dilatih untuk dipertahankan model terlepas dari keputusan generatif lainnya. Pilihan arsitektural ini kemungkinan berkontribusi pada dominasi mereka di Video Arena.

Paradigma Frame Referensi

Pergeseran signifikan pada 2025 adalah menuju pembuatan yang dikondisikan oleh referensi. Alih-alih menghasilkan karakter semata-mata dari deskripsi teks, model kini menerima gambar referensi yang menetapkan penampilan kanonis:

class ReferenceConditionedGenerator:
    def __init__(self, base_model, identity_encoder):
        self.model = base_model
        self.identity_encoder = identity_encoder
 
    def generate(self, prompt, reference_images, num_frames=120):
        # Encode identity from reference images
        identity_embeds = []
        for ref in reference_images:
            identity_embeds.append(self.identity_encoder(ref))
 
        # Pool multiple references for robust identity
        identity_tokens = torch.stack(identity_embeds).mean(dim=0)
 
        # Generate with identity conditioning
        video = self.model.generate(
            prompt=prompt,
            num_frames=num_frames,
            cross_attention_kwargs={
                "identity_tokens": identity_tokens,
                "identity_strength": 0.8  # Balances consistency vs creativity
            }
        )
        return video

Parameter identity_strength mewakili trade-off penting. Terlalu tinggi, dan model menjadi kaku, tidak mampu menampilkan variasi ekspresi alami. Terlalu rendah, dan pergeseran kembali terjadi. Menemukan titik ideal, biasanya sekitar 0.7-0.85, adalah perpaduan seni dan sains.

Fungsi Loss untuk Pelestarian Identitas

Melatih sistem ini memerlukan fungsi loss khusus yang secara eksplisit menghukum pergeseran identitas:

Loss Pelestarian Identitas:

L_identity = ||f(G(z, c)) - f(x_ref)||² + λ_temporal * Σ_t ||f(v_t) - f(v_{t+1})||²

Di mana f adalah encoder pengenalan wajah pralatih, G adalah generator, dan v_t mewakili frame yang dihasilkan. Suku pertama memastikan wajah yang dihasilkan sesuai dengan referensi, sedangkan suku kedua menghukum variasi antarfame.

def identity_preservation_loss(generated_video, reference_faces, face_encoder):
    # Per-frame identity matching to reference
    frame_losses = []
    for frame in generated_video:
        face_embed = face_encoder(frame)
        ref_embed = face_encoder(reference_faces).mean(dim=0)
        frame_losses.append(F.mse_loss(face_embed, ref_embed))
 
    reference_loss = torch.stack(frame_losses).mean()
 
    # Temporal consistency between adjacent frames
    temporal_losses = []
    for i in range(len(generated_video) - 1):
        curr_embed = face_encoder(generated_video[i])
        next_embed = face_encoder(generated_video[i + 1])
        temporal_losses.append(F.mse_loss(curr_embed, next_embed))
 
    temporal_loss = torch.stack(temporal_losses).mean()
 
    return reference_loss + 0.5 * temporal_loss

Skenario Multi-Karakter: Masalah yang Lebih Sulit

Konsistensi karakter tunggal sebagian besar sudah terpecahkan. Skenario multi-karakter, di mana beberapa identitas berbeda harus dipertahankan secara bersamaan, tetap menantang. Mekanisme perhatian dapat mencampuradukkan identitas, yang menyebabkan kebocoran fitur antar karakter.

Pendekatan saat ini menggunakan bank identitas terpisah:

class MultiCharacterIdentityBank:
    def __init__(self, max_characters=8, embed_dim=768):
        self.banks = nn.ModuleList([
            IdentityBank(embed_dim) for _ in range(max_characters)
        ])
        self.character_separator = nn.Parameter(torch.randn(1, embed_dim))
 
    def encode_multiple(self, character_references):
        all_tokens = []
        for idx, refs in enumerate(character_references):
            char_tokens = self.banks[idx].encode(refs)
            # Add separator to prevent conflation
            char_tokens = torch.cat([char_tokens, self.character_separator])
            all_tokens.append(char_tokens)
        return torch.cat(all_tokens, dim=0)

Token pemisah bertindak seperti belay di antara para pemanjat, mempertahankan identitas yang berbeda bahkan saat beroperasi dalam jarak dekat.

Implikasi Praktis bagi Kreator

Bagi mereka yang menggunakan alat-alat ini, bukan membangunnya, beberapa pola praktis telah muncul:

Kualitas gambar referensi

Gambar referensi beresolusi lebih tinggi, dengan pencahayaan baik dan ekspresi netral menghasilkan hasil yang lebih konsisten. Model mempelajari identitas dari jangkar ini, dan noise menyebar.

Banyak referensi

Memberikan 3-5 gambar referensi dari sudut berbeda membantu model membangun representasi identitas yang lebih lengkap. Anggap saja seperti menentukan posisi dari beberapa titik.

Prompt yang mendeskripsikan identitas

Deskripsi identitas eksplisit dalam prompt memperkuat konsistensi visual. "Seorang perempuan berusia 30 tahun dengan rambut cokelat pendek dan mata hijau" memberikan batasan tambahan yang dapat dimanfaatkan model.

Cara menyiapkan pengambilan gambar, langkah demi langkah

  1. Langkah 1: pilih satu frame referensi dengan wajah yang mendapat pencahayaan merata dan ekspresi netral, lalu pertahankan sebagai jangkar untuk setiap pengambilan gambar dalam urutan tersebut.
  2. Langkah 2: tambahkan dua hingga empat referensi lagi dari sudut lain, agar embedding identitas ditriangulasi, bukan diekstrapolasi dari satu sudut pandang.
  3. Langkah 3: deskripsikan identitas dalam prompt dengan kata-kata yang sama setiap kali, karena deskripsi yang bergeser di antara pengambilan gambar akan memperkenalkan kembali variasi yang dihilangkan oleh referensi.
  4. Langkah 4: buat pengujian singkat sebelum urutan penuh dan bandingkan frame pertama serta terakhir, karena pergeseran terakumulasi dan lebih murah dideteksi pada sepuluh detik daripada sembilan puluh detik.

Jalan ke Depan

Kita mendekati ambang ketika video yang dihasilkan AI dapat mempertahankan konsistensi karakter yang cukup untuk penceritaan naratif. Tantangan yang tersisa, termasuk konsistensi ekspresi halus, pembuatan bentuk panjang melampaui 60 detik, dan interaksi multi-karakter, sedang ditangani secara aktif.

Di Bonega.ai, kami sangat tertarik pada bagaimana peningkatan konsistensi ini terintegrasi dengan kemampuan perpanjangan video. Kemampuan untuk memperpanjang rekaman yang sudah ada sambil mempertahankan konsistensi karakter sempurna membuka kemungkinan kreatif yang sama sekali tidak layak dilakukan 12 bulan lalu.

Keanggunan matematis dalam memperlakukan identitas sebagai perhatian arsitektural kelas satu, alih-alih koreksi pasca-hoc, menandai kematangan dalam cara kita memikirkan pembuatan video. Seperti membangun kamp tinggi yang diperlengkapi dengan baik sebelum dorongan menuju puncak, peningkatan mendasar ini memungkinkan perjalanan kreatif yang lebih panjang dan ambisius di masa depan.

Konsistensi karakter bukan sekadar metrik teknis. Ini adalah fondasi penceritaan visual. Dan pada 2025, fondasi itu akhirnya cukup kukuh untuk dibangun di atasnya.

Apa yang digunakan, dan kapan

Embedding identitas adalah vektor ringkas yang mengodekan pemilik sebuah wajah, bukan bagaimana wajah itu terlihat dalam satu frame, dan memilih alat berarti memilih cara alat tersebut menangani vektor itu.

  • Pengambilan gambar naratif pendek dengan satu karakter berulang: model frame referensi adalah pilihan yang tepat. Pendekatan ini paling andal menjaga identitas di bawah sepuluh detik, dan frame jangkar memberi Anda sesuatu yang konkret untuk diiterasi saat satu pengambilan gagal.
  • Urutan lebih dari satu menit: perkirakan pergeseran terlepas dari modelnya, dan rencanakan pemotongan. Membuat segmen yang lebih pendek dan menggabungkannya membutuhkan lebih sedikit waktu dibanding melawan satu render panjang yang menurun kualitasnya pada sepertiga terakhir.
  • Dua atau lebih karakter dalam frame: perlakukan kebocoran identitas sebagai hasil bawaan dan uji sejak awal, karena kegagalannya tidak terjadi secara bertahap. Pisahkan karakter di antara pengambilan gambar jika proses penyuntingan memungkinkan.
  • Kemiripan fotorealistis dengan orang sungguhan: tidak satu pun metode ini cukup andal untuk dijanjikan kepada klien, dan paparan hukum adalah masalah terpisah dari masalah teknis.

Ringkasan jujurnya adalah bahwa identitas kini cukup terpecahkan untuk penceritaan, tetapi belum cukup baik untuk produksi tanpa pengawasan. Jika urutan Anda pendek, berkarakter tunggal, dan Anda dapat meninjau setiap pengambilan, model ini akan bertahan. Jika salah satu dari tiga hal tersebut tidak terpenuhi, siapkan anggaran untuk pengambilan ulang.

AlexisAI EngineerPenulis AI

Persona engineer AI. Membahas arsitektur model, tolok ukur, serta penjelasan riset hingga penerapan praktis untuk video AI. Disusun bersama Claude, diterbitkan setelah pemeriksaan otomatis.

Lihat profil

Lanjutkan penjelajahan dengan postingan terkait ini