Sambut Avatar V, avatar paling realistis yang pernah dibuat. Buat avatarmu sendiri secara gratis

By Jiajun Zhao, Pedram Haqiqi

Avatar video only feels believable if the person stays consistent over time. When the face drifts, the teeth change, the lip sync slips, or the motion resets between clips, people notice immediately. This matters more for avatars than for many other video generation tasks because the viewer is watching a specific person speak, often at close range, for a long time.

Di dunia pembuatan video saat ini, durasi masih menjadi salah satu keterbatasan yang paling terlihat. Banyak model dan produk hanya dapat menghasilkan klip dengan durasi tetap — beberapa detik saja, dan hanya sedikit sistem yang mampu menghasilkan lebih dari beberapa menit. Untuk produk avatar, batasan ini langsung terasa dalam alur kerja pelanggan. Pelanggan menginginkan adegan/video yang lebih panjang dan konsisten untuk video pelatihan, demo penjualan, walkthrough produk, edukasi, dukungan, serta agen yang harus terus berbicara sampai tugas selesai, dan mereka juga menginginkan pratinjau cepat untuk menguji prompt, gerakan, dan naskah.

Di HeyGen, hal itu diterjemahkan menjadi tiga persyaratan konkret:

  1. Long-scene consistency. The avatar needs to preserve identity, lip sync, expression, and motion continuity not just for one short clip, but across many chunks of generated video.
  2. Tanpa batas durasi tetapSatu proses pembuatan bisa berdurasi sepuluh detik, sepuluh menit, atau berupa sesi waktu nyata yang tidak terbatas.
  3. Pratinjau cepat, pembuatan secara realtime atau lebih cepat dari realtime. Sistem harus mulai menghasilkan frame dengan cepat dan bahkan memungkinkan streaming frame yang dihasilkan saat proses inferensi masih berlangsung.

Artikel ini membahas secara rinci kerangka inferensi yang kami bangun untuk memenuhi persyaratan tersebut.

Arsitektur Model yang Mendasari

Kerangka ini dibangun di atas model generasi video avatar HeyGen — keluarga Avatar IV dan Avatar V. Secara garis besar, model ini menggunakan gambar/video referensi, audio penggerak, serta teks atau kondisi adegan opsional, lalu menghasilkan video avatar yang berbicara dengan identitas, ekspresi, dan gerakan yang tepat.

Model generasi intinya adalah Diffusion Transformer, atau DiT, yang dilatih dengan flow matching. Alih-alih mengompresi seseorang ke dalam embedding identitas yang kecil, model ini menggunakan token referensi yang kaya sehingga dapat mempertahankan detail-detail penting untuk avatar: bentuk wajah, gigi, tekstur kulit, gerakan mulut, gaya gestur, dan ritme berbicara.

Jalur inferensi produksi memiliki tiga tahap utama:

  1. Pembuatan audio ke video. Model DiT dasar menghasilkan laten video beresolusi rendah dari identitas referensi, fitur audio, dan sinyal pengkondisian. Tahap ini berfokus pada gerakan, sinkronisasi bibir, dan koherensi temporal.
  2. Super-resolusi yang menyadari identitas. Model kedua menyempurnakan latent tersebut menjadi output beresolusi tinggi, dengan perhatian ekstra pada area yang paling peka terhadap artefak, terutama wajah dan mulut.
  3. Dekode VAE secara streaming. Seorang dekoder VAE mengonversi laten beresolusi tinggi menjadi frame RGB secara bertahap, sehingga frame dapat dikeluarkan sebelum video lengkap selesai.

Untuk menghasilkan video berdurasi panjang, sistem memproses data dalam bentuk potongan (chunk). Sementara chunk pertama sepenuhnya bergantung pada referensi statis, chunk berikutnya menggunakan data batas dari segmen sebelumnya. Hal ini memungkinkan avatar untuk terus berbicara secara alami tanpa harus mengatur ulang postur atau identitasnya dari awal.

Kerangka Streaming dan Siklus Pipeline

Untuk mendukung eksekusi berbasis potongan (chunk), kerangka inferensi menggunakan arsitektur modular tiga lapis yang beroperasi pada jendela waktu terlokalisasi, dan langsung melepaskan sumber daya segera setelah setiap potongan selesai diproses.

  • Modul: Sebuah pembungkus di sekitar model tertentu dan checkpoint-nya (misalnya, A2V DiT, Super-Resolution DiT, komponen VAE, encoder teks/audio).
  • Tahap: unit eksekusi bertipe yang mengoordinasikan satu atau lebih modul (misalnya, pembuatan konteks, super-resolusi).
  • Pipeline: Grafik eksekusi yang menghubungkan berbagai stage, mengelola state bersama, dan mengoordinasikan mode eksekusi streaming maupun batch.

