尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

持续全身Deepfake生成:如何解决视频中的时间一致性与身份漂移

持续全身Deepfake生成:如何解决视频中的时间一致性与身份漂移 什么样的换脸才算真正“以假乱真”如果只看静态图今天很多生成模型已经能做到肉眼难辨。但只要视频一长问题立刻暴露身份在漂移、服装在跳变、手部在抽搐、人脸和身体的姿态总是对不上。所谓的“全身 deepfake”难点从来不是单帧画质而是“连续时间里的全身一致性”。这也是“Towards perpetual full-body deepfake generation”这类研究方向的核心它想解决的不是怎么生成一张更真的脸而是怎么让一个虚拟身份在几十秒、几分钟甚至更长的视频里始终保持同一个人的外观、姿态和身份特征。本文会从技术原理、模型结构、工程实现、评测方法和安全治理五个角度拆解持续全身生成perpetual full-body generation这个方向。你会看到它和传统换脸的区别会理解时间一致性为什么是核心难题也会拿到一套可落地的技术框架思路。无论你是做视频生成、虚拟数字人还是做深度伪造检测这篇文章都值得读完。1. 这篇文章真正要解决的问题先看一个实际场景你想让一段演讲音频驱动一个虚拟人物让他一边说话一边自然地转头、摆手、走动。传统方案是两步走先用音频生成口型再做姿态驱动。但把两步拼在一起时口型和躯干动作经常“打架”。更麻烦的是视频长度超过 20 秒之后角色衣服纹理开始闪烁面部特征慢慢变成了另一个人甚至连体型都在悄悄变化。这不是单个模型不够强而是整个生成流程缺少一个“长期一致性”机制。“Perpetual full-body deepfake generation”这个标题里有两个关键词值得注意。第一个是 “full-body”。过去很多换脸算法只处理人脸区域头部以下全部复用原视频。这种方案在自拍视角下效果好但一旦镜头拍到全身行人走路、转身、坐下身体轮廓和衣服都会随视角改变人脸换掉了身体却是原样违和感非常强。全身生成意味着模型必须对人体、衣服、姿态、交互物做统一的生成而不是只做“脸部替换”。第二个是 “perpetual”中文可以理解为“持续性”或“无终止”。它强调的是时间维度上的连续。单帧质量再高如果帧间身份不稳定、动作不连贯合出来就是一段恐怖片。持续性生成要求模型把时间当作一个整体来建模而不是逐帧独立生成。所以这篇文章真正要解决的问题可以概括为一个口诀身份要稳、姿态要准、纹理要连、时间要长。围绕这四个目标后面所有技术点都会展开。2. 基础概念从换脸到持续全身生成2.1 Deepfake 的边界在扩大传统意义上的 Deepfake深度伪造通常指人脸替换face swap和人脸重演face reenactment。人脸替换是把目标视频中的人脸换成另一张脸人脸重演则是保留目标人脸但让表情、口型和姿态跟随驱动源变化。到了持续全身生成阶段任务边界已经完全不同输入不再是“一张脸 一个视频”而是“一段音频或动作序列 一个身份描述”输出不再是“替换后的视频”而是“一个从头到尾都由模型生成的虚拟人视频”难度重心从“空间上的相似”变成了“时间上的一致”。换句话说以前是“换”现在是“造”。深度伪造这个词在学术语境里正逐渐被“可控数字人生成”“人像视频合成”等中性术语替代但底层技术仍然一脉相承。2.2 什么是“持续性”生成持续性生成核心是在一个无限长的视频流中维持对外观appearance和身份identity的约束。做一个直观类比单帧生成像是拍一张照片持续生成像是拍一部电影。拍照片时只要构图好、光线好就行拍电影时演员的妆不能花衣服不能穿帮脸不能一会儿像这个人一会儿像那个人。导演要不停提醒演员“保持状态”这个“状态”在生成模型里就是身份编码和外观标记。在技术层面持续性体现在三个方面维度具体表现常见失败身份一致性面部特征、体态特征在时序上稳定换脸后脸型漂移瞳孔颜色变化外观一致性衣服纹理、发型、环境光照不闪烁服装纹理每帧重采样出现波纹动作一致性关节运动平滑物理合理手臂交叉时穿模走路时滑步2.3 需要与容易混淆的概念区分持续全身生成和人脸重演、视频修复、神经渲染这几个方向有重叠但目标不同人脸重演只保证脸部表情对齐不关心身体视频修复video inpainting是把缺失区域补全不改变身份神经渲染NeRF、3D Gaussian Splatting更强调多视角一致性但不一定需要长时间序列运动持续全身生成强调的则是“身份、外观、动作在同一时间轴上稳定推进”。你可以把持续全身生成看作上述能力的集合体它需要人脸重演的口型能力、神经渲染的视角一致性能力、视频修复的时间连续性能力。3. 技术架构一张持续全身生成模型的完整蓝图从工程角度看一个持续全身生成系统通常由五个模块组成。看到这个结构你就能明白为什么它比传统换脸复杂得多。3.1 身份编码模块身份编码模块负责把“这个人长什么样”压缩成一组向量。常见做法是用一个预训练的人脸识别模型如 ArcFace、CosFace提取身份嵌入再把它作为条件送入生成器。但全身生成不能只看脸。体型、腿长、肩宽这些身体属性同样重要。所以现代方法会把“身份向量”扩展为“人体外观标记”包括人脸身份嵌入人体分割图的纹理编码衣服颜色和纹理的统计特征。3.2 姿态驱动模块姿态驱动模块解决“这个人怎么动”。主流做法是用姿态估计模型比如 OpenPose、MediaPipe BlazePose、DWPose从驱动视频中提取 2D 骨架关键点或 3D 参数化人体模型SMPL、SMPL-X。SMPL 是一个参数化人体模型它把人体姿态和体型压缩成一组参数渲染时可以用可微渲染器转成 2D 骨架或稠密图。这里有一个容易踩坑的点2D 骨架只包含关节位置不包含骨骼朝向容易出现前后方向歧义左右手混淆。3D 参数模型更稳定但提取成本更高而且对遮挡敏感。实际项目中很多人选择“2D 关键点 平滑后处理”的方式先跑通流程再逐步迁移到 SMPL 参数化方案。3.3 时间记忆模块时间记忆模块是 “perpetual” 的关键。它负责把前面 10 帧、50 帧甚至 500 帧的身份和外观信息传递到当前帧。常见设计包括光流引导的特征对齐自注意力机制temporal self-attention让当前帧注意到历史帧缓存机制把历史的外观特征保存到队列中逐步更新。这里最容易出现的问题是“长程遗忘”。模型如果只看到最近 5 帧那么面对 20 秒的视频前面出现的服装细节会被逐渐遗忘导致最终生成的角色和初始状态不一致。解决办法是引入长期外观库定期提取代表性帧的特征写入缓存生成当前帧时同时读取短期特征和长期特征。3.4 生成器与渲染模块生成器负责把“身份 姿态 历史特征”合成最终图像。目前主流有两条路线基于 GAN使用 StyleGAN 或类 StyleGAN 结构优点是单帧画质高推理速度快基于扩散模型使用 Latent Diffusion 等结构优点是纹理细节更真实但逐帧采样慢时间一致性更难控制。还有一个更底层的问题是“用 2D CNN 逐帧生成还是用 3D 网络一次生成一段视频”。逐帧生成灵活性强但时间一致性需要额外机制分段生成能天然建模时间关系但显存消耗大且视频段之间有接缝。现阶段工程上更多的方案是“逐帧生成为主 时间注意力模块做一致性对齐”。3.5 音频驱动模块可选如果目标是“让虚拟人说指定内容”还需要音频到口型的模块。它接收音频特征如梅尔频谱或 wav2vec 特征输出口型关键点或密集运动图。这个模块和姿态驱动模块可以共用同一个生成器的时间注意力机制。4. 数据与预处理全身生成的质量起点数据质量直接决定生成效果上限。很多人一开始把时间花在调模型结构上结果发现效果不行再看数据发现着装混乱、人脸模糊、姿态估计错位。下面按优先级梳理。4.1 视频数据要求分辨率不低于 720p人脸区域尽量清晰每个人至少 3 到 5 分钟连续视频且包含转身、行走、说话、手势等动作服装、发型、场景尽量统一减少外观漂移的干扰因素光照保持稳定避免强逆光和频闪。4.2 预处理管线标准管线包括用目标检测模型如 YOLO做人形裁剪用姿态估计模型提取关键点或 SMPL 参数做人脸检测和人脸关键点对齐对视频做分帧保存为图像序列和对应姿态序列用视频内容分析工具做质量过滤去掉模糊帧、动作突变帧。下面给出一个使用 Python 和常见工具库实现预处理的小示例。这里的代码是工程参考运行前需要按实际环境调整路径和模型文件。# 文件路径preprocess_pipeline.py import cv2 import numpy as np def extract_frames(video_path, out_dir, interval1): 从视频中抽帧每 interval 帧取一帧。 cap cv2.VideoCapture(video_path) frame_idx 0 saved_idx 0 while True: success, frame cap.read() if not success: break if frame_idx % interval 0: out_path f{out_dir}/frame_{saved_idx:06d}.jpg cv2.imwrite(out_path, frame) saved_idx 1 frame_idx 1 cap.release() print(f提取完成共保存 {saved_idx} 帧) def quality_filter(frame): 简单质量过滤拉普拉斯方差低于阈值就丢弃认为图像模糊。 gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) laplacian_var cv2.Laplacian(gray, cv2.CV_64F).var() return laplacian_var 50.0 if __name__ __main__: extract_frames(input.mp4, ./frames, interval2)这个脚本展示的是最朴素的抽帧流程。真实项目中抽帧之后还要再接姿态估计和人体分割把每帧对应的姿态文件、分割文件存放在统一目录结构下dataset/ subject_01/ frames/ poses/ segs/ metadata.json4.3 姿态数据格式姿态数据通常保存为 JSON 或 NPZ 格式。以 2D 关键点为例每帧是一个[17, 3]的数组代表 17 个关键点的 x、y 坐标和置信度以 SMPL 参数为例每帧包含姿态参数[24, 3]、体型参数[10]和全局朝向参数[3]。需要注意的是姿态提取模型对遮挡和快速运动非常敏感。如果原始视频存在频繁遮挡建议先用插值算法对关键点序列做平滑否则生成结果会出现抖动。5. 核心模型实现一个可参考的时间一致生成框架下面给出一个简化但完整的 PyTorch 风格实现用于演示“身份编码 姿态条件 时间注意力 图像解码”是怎么组织起来的。这个示例不是任何现成论文的源码复现而是一个工程参考骨架帮助理解模块之间的数据流。# 文件路径perpetual_avatar_model.py import torch import torch.nn as nn class IdentityEncoder(nn.Module): 身份编码器从参考图中提取身份向量。 实际项目中可换成 ArcFace 等预训练模型。 def __init__(self, embed_dim512): super().__init__() self.backbone nn.Sequential( nn.Conv2d(3, 64, 3, 2, 1), nn.ReLU(), nn.Conv2d(64, 128, 3, 2, 1), nn.ReLU(), nn.Conv2d(128, 256, 3, 2, 1), nn.ReLU(), nn.AdaptiveAvgPool2d((1, 1)) ) self.fc nn.Linear(256, embed_dim) def forward(self, ref_image: torch.Tensor) - torch.Tensor: feat self.backbone(ref_image) return self.fc(feat.flatten(1)) class PoseEncoder(nn.Module): 姿态编码器把姿态关键点图编码为运动条件。 输入形状: [B, C, H, W]C 是关键点热图通道数。 def __init__(self, in_channels17, out_channels256): super().__init__() self.net nn.Sequential( nn.Conv2d(in_channels, 64, 3, 1, 1), nn.ReLU(), nn.Conv2d(64, 128, 4, 2, 1), nn.ReLU(), nn.Conv2d(128, out_channels, 4, 2, 1), nn.ReLU() ) def forward(self, pose_heatmap: torch.Tensor) - torch.Tensor: return self.net(pose_heatmap) class TemporalAttention(nn.Module): 时间注意力让当前帧的特征从历史帧中聚合信息。 使用一个简单队列缓存最近 N 帧特征。 def __init__(self, feat_dim256, num_heads4): super().__init__() self.attn nn.MultiheadAttention(feat_dim, num_heads, batch_firstTrue) self.feat_dim feat_dim def forward(self, current_feat: torch.Tensor, history_feats: list): current_feat: [B, C, H, W]需要先展平 history_feats: list of [B, C, H, W] B, C, H, W current_feat.shape cur current_feat.flatten(2).permute(0, 2, 1) # [B, L, C] if len(history_feats) 0: hist torch.stack(history_feats[-8:], dim0) # 取最近 8 帧 hist hist.flatten(2).permute(0, 2, 1) # [B, L, C] fused, _ self.attn(cur, hist, hist) else: fused cur return fused.permute(0, 2, 1).reshape(B, C, H, W) class Generator(nn.Module): 简单生成器把身份特征和姿态特征解码为图像。 生产级实现应换成基于 StyleGAN 或扩散模型的生成器。 def __init__(self, latent_dim512, img_size256): super().__init__() self.init_ch 64 self.deconv nn.Sequential( nn.ConvTranspose2d(latent_dim, 256, 4, 1, 0), nn.ReLU(), nn.ConvTranspose2d(256, 128, 4, 2, 1), nn.ReLU(), nn.ConvTranspose2d(128, 64, 4, 2, 1), nn.ReLU(), nn.ConvTranspose2d(64, 32, 4, 2, 1), nn.ReLU(), nn.ConvTranspose2d(32, 3, 4, 2, 1), nn.Tanh() ) def forward(self, fused_feat: torch.Tensor) - torch.Tensor: return self.deconv(fused_feat) class PerpetualAvatar(nn.Module): def __init__(self): super().__init__() self.id_encoder IdentityEncoder() self.pose_encoder PoseEncoder() self.temporal_attn TemporalAttention() self.generator Generator() self.history [] def forward(self, ref_image, pose_heatmap): id_feat self.id_encoder(ref_image) # [B, 512] pose_feat self.pose_encoder(pose_heatmap) # [B, 256, H, W] B, C, H, W pose_feat.shape id_feat_broadcast id_feat.view(B, -1, 1, 1).expand(B, 512, H, W) cond torch.cat([pose_feat, id_feat_broadcast], dim1) # [B, 768, H, W] # 这里需要把 cond 投影到 256 维简化起见直接取 pose 部分 fused self.temporal_attn(pose_feat, self.history) self.history.append(fused.detach()) if len(self.history) 20: self.history.pop(0) return self.generator(cond)代码里的TemporalAttention模块体现了持续生成的核心思路当前帧生成时不只看当前姿态还参考了历史帧的特征。历史队列保存了最近若干帧的输出特征让模型能感知到之前生成的人物外观和纹理从而减少闪烁。如果在推理阶段发现长视频后期身份漂移可以把history的最大长度调大或把历史帧的间隔变为“每 5 帧存一帧”用更大时间跨度的参考来维持长期一致性。6. 训练与推理的工程实践6.1 训练策略持续全身生成模型的训练目标是多样的常见损失包括像素重建损失L1 Loss让生成帧逼近真实帧感知损失Perceptual Loss用 VGG 网络特征约束图像语义相似身份损失Identity Loss用预训练人脸识别模型提取身份向量约束生成图像身份不漂移对抗损失Adversarial Loss让判别器无法区分生成帧和真实帧时间一致性损失Temporal Consistency Loss计算相邻帧光流约束对应像素一致。这五个损失不是一次性全用上。推荐的训练节奏是先跑通重建损失再逐步叠加感知损失、身份损失、对抗损失最后加入时间一致性损失。如果一上来就用全部损失模型往往训不稳损失曲线剧烈震荡。下面给出一个训练损失组合的示例片段便于理解各损失如何组织。# 文件路径train_loss.py import torch import torch.nn.functional as F def compute_loss(pred_img, target_img, pred_id, ref_id, flow_warped, alpha0.8): # 1. 像素重建损失 l1 F.l1_loss(pred_img, target_img) # 2. 身份损失约束身份特征相似 identity_loss 1 - F.cosine_similarity(pred_id, ref_id).mean() # 3. 时间一致性损失当前帧应与光流变形后的前一帧一致 temporal_loss F.l1_loss(pred_img * flow_warped_mask, flow_warped * flow_warped_mask) total l1 0.1 * identity_loss alpha * temporal_loss return total这个片段里flow_warped_mask是可选的掩码用于排除遮挡区域。实际训练中时间一致性损失不宜设置过高否则模型会为了帧间平稳而牺牲画质导致生成的图像像蒙了一层雾。6.2 推理与加速推理阶段的核心矛盾是质量和速度。逐帧生成只要保证每帧 30ms 以内就能做到接近实时。但时间注意力模块引入的历史依赖会让推理无法并行出现“必须生成完第 99 帧才能生成第 100 帧”的问题。工业界常用的优化方案包括使用 TensorRT 或 ONNX Runtime 加速生成器把时间注意力模块换成更轻量的因果卷积或循环网络对历史特征做低秩压缩减少内存占用生成低分辨率视频帧再通过超分模型提升画质。这里特别提醒帧间平滑不等于时间一致。有些项目为了省事直接对生成视频做后处理平滑滤波结果动作是顺了但纹理更加模糊。时间一致性必须放在模型里解决后处理只能做辅助。7. 效果评测与验证方法持续全身生成不能只靠“肉眼看看”。主观评价受观察者的注意力影响很大必须搭配自动指标。7.1 常用自动指标指标用途说明FID衡量生成图像分布与真实图像分布的距离越低越好但只看单帧不反映时间稳定性LPIPS衡量感知相似度越低越好用于单帧重建质量CSIM身份一致性提取人脸身份向量算余弦相似度越高越稳Warp Error时间一致性计算相邻帧的光流匹配误差越低越稳FVD视频感知距离在视频级别评估生成质量需要视频特征提取器如果你做一个持续生成模型但没有报这些指标审稿人或项目评审很可能会质疑。建议至少报告 FID、CSIM 和 Warp Error 三个指标。7.2 长视频压力测试“Perpetual” 的关键是长时间稳定。评测时不能只测 5 秒短片段至少要做 30 秒以上的生成。推荐按时间分段统计指标第 0 到 5 秒的平均 CSIM第 25 到 30 秒的平均 CSIM对比两段指标如果显著下降说明身份漂移严重。还可以做“外观驻留测试”让动作保持静止 10 秒看生成帧的服装纹理是否会变化。这一步能快速暴露时间记忆模块是否失效。7.3 人工评价维度自动指标不能覆盖所有问题建议设计人工评价问卷维度包括身份相似度动作自然度口型同步度纹理稳定性整体违和感。人工评价时要注意评价者必须先看原始驱动视频再看生成视频否则很难判断动作是否自然。8. 常见问题与排查思路持续全身生成在实战中问题很多下面按频率从高到低列出最常见的 8 类问题。问题现象可能原因排查方式解决方案人脸到中后期开始不像本人身份损失权重过低或时间记忆丢失检查 CSIM 的分段时间曲线提高身份损失权重增大历史队列长度衣服纹理闪烁外观特征没有被时间模块利用观察单帧外观是否稳定加入长期外观缓存引入 temporal loss动作抖动姿态序列不平滑检查输入关键点序列的帧间变化对关键点做高斯平滑或 Kalman 滤波手部扭曲严重原图分辨率低、手部关键点丢失查看姿态可视化图提升训练数据分辨率加入手部关键点分支口型和音频对不上音频模块和姿态模块没有联合训练分开检查口型模块输出使用联合训练或加入唇同步判别器长视频出现场景跳变视频原始场景本身变化大检查输入视频是否存在剪辑固定拍摄场景或增加场景 token推理速度慢时间注意力复杂度高监控显存和耗时改用因果卷积降低历史长度训练损失震荡多个损失权重失衡观察各损失曲线从单一重建损失开始逐步加权重这里值得强调的是很多人遇到人脸漂移第一反应是“换一个更大的身份编码器”但真正的问题往往在时间维度。身份编码器只负责把参考图变成向量如果这个向量没有在生成时持续参与约束换更大的编码器也没用。9. 安全边界与合规使用写 deepfake 相关技术绕不开安全。这里必须把话说清楚模型本身是工具用它做正向的数字人、虚拟演员、历史人物重建还是做有害的虚假视频区别在于使用意图和边界。技术上的风险防控可以从几个层面设计。第一是数据授权。训练和推理使用的所有人物肖像视频都应获得当事人书面授权。这是底线不能含糊。尤其是商用场景缺少授权会直接带来法律纠纷。第二是生成侧水印。模型在输出视频时可以嵌入肉眼不可见的水印或叠加半透明水印。一旦视频被恶意传播水印能提供溯源能力。第三是检测侧对抗。做生成模型的同时可以训练一个检测器对生成视频的内容做主动判别。从工程角度检测器不能只检测单帧也要检测时间维度上的异常模式比如眨眼频率异常、光影变化不自然、生物信号缺失等。下面给出一个检测器推理的最小示例用于说明“检测端也是 deepfake 治理的一部分”。# 文件路径frame_anomaly_detect.py import torch import torch.nn as nn class FakeDetector(nn.Module): 简单的时空伪造检测器输入连续 8 帧输出是否为生成视频。 def __init__(self): super().__init__() self.conv3d nn.Sequential( nn.Conv3d(3, 32, kernel_size(3, 5, 5), padding(1, 2, 2)), nn.ReLU(), nn.MaxPool3d(kernel_size(2, 2, 2)), nn.Conv3d(32, 64, kernel_size(3, 5, 5), padding(1, 2, 2)), nn.ReLU(), ) self.classifier nn.Sequential( nn.AdaptiveAvgPool3d((1, 1, 1)), nn.Flatten(), nn.Linear(64, 2) ) def forward(self, x): # x: [B, T, C, H, W]需要转成 [B, C, T, H, W] x x.permute(0, 2, 1, 3, 4) feat self.conv3d(x) return self.classifier(feat)这类检测器需要投喂“真实视频片段 生成视频片段”的成对数据。训练时要特别关注生成器更新后的新样本否则检测器会很快失效。实际部署中检测产品通常由“帧级检测 视频级时序聚合 人工审核”三层组成。10. 工程最佳实践与团队协作建议如果你要在团队里落地一个持续全身生成项目下面几条建议可以少走弯路。第一把“时间一致性”当成一等公民而不是最后修补的 bug。项目排期时就要在模型结构里预留时间注意力或历史缓存模块。等视频做出来发现闪烁再回头改架构成本远高于一开始设计。第二统一数据管线。让数据组、算法组、测试组使用同一份预处理代码和同一套目录规范。很多团队的数据和模型是割裂的数据组清洗了数据算法组又自己抽了一版最后两边效果对不上。建议用配置文件管理数据路径和预处理参数而不是在代码里写死。第三建立自动化评测流水线。每次模型迭代都自动计算 FID、CSIM、Warp Error 等指标并保存生成样例。不要靠“这次好像效果好一些”来判断模型好坏。评测样例要固定否则无法横向对比。第四控制模型的“自由度”。训练时如果发现模型过拟合到训练视频的某个固定姿势可以先减小生成器的容量或加入姿态随机增强。持续生成模型的自由度很高不加约束很容易“放飞自我”生成一些动作幅度夸张且不真实的画面。第五版本管理与回滚。模型训练到一半发现数据问题不要急着从头训练先修正数据然后加载最近一个可用的 checkpoint在前几个 epoch 用小学习率微调。这样能快速恢复训练进度避免浪费算力。11. 总结与后续学习方向持续全身 deepfake 生成技术表面上看是图像生成问题本质上是跨模态、跨时间的序列建模问题。把身份、语音、姿态、外观这四类条件放在同一条时间轴上让它们在整个视频周期内保持稳定这比提升单帧 PSNR 困难得多。如果只关注“脸部像不像”很容易忽略掉全身一致性和长期漂移这些更大的挑战。如果你想深入这个方向下一步可以优先关注三个方向第一3D/4D 人体表示。SMPL-X 与 3D Gaussian Splatting 的结合能大幅改善全身视角变化时的渲染一致性。未来的持续生成很可能不再以 2D 图像格为唯一输出而是直接输出可交互的 3D 表示。第二扩散模型在视频生成中的长期一致性。当前视频扩散模型的时间模块通常只覆盖几秒如何扩展到分钟级仍是开放问题。带因果掩码的时间注意力、状态空间模型、并行推理策略是值得关注的思路。第三实时检测与溯源技术。生成能力越强治理能力也要跟着强。研究如何从生成模型的内部特征中提取不可去除的指纹会成为安全和合规领域的重要方向。到这里你应该已经理解持续全身生成的技术框架与工程落点。建议在自己项目里先跑通一个“单帧生成 时间记忆”的最小系统观察长视频的失败模式再逐步替换更强的生成器。这个领域的问题非常直观效果好不好放一段 30 秒视频就知道。
返回列表