Deepfake

核心概念:Deepfake 是深度学习在图像/视频合成领域的"阴暗面",利用生成模型可以伪造出极为逼真的人脸图像和视频。技术本身没有善恶,关键在于如何使用。本章同时介绍生成技术和检测技术。

Deepfake Generation

Deepfake 生成技术利用深度学习模型合成逼真的人脸图像或视频。

👤 换脸技术动画演示
👨
→ Deepfake →
🎭
=>
🎭

源人脸 + 目标面部特征 = 合成换脸视频

🤖 GAN 生成过程动画
Generator
👤
Discriminator 👁️

生成器不断尝试生成 → 判别器判断真伪 → 对抗训练

生成技术分类

Entire Face Synthesis (全脸合成)

从零开始生成一张不存在的人脸,或根据描述生成特定人脸。

# StyleGAN 生成人脸示例(伪代码)
latent = torch.randn(1, 512)  # 潜在编码
img = generator(latent)  # 生成 1024x1024 人脸

# 通过潜在空间操作修改属性
# 如:年龄、笑容、发型等
img = generator(latent + age_offset)

Attribute Manipulation (属性操控)

修改图像中人物的面部属性。

Facial Reenactment (面部重演)

用一个人的面部表情驱动另一个人的脸部表情。

Speaking Manipulation (说话操控)

让目标人物说出指定的内容,主要需要对口型。

# Wav2Lip 说话视频生成
# 输入:人脸图像 + 语音 → 输出:说话视频
model = Wav2Lip()
video = model.generate(face_image, audio)

Face Swap (换脸)

将源人脸替换到目标视频中。

Deepfake Detection

Deepfake 检测是识别图像或视频是否被伪造的技术。

🔍 Deepfake 检测动画演示
真实图像
伪造检测

检测器识别伪造痕迹 → 输出真/假判断

为什么重要:随着生成技术普及,难辨真假的假视频可能充斥互联网,引发信任危机。检测技术是数字时代的"鉴伪"能力。

常用数据集

数据集 描述 特点
FaceForensics++ 经典假脸数据集 多种压缩质量、多方法
DFDC Deepfake检测挑战赛 大规模、多样化
Celeb-DF 名人人脸数据集 高画质、多个方法
WildDeepfake 真实场景数据 更接近实际应用

Image-based Deepfake Detection (图像检测)

针对单张图像的真假判断。

# 图像 deepfake 检测示例
class DeepfakeDetector(nn.Module):
    def __init__(self):
        super().__init__()
        self.backbone = EfficientNet()
        self.head = nn.Linear(1280, 2)  # 真/假
    
    def forward(self, x):
        features = self.backbone(x)
        return self.head(features)

# 训练
model = DeepfakeDetector()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters())

Image-based Deepfake Segmentation (篡改区域分割)

不仅判断真假,还定位被篡改的区域。

Video-based Deepfake Detection (视频检测)

利用视频的时间信息进行检测。

# 视频 deepfake 检测示例
class VideoDeepfakeDetector(nn.Module):
    def __init__(self):
        super().__init__()
        self.spatial = EfficientNet()  # 空间特征
        self.temporal = nn.LSTM(1280, 256, batch_first=True)  # 时序特征
        self.classifier = nn.Linear(256, 2)
    
    def forward(self, x):
        # x: (batch, frames, channels, h, w)
        batch, frames = x.shape[:2]
        features = self.spatial(x.view(-1, *x.shape[2:]))
        features = features.view(batch, frames, -1)
        
        _, (h, _) = self.temporal(features)
        return self.classifier(h.squeeze(0))

Generalizability (泛化性)

泛化性是检测器在实际应用中的核心挑战。

防御策略建议

📚 本章复习要点