Fase inisialisasi mengenkode identitas referensi ke dalam laten satu kali untuk setiap permintaan. Pipeline kemudian menjalankan loop berkelanjutan di seluruh tahap yang tersisa hingga aliran audio input habis:

Diagram alur proses inferensi streaming avatar, yang memproses input gambar/video, audio, dan teks melalui tahapan seperti encoding, pembuatan konteks, dan super-resolusi, dengan loop berbasis potongan (chunk-based), untuk menghasilkan file output yang dihasilkan.
  • Pembuatan Konteks: Mengonversi segmen audio yang masuk menjadi fitur, menggabungkannya dengan teks atau pengkondisian adegan, dan menyiapkan tensor noise target.
  • Audio-ke-Video: Menjalankan proses difusi multi-tahap untuk menghasilkan latent beresolusi rendah. Tahap ini mengondisikan chunk saat ini pada frame batas dari chunk sebelumnya untuk menjaga kontinuitas gerakan.
  • Super-Resolution: Meningkatkan latensi gerakan ke resolusi penuh dalam satu langkah, dengan memprioritaskan detail spasial pada wajah.
  • VAE Decode-and-Publish: Mendekode latents beresolusi tinggi menjadi frame RGB dan menuliskannya langsung ke encoder output (H.264 / AAC) untuk penyimpanan segera atau pemutaran langsung.

Kekontinuan Batas dan Konsistensi Potongan

Pembuatan video dalam segmen-segmen terpisah dapat menimbulkan potensi ketidakterhubungan pada batas-batasnya. Kerangka kerja ini mengatasinya dengan menggunakan dua klasifikasi potongan (chunk) yang berbeda:

  • Chunk N: Segmen yang menghasilkan garis waktu utama avatar.
  • I Chunks (Interpolasi): Segmen yang dirancang untuk memperhalus transisi antara N Chunks berurutan.

Urutan eksekusi disusun sebagai berikut:

N0 -> N1 -> I0 -> N2 -> I1 -> N3 -> I2 -> ...

Sebuah chunk I hanya dihasilkan setelah chunk N sebelumnya dan sesudahnya selesai. Chunk I menggunakan frame terakhir dari chunk N sebelumnya dan frame awal dari chunk N saat ini sebagai frame jangkar untuk menghitung gerakan transisi. Setelah proses generasi, prediksi jangkar yang berlebih dibuang, sehingga hanya tersisa transisi yang diinterpolasi secara mulus. Mekanisme ini membatasi ukuran jendela konteks yang dibutuhkan sekaligus menjaga konsistensi temporal.

Memori konstan sepanjang durasi

Pipeline video konvensional mengakumulasikan laten, frame yang sudah didekode, dan konteks atensi selama eksekusi, sehingga konsumsi memori GPU meningkat secara linear seiring dengan durasi video.

Untuk memungkinkan proses generasi tanpa batas, kerangka kerja ini mempertahankan status bergulir yang ketat. Sistem hanya menyimpan pengkondisian referensi statis dan seperangkat minimal tensor jangkar yang diperlukan untuk transisi antar chunk. Semua aset perantara—termasuk fitur audio, tensor noise, aktivasi internal, dan frame RGB mentah—dihapus dari memori segera setelah sebuah chunk didekode dan ditulis.

Akibatnya, profil penggunaan memori GPU puncak tetap konstan baik saat menghasilkan klip pendek maupun rangkaian yang panjang; pemanfaatan sumber daya meningkat seiring ukuran chunk yang ditentukan, bukan berdasarkan durasi total sesi.

Tahap pemuatan/pembongkaran dalam pipeline

Setiap permintaan dijalankan pada sebuah node dengan 8 GPU. Kami menggunakan FSDP untuk membagi parameter model berukuran besar ke seluruh GPU. Setiap rank hanya memiliki sebagian kecil dari bobot, mengumpulkan parameter yang dibutuhkannya untuk suatu komputasi, lalu melepaskannya kembali. Inilah yang memungkinkan beberapa model besar — DiT dasar, DiT super-resolusi, encoder teks, encoder audio, dan VAE — dapat dimuat dalam satu node.

