Meta Pixel
AlexisAlexis
7 min read
1340 думи

Консистентност на персонажа в AI видеото: Как моделите се учат да помнят лица

Технически дълбок анализ на архитектурните иновации, които позволяват на AI видео моделите да поддържат идентичност на персонажа чрез кадри, от механизми на внимание до вграждания, които съхраняват идентичност.

Консистентност на персонажа в AI видеото: Как моделите се учат да помнят лица

Един от най-постоянните проблеми при генериране на AI видеото е поддържането на консистентност на персонажа чрез кадри. Попитайте всеки кинорежисьор: история пропада в момента, когато лицето на твоя протагонист се променя едва забележимо между рязанията. През 2025 г. накрай видяхме модели, които разрешават този проблем с архитектурни иновации, които са толкова елегантни, колкото добре планиран маршрут нагоре по трудна вершина. Позволете ми да ви представя как съвременните видео модели се учат да помнят лица.

Предизвикателството на консистентността

Традиционните модели на дифузия генерират всеки кадър с вероятностно вземане на проби. Това въвежда вариантност—полезна за разнообразие, проблемна за идентичност. При генериране на 10-секундно видео при 24fps, моделът прави 240 последователни решения, всяко с възможности за дрейф.

# Основният проблем: всяка стъпка на денойзване въвежда вариантност
def denoise_step(x_t, model, t):
    noise_pred = model(x_t, t)
    # Това вземане на проби въвежда стохастичност
    x_t_minus_1 = scheduler.step(noise_pred, t, x_t).prev_sample
    return x_t_minus_1  # Малки вариации натрупват се чрез кадри

Ранните видео модели като Gen-1 и Pika 1.0 явно се борят с това. Персонажите ще се изместват в появата, възраст едва забележимо между кадрите, или развивават непоследователни черти—това, което практиците наричаха "идентичност дрейф". Прробивът дойде от третирането на консистентност на персонажа не като проблем при постобработка, а като архитектурен.

Вграждания, които съхраняват идентичност: Основата

Първата голяма иновация беше въвеждането на посветени вграждания на идентичност, които се запазват чрез процеса на генериране. Вместо да разчитат единствено на условие на текст, моделите сега поддържат явни жетони на идентичност:

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

Тези жетони на идентичност се внасят в процеса на дифузия на всяка стъпка на денойзване, създавайки това, което аз обичам да мисля за като "точки на котва"—както фиксирана защита на маршрут катерене, към която винаги можеш да се закрепиш, когато условията станат несигурни.

Внимание между кадрами: Научаване на времева идентичност

Вторият прробив беше архитектурен: моделите сега явно обръщат внимание на кадри, когато правят решения относно появата на персонажа. Трансформатори на дифузия естествено поддържат това чрез тяхната обработка на кръстоумни петна, но моделите, ориентирани към консистентност, отиват още по-далеч.

Ключова иновация: Посветени слоеве на внимание на идентичност, които специално обръщат внимание на лицеви региони чрез времевото измерение:

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

Този тройно механизъм на внимание—пространствено, времево и специфично за идентичност—позволява на модела да прави решения за появата, докато явно препраща както к установената идентичност, така и към предишни кадри.

Текущи подходи на модела в сравнение

Основните платформи за генериране на видеото са внедрили консистентност на персонажа по различни начини:

МоделПодходМетод на консистентностЕфективност
Sora 2Петна в пространство-времеИмплицитно чрез дълъг контекстДобро за къси клипове
Veo 3Генериране с множество етапиКотвяне на ключови кадриСилна за човешко движение
Gen-4.5Условие на референцияЯвно внедряване на идентичностНай-добра в класа консистентност
Kling 1.6Внимание, съзнателно лицеПосветено проследяване на лицеСилна за преглед от близо

Runway's Gen-4.5 заслужава специално споменаване тук. Техният подход комбинира условие на образ от референция с това, което те наричат "заключвания на идентичност"—научени жетони, които моделът е обучен да запази независимо от други генеративни решения. Този избор на архитектура вероятно допринесе за тяхната видео победа в Арена.

