LivePortrait คืออะไร?
LivePortrait เป็นเฟรมเวิร์กการอนิเมทภาพเหมือนที่มีประสิทธิภาพที่พัฒนาโดย Kuaishou Technology ซึ่งมีเป้าหมายในการสังเคราะห์วิดีโอที่สมจริงจากภาพต้นฉบับเพียงภาพเดียว มันใช้ภาพต้นฉบับเป็นการอ้างอิงลักษณะและดึงการเคลื่อนไหว (การแสดงอารมณ์และท่าศีรษะ) จากวิดีโอขับเคลื่อน เสียง ข้อความ หรือการสร้าง
ต่างจากวิธีการแพร่กระจายทั่วไป LivePortrait สำรวจและขยายเฟรมเวิร์กที่ใช้คีย์พอยต์โดยนัยเพื่อปรับสมดุลประสิทธิภาพการคำนวณและการควบคุมได้อย่างมีประสิทธิภาพ มันเน้นการทำให้เกิดการทั่วไปที่ดีขึ้น การควบคุมได้ และประสิทธิภาพสำหรับการใช้งานจริง LivePortrait มีคุณภาพการสร้างที่สูงแม้เมื่อเทียบกับวิธีการแพร่กระจาย ในขณะที่เร็วมาก - ประมาณ 12.8ms ต่อเฟรมบน GPU RTX 4090 พร้อม PyTorch
สำหรับรายละเอียดเพิ่มเติม โปรดเยี่ยมชม
LivePortrait ทำงานอย่างไร
ในระดับสูง LivePortrait ใช้ภาพต้นฉบับและวิดีโอขับเคลื่อนเป็นอินพุต มันดึงลักษณะจากภาพต้นฉบับและการเคลื่อนไหวจากวิดีโอขับเคลื่อน จากนั้นนำมารวมกันโดยใช้โมดูลการบิดเบือนและการสร้างเพื่อสังเคราะห์วิดีโอภาพเหมือนที่มีการเคลื่อนไหวซึ่งรักษาเอกลักษณ์ของภาพต้นฉบับ แต่ตามการเคลื่อนไหวและการแสดงอารมณ์ของวิดีโอขับเคลื่อน
ส่วนประกอบหลักใน LivePortrait ได้แก่:
- ตัวดึงคุณสมบัติลักษณะ: เข้ารหัสข้อมูลเอกลักษณ์และลักษณะจากภาพต้นฉบับ
- ตัวดึงการเคลื่อนไหว: ดึงคุณสมบัติการเคลื่อนไหว (คีย์พอยต์ใบหน้า) จากเฟรมวิดีโอขับเคลื่อน
- โมดูลการบิดเบือน: ใช้การเคลื่อนไหวที่ดึงออกมาเพื่อบิดเบือนคุณสมบัติของภาพต้นฉบับ โดยจัดให้ตรงกับท่าทางและการแสดงอารมณ์ของการขับเคลื่อน
- ตัวสร้างภาพ: นำคุณสมบัติที่บิดเบือนแล้วมาสังเคราะห์เฟรมเคลื่อนไหวที่สมจริง
- โมดูลการเย็บและการกำหนดเป้าหมายใหม่: เย็บภาพเหมือนที่สร้างขึ้นกลับไปยังภาพต้นฉบับและอนุญาตให้ควบคุมพื้นที่ใบหน้าเฉพาะเช่น ตาและปาก
โมดูลเหล่านี้ออกแบบมาอย่างมีประสิทธิภาพและทำงานร่วมกันเพื่อให้เกิดการอนิเมท LivePortrait ที่มีคุณภาพสูงและควบคุมได้
วิธีใช้ ComfyUI LivePortrait
ขอบคุณ node และเวิร์กโฟลว์ การสร้างอนิเมทภาพเหมือนที่สมจริงใน ComfyUI ง่ายขึ้นมาก ต่อไปนี้เป็นการสรุปส่วนประกอบและพารามิเตอร์หลักของเวิร์กโฟลว์ ComfyUI LivePortrait ของเขา
ขั้นตอนสำคัญของเวิร์กโฟลว์ ComfyUI LivePortrait Img2Vid
1. โหลดโมเดล Live Portrait
- เพิ่ม "DownloadAndLoadLivePortraitModels" node
- ตั้งค่าความแม่นยำเป็น auto หรือ fp16 เพื่อประสิทธิภาพที่ดีที่สุด
2. เลือกตัวตรวจจับใบหน้าสำหรับ LivePortrait
- คุณมีตัวเลือกระหว่าง "LivePortraitLoadCropper" (InsightFace) และ "LivePortraitLoadMediaPipeCropper" nodes
- InsightFace มีความแม่นยำมากกว่าแต่มีใบอนุญาตที่ไม่ใช่เชิงพาณิชย์ ในขณะที่ MediaPipe เร็วกว่าใน CPU แต่มีความแม่นยำน้อยกว่า
- ทั้งสองส่งออก "cropper" ที่จะใช้ตรวจจับและครอบตัดใบหน้า
3. โหลดและเตรียมภาพต้นฉบับสำหรับ LivePortrait
- โหลดภาพเหมือนต้นฉบับของคุณโดยใช้ "Load Image" node
- ปรับขนาดเป็น 512x512 โดยใช้ "ImageResize" node
- เชื่อมต่อภาพที่ปรับขนาดแล้วกับ "LivePortraitCropper" node
- เชื่อมต่อเอาท์พุต "cropper" ของตัวตรวจจับใบหน้าที่คุณเลือกกับ node นี้
- พารามิเตอร์หลักใน "LivePortraitCropper" Node
"dsize": กำหนดความละเอียดของภาพใบหน้าที่ครอบตัด
- ค่าเริ่มต้นคือ 512 หมายถึงใบหน้าจะถูกครอบตัดเป็น 512x512 พิกเซล
- ค่าที่สูงกว่าจะครอบตัดใบหน้าในความละเอียดที่สูงกว่า แต่กระบวนการอาจช้าลง
- ค่าที่ต่ำกว่าจะเร็วกว่าแต่รายละเอียดอาจหายไปบ้าง
"scale": ควบคุมการซูมเข้าในภาพใบหน้าที่ครอบตัด
- ค่าเริ่มต้นคือ 2.3 ค่าที่สูงกว่าจะซูมเข้าใกล้ใบหน้ามากขึ้น ค่าที่ต่ำกว่าจะรวมส่วนของศีรษะ/พื้นหลังมากขึ้น
- คุณต้องปรับสิ่งนี้เพื่อให้การครอบตัดรวมใบหน้าและพื้นหลังบางส่วน แต่ไม่มากเกินไป
- การครอบตัดใบหน้าที่ดีเป็นสิ่งสำคัญสำหรับการโอนย้ายการเคลื่อนไหวให้ทำงานได้ดี
- ค่าทั่วไปอยู่ระหว่าง 1.8 ถึง 2.5 ขึ้นอยู่กับการจัดกรอบของภาพต้นฉบับ
"face_index": หากมีการตรวจจับใบหน้าหลายใบในภาพนี้ เลือกใบหน้าที่จะครอบตัด
- ค่าเริ่มต้นคือ 0 ซึ่งเลือกใบหน้าแรกที่ตรวจจับได้
- เพิ่มค่านี้หากคุณต้องการเลือกใบหน้าอื่นในภาพ
- ใบหน้าที่ตรวจจับได้จะเรียงลำดับตามการตั้งค่า "face_index_order" (ค่าเริ่มต้นคือจากใหญ่ไปเล็ก)
"vx_ratio" และ "vy_ratio" (ไม่บังคับ): อนุญาตให้คุณเลื่อนการครอบตัดในแนวตั้ง (vy) หรือแนวนอน (vx)
- ค่าช่วงจาก -1 ถึง 1
- ตัวอย่างเช่น การตั้งค่า vy เป็น 0.1 จะเลื่อนการครอบตัดขึ้น 10% ของขนาดเฟรม
- สิ่งนี้สามารถช่วยได้หากการครอบตัดอัตโนมัติไม่ตรงแนวเล็กน้อย
"face_index_order": กำหนดการเรียงลำดับใบหน้าที่ตรวจจับได้เมื่อเลือกด้วย face_index
- ค่าเริ่มต้นคือ "large-small" ซึ่งเรียงลำดับจากใบหน้าที่ใหญ่ที่สุดไปเล็กที่สุด
- สามารถเรียงลำดับจากซ้ายไปขวา บนลงล่าง ฯลฯ
- สิ่งนี้เกี่ยวข้องเฉพาะเมื่อคุณมีใบหน้าหลายใบในภาพของคุณ
4. โหลดและเตรียมวิดีโอขับเคลื่อนสำหรับ LivePortrait
- โหลดวิดีโอขับเคลื่อนของคุณโดยใช้ "VHS_LoadVideo" node
- ปรับ num_frames โดยใช้ primitive "frame_load_cap"
- ปรับขนาดเฟรมวิดีโอเป็น 480x480 โดยใช้ "GetImageSizeAndCount" node
- คุณสามารถครอบตัดเฟรมวิดีโอขับเคลื่อนได้โดยใช้ "LivePortraitCropper" node อีกตัวหนึ่ง
5. ใช้การโอนย้ายการเคลื่อนไหวสำหรับ LivePortrait
- เพิ่ม "LivePortraitProcess" node
- เชื่อมต่อ pipeline ที่โหลด ภาพต้นฉบับ crop_info ภาพต้นฉบับที่ครอบตัด และเฟรมขับเคลื่อนไปยัง "LivePortraitProcess" node
- พารามิเตอร์หลักใน "LivePortraitProcess" Node
"lip_zero": เมื่อเปิดใช้งาน สิ่งนี้จะตั้งค่าพารามิเตอร์ปากเป็นศูนย์หากต่ำกว่าค่าที่กำหนด
- สิ่งนี้สามารถช่วยลดการเคลื่อนไหวของปากที่ไม่เป็นธรรมชาติและปรับปรุงการซิงค์ปาก
- แนะนำให้เปิดใช้งานสิ่งนี้เว้นแต่คุณต้องการรักษาการเคลื่อนไหวของปากทั้งหมด
"lip_zero_threshold": กำหนดเกณฑ์ที่พารามิเตอร์ปากจะถูกตั้งค่าเป็นศูนย์เมื่อเปิดใช้งาน "lip_zero"
- ค่าเริ่มต้นคือ 0.03 ค่าที่สูงกว่าจะตั้งค่าการเคลื่อนไหวของปากมากขึ้น ค่าที่ต่ำกว่าจะรักษาไว้มากขึ้น
- ปรับสิ่งนี้หากคุณต้องการเปลี่ยนแปลงปริมาณการเคลื่อนไหวของปากที่ถูกระงับ
"stitching": เมื่อเปิดใช้งาน สิ่งนี้จะผสมใบหน้าที่เคลื่อนไหวกลับไปยังภาพต้นฉบับโดยใช้กระบวนการเย็บ
- สิ่งนี้สามารถช่วยสร้างการเปลี่ยนแปลงที่ราบรื่นระหว่างใบหน้าที่เคลื่อนไหวและพื้นหลัง
- แนะนำให้เปิดใช้งานสิ่งนี้เพื่อผลลัพธ์ที่ดูเป็นธรรมชาติที่สุด
"delta_multiplier": ปรับขนาดพารามิเตอร์การเคลื่อนไหวด้วยตัวคูณ
- ค่าเริ่มต้นคือ 1.0 ค่าที่สูงกว่าจะเพิ่มการเคลื่อนไหว ค่าที่ต่ำกว่าจะลดลง
- สามารถใช้ปรับความเข้มของการเคลื่อนไหวของใบหน้าโดยรวม
- ค่าทั่วไปอยู่ระหว่าง 0.8 ถึง 1.5 ขึ้นอยู่กับผลที่ต้องการ
"mismatch_method": กำหนดวิธีการที่เวิร์กโฟลว์จัดการกับการไม่ตรงกันระหว่างจำนวนเฟรมต้นฉบับและเฟรมขับเคลื่อน
- ตัวเลือกได้แก่ "constant", "cycle", "mirror", และ "cut"
- "constant" จะค้างอยู่ที่เฟรมสุดท้าย "cycle" จะวนกลับ "mirror" จะเล่นไปข้างหน้าแล้วถอยหลัง "cut" จะหยุด
- ค่าเริ่มต้นคือ "constant" เปลี่ยนสิ่งนี้หากคุณต้องการพฤติกรรมที่แตกต่างเมื่อวิดีโอขับเคลื่อนยาวกว่าหรือสั้นกว่าต้นฉบับ
"relative_motion_mode": ควบคุมวิธีการโอนย้ายการเคลื่อนไหวจากวิดีโอขับเคลื่อนไปยังภาพต้นฉบับ
- ตัวเลือกได้แก่ "relative", "source_video_smoothed", "relative_rotation_only", "single_frame", และ "off"
- "relative" เป็นค่าเริ่มต้นและใช้การโอนย้ายการเคลื่อนไหวแบบสัมพัทธ์
- "off" จะปิดการโอนย้ายการเคลื่อนไหวทั้งหมด
- ทดลองกับโหมดต่าง ๆ เพื่อดูว่าโหมดใดให้ผลลัพธ์ที่ดีที่สุดสำหรับการใช้งานเฉพาะของคุณ
"driving_smooth_observation_variance": ควบคุมความราบรื่นของการเคลื่อนไหวขับเคลื่อนเมื่อใช้โหมดการเคลื่อนไหว "source_video_smoothed"
- ค่าที่สูงกว่าจะทำให้การเคลื่อนไหวราบรื่นขึ้น ค่าที่ต่ำกว่าจะรักษาการเคลื่อนไหวต้นฉบับมากขึ้น
- ค่าเริ่มต้นคือ 0.000003 ปรับสิ่งนี้หากคุณต้องการเปลี่ยนแปลงความราบรื่นของการโอนย้ายการเคลื่อนไหว
6. ประกอบผลลัพธ์ (ไม่บังคับ) สำหรับ LivePortrait
- เพื่อประกอบใบหน้าที่เคลื่อนไหวกลับไปยังภาพต้นฉบับ ใช้ "LivePortraitComposite" node
- เชื่อมต่อภาพต้นฉบับ ภาพที่ครอบตัดที่เคลื่อนไหว ข้อมูลเอาต์พุต LivePortrait และหน้ากากที่ไม่บังคับ
- สิ่งนี้จะส่งออกเฟรมเต็มพร้อมใบหน้าที่เคลื่อนไหวผสมอยู่
7. กำหนดเป้าหมายใหม่ (ไม่บังคับ) สำหรับ LivePortrait
- สำหรับการควบคุมที่ละเอียดกว่าบนตาและปาก ใช้ "LivePortraitRetargeting" node
- เปิดใช้งานการกำหนดเป้าหมายใหม่สำหรับตาและ/หรือปากและปรับตัวคูณของพวกเขา
- เชื่อมต่อข้อมูลการกำหนดเป้าหมายใหม่กับ "LivePortraitProcess"
โปรดทราบว่าโมเดล Insightface เป็นสิ่งจำเป็นในเวิร์กโฟลว์นี้ ใบอนุญาตโมเดล Insightface (https://github.com/deepinsight/insightface/releases/download/v0.7/buffalo_l.zip) มีลักษณะไม่ใช่เชิงพาณิชย์
หากคุณสนใจใน LivePortrait Vid2Vid โปรดใช้