Meta Pixel
AlexisAlexis
7 min read
1266 слоў

Кансістэнцыя персанажаў у AI відэа: як мадэлі навучаюцца памятаць лічы

Тэхнічны аналіз архітэктурных інавацый, якія дазваляюць AI мадэлям генерацыі відэа захоўваць ідэнтычнасць персанажаў у розных план​ах, ад механізмаў уваги да эмбедынгаў, што захоўваюць ідэнтычнасць.

Кансістэнцыя персанажаў у AI відэа: як мадэлі навучаюцца памятаць лічы

Адна з найстойкіх праблем у генерацыі AI відэа — гэта захаванне кансістэнцыі персанажа пасля планаў. Спытайце любога кінэматаграфіста: сцэнарый развальваецца ў момант, калі лік вашага гаву непрыкметна змяняецца ў разрэзах. У 2025 годзе мы, нарэшце, бачым, як мадэлі вырашаюць гэтую праблему архітэктурнымі інавацыямі, якія выглядаюць дакладна так жа элегантна, як добра спланаваны маршрут на цяжкімі скалах. Дайце мне пакажаць вам, як сучасныя мадэлі відэа нацяло навучаюцца памятаць лічы.

Вызванне кансістэнцыі

Традыцыйныя мадэлі дыфузіі генерыруюць кожны кадр вяроватнасным ўзорыванням. Гэта ўводзіць варыяцыю — карысна для рознастайнасці, праблематычна для ідэнтычнасці. Пры генерацыі 10-секунднага відэа з частатой 24 кадры ў секунду мадэль прымае 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()  # Прадтрэніраная мадэль твару
        self.projection = nn.Linear(512, embed_dim)
        self.identity_bank = nn.Parameter(torch.randn(32, embed_dim))
 
    def encode_identity(self, reference_frame):
        # Вычленае рысы ідэнтычнасці з рэферэнсу
        face_features = self.face_encoder(reference_frame)
        identity_embed = self.projection(face_features)
 
        # Крыжак-увага з вучонымі токенамі ідэнтычнасці
        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):
        # Стандартная пространственная увага ў рамках кадраў
        x = self.spatial_attn(x, x, x)[0] + x
 
        # Часавая увага пасля кадраў
        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)
 
        # Увага, спецыфічная для ідэнтычнасці, выкарыстоўваючы вобласці твара
        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Увага, свядомая тваруДэдыкаваны отримання твараМоцна для крупнаплана

Gen-4.5 кампаніі Runway заслугоўвае спецыяльнай адзнакі тут. Іх падыход спалучае кандыцыянаванне зображаннем рэферэнса з тым, што яны называюць «замкамі ідэнтычнасці» — вучонымі токенамі, якія мадэль трэніруецца захоўваць незалежна ад іншых адпаведных рашэнняў. Гэты выбар архітэктуры верагодна прычыніўся да іх дамінавання ў Video Arena.

Парадыгма рэферэнсавага кадра

Значны зрух у 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):
        # Кадуй ідэнтычнасць з рэферэнсных выяваў
        identity_embeds = []
        for ref in reference_images:
            identity_embeds.append(self.identity_encoder(ref))
 
        # Аб'єднай множныя рэферэнсы для моцнай ідэнтычнасці
        identity_tokens = torch.stack(identity_embeds).mean(dim=0)
 
        # Генеруй з кандыцыяваннем ідэнтычнасцю
        video = self.model.generate(
            prompt=prompt,
            num_frames=num_frames,
            cross_attention_kwargs={
                "identity_tokens": identity_tokens,
                "identity_strength": 0.8  # Балансуе кансістэнцыю і крэатыўнасць
            }
        )
        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):
    # Падабранне ідэнтычнасці кожнага кадра да рэферэнса
    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_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)
            # Дадай сепаратар, каб прадухіліць пабліцы
            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 месяцаў таму.

Матэматычная элегантнасць разгледу ідэнтычнасці як першачергавай архітэктурнай задачы, а не як паштраў carriage, аз​начае дазрэванне ў тым, як мы думаем аб генерацыі відэа. Як ўстаноўкі добра ўпакаванага высокагарнага лагера перад напісам на вяршыню, гэтыя фундаментальныя паляпшэнні даюць магчымасць для длытэлей, больш амбіцыёзных творчых праціаў, якія ляжаць надалей.

Кансістэнцыя персанажа — гэта не толькі тэхнічны метрык — гэта фундамент візуальнага разказу. І ў 2025 годзе гэты фундамент нарэшце стаў сцвёрдлі дастаткова, каб будаваць на ім.

Гэты артыкул быў карысны?

Alexis

Alexis

Інжынер ШІ

Інжынер ШІ з Лазаны, які спалучае глыбіню даследаванняў з практычнымі інавацыямі. Дзеліць час паміж архітэктурамі мадэляў і альпійскімі вяршынямі.

Звязаныя артыкулы

Працягвайце даследаванне з гэтымі звязанымі допісамі

Спадабаўся гэты артыкул?

Адкрывайце больш ўзнасцаў і будзьце ў курсе нашага апошняга кантэнту

Кансістэнцыя персанажаў у AI відэа: як мадэлі навучаюцца памятаць лічы