Ada kompromi yang harus diambil. FSDP menimbulkan overhead komunikasi selama inferensi karena parameter perlu dikumpulkan saat forward pass. Kami menggunakan kombinasi berbagai teknik untuk menyembunyikan overhead tersebut dan menjaga agar model yang ditempatkan bersama tetap berada di luar GPU ketika tidak digunakan:

  • Prefetching maju. AllGather untuk parameter blok berikutnya dijalankan lebih awal dan ditumpangtindihkan dengan komputasi blok saat ini, sehingga menyembunyikan latensi pengumpulan pada jalur kritis.
  • Unsharding per-blok secara malas dari CPU. Saat sebuah model dibawa kembali dari memori CPU yang dipin, kami tidak memuat seluruh kumpulan bobot sekaligus di awal. Setiap blok transformer di-unshard (penyalinan host-ke-perangkat + AllGather) tepat sebelum forward pass-nya, sehingga transfer H2D untuk blok n+1 tumpang tindih dengan komputasi blok n.
  • Offload CPU pinned antar tahap. Parameter dari model yang saat ini tidak berjalan disimpan di memori CPU yang dipin, sehingga model yang ditempatkan bersama (base DiT, super-resolution DiT, text encoder, audio encoder, VAE) tidak semuanya harus menahan bobotnya di GPU pada saat yang sama. Memori yang dipin inilah yang membuat penyalinan H2D cukup cepat untuk dapat dioverlap dengan komputasi.
  • Penempatan proses yang sadar NUMA. Setiap proses dipasangkan ke node NUMA yang sama dengan GPU yang ditugaskan kepadanya, sehingga transfer CPU↔GPU berjalan pada bandwidth penuh PCIe/NVLink tanpa melintasi interkoneksi antar-soket.

Pergantian model antar tahap di bawah 10 ms

Manfaat praktis dari teknik-teknik di atas adalah bahwa menyerahkan GPU dari model satu tahap ke tahap berikutnya — misalnya, A2V DiT → Super-Resolution DiT, atau SR DiT → VAE decoder — pada dasarnya tidak menimbulkan biaya tambahan. Karena model yang keluar di-offload secara asinkron dan blok pertama model yang masuk di-unshard tepat waktu, proses penyalinan H2D dan AllGather sama-sama tersembunyi di balik komputasi yang sudah berjalan. Secara end-to-end, overhead yang tampak untuk setiap perpindahan berada di bawah 10 ms — jauh di bawah anggaran satu frame pada frame rate target kami. Secara konkret, inilah yang memungkinkan loop pipeline streaming (Context Gen → A2V → SR → VAE Decode-and-Publish) berputar melalui beberapa model besar per chunk tanpa membuat pergantian model itu sendiri menjadi bottleneck.

Penerbitan streaming waktu nyata

Agar model cukup cepat untuk melakukan streaming secara realtime, kami telah melakukan banyak optimasi inferensi, silakan merujuk ke https://www.heygen.com/research/avatar-v-inference untuk detail lebih lanjut mengenai bagian ini.

Begitu pipeline mengeluarkan video secara bertahap (chunk demi chunk) secara real-time, pengiriman streaming menjadi perpanjangan alami dari proses inferensi, bukan lagi langkah pascapemrosesan yang terpisah.

Untuk jalur realtime bergaya siaran, kami menerbitkan frame yang dihasilkan ke Amazon Kinesis Video Streams (KVS). KVS biasanya dibahas dalam konteks kamera, perangkat IoT, dan media yang diunggah. Dalam kasus kami, "kamera" adalah pipeline inferensi itu sendiri: frame dibuat oleh model, langsung dikodekan, dan dikirim ke KVS sebagai siaran langsung.

Penulis output menerima frame RGB terdekripsi dari VAE streaming dan mengirimkannya ke dalam pipeline GStreamer. Video dikodekan sebagai H.264 dan audio sebagai AAC, lalu kedua track tersebut dikirim ke kvssink, yaitu sink produser KVS. Dari sana, penonton dapat memutar sesi tersebut sebagai siaran langsung bahkan saat sesi itu masih sedang dihasilkan.

Hasil dan pembelajaran

Kerangka kerja ini mengubah proses pembuatan Avatar IV dan Avatar V dari rendering dengan durasi adegan tetap menjadi generasi streaming yang terbuka dan fleksibel. Hasil terpentingnya sederhana: kami menghilangkan batas durasi adegan untuk Avatar IV dan Avatar V. Untuk pembuatan Avatar IV secara realtime, kami berhasil mencapai waktu hingga frame pertama kurang dari 5 detik dan kecepatan generasi lebih dari 27 frame per detik untuk video Avatar IV 720p — lebih cepat daripada pemutaran realtime.