Парадигмата на референтен кадър

Значителен преход през 2025 г. е бил движението към генериране, условено на референция. Вместо да генерира персонажи чисто от описания на текст, моделите сега приемат референтни образи, които установяват каноничната поява:

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

Параметърът identity_strength представлява важен компромис. Твърде висок, и моделът става твърд, неспособен да покаже естествено вариране на израз. Твърде нисък, и дрейфът се връща. Намирането на сладкото място—обикновено около 0.7-0.85—е отчасти изкуство, отчасти наука.

Функции на загуба за съхраняване на идентичност

Обучението на тези системи изисква специализирани функции на загуба, които явно наказват дрейфа на идентичност:

Загуба на съхраняване на идентичност:

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

Където f е предварително обучен кодер за разпознаване на лице, G е генератором, и v_t представлява генерирани кадри. Първият термин гарантира, че генерираните лица съответстват на референции; вторият наказва вариране от кадър до кадър.

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

Сценарии с множество персонажи: По-трудният проблем

Консистентност на един персонаж е до голяма степен разрешена. Сценарии с множество персонажи—където трябва да се поддържат едновременно множество различни идентичности—остават предизвикателни. Механизмите на внимание могат да объркат идентичности, което води до просмукване на черти между персонажи.

Текущите подходи използват отделни банки на идентичност:

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)

Разделителните жетони действат като белейни между катерачите—поддържайки различни идентичности дори когато работят в близка близост.

Практически последици за създателите

За онези, които използват тези инструменти, а не ги строят, са се появили няколко практически модела:

Качеството на референтния образ има значение: По-висока резолюция, добре осветени референтни образи с неутрални изрази произвеждат по-последователни резултати. Моделът се учи идентичност от тези котви, и шумът се разпространява.

Множество референции подобряват устойчивостта: Предоставянето на 3-5 референтни образи от различни ъгли помага на модела да строи по-пълно представяне на идентичност. Мислете за това като триангулация на позиция от множество точки.

Инженеризиране на подкастите за консистентност: Явни описания на идентичност в подкастите укрепват визуалната консистентност. "30-годишна жена с къса кестенява коса и зелени очи" осигурява допълнителни ограничения, които моделът може да използва.

Пътят напред

Приближаваме се до прагу, където AI-генерираното видеото може да поддържа консистентност на персонажа, достатъчна за повествователно разказване. Останалите предизвикателства—консистентност на фина израз, дълъгоформено генериране отвъд 60 секунди и взаимодействие на множество персонажи—активно се решават.

В Bonega.ai, ние сме особено заинтересовани как тези подобрения на консистентност интегрира с видео удължаване възможности. Способността да разширява съществуващото видеоматериал, докато поддържа идеална консистентност на персонажа, отваря творчески възможности, които просто не бяха осъществими 12 месеца назад.

Математическата елегантност на третирането на идентичност като първокласна архитектурна задача, а не като постхок корекция, маркира созрява в това как мислим за генериране на видеото. Както установяване на добре снабдено високо лагер преди натиск на върха, тези основни подобрения позволяват по-дългите, по-амбициозни творчески пътешествия, които лежат напред.

Консистентност на персонажа не е просто техническа метрика—тя е основата на визуално разказване. И през 2025 г. тази основа е накрай достатъчно солидна, за да се строи върху нея.

Беше ли полезна тази статия?

Alexis

Alexis

Инженер по изкуствен интелект

Инженер по изкуствен интелект от Лозана, съчетаващ изследователска дълбочина с практични иновации. Разделя времето си между модели архитектури и алпийски върхове.

Свързани статии

Продължете да изследвате със свързаните публикации

Хареса ли Ви тази статия?

Открийте още полезна информация и следете най-новото ни съдържание.

Консистентност на персонажа в AI видеото: Как моделите се учат да помнят лица