赞
踩
比赛链接:kaggle
内存概述(由 chatgpt-4o 翻译):
随着人工智能领域技术的快速发展,深度伪造技术已经成为一把双刃剑。它不仅创造了大量的AI生成内容,还对数字安全提出了前所未有的挑战。Inclusion・全球多媒体深度伪造挑战赛旨在邀请参赛者开发、测试并进一步改进应对各种真实场景中深度伪造攻击的更准确、有效和创新的检测模型,同时激励创新的防御策略并提高深度伪造识别的准确性。
Deepfake是一种使用人工智能技术生成的伪造媒体,特别是视频和音频,它们看起来或听起来非常真实,但实际上是由计算机生成的。这种技术通常涉及到深度学习算法,特别是生成对抗网络(GANs),它们能够学习真实数据的特征,并生成新的、逼真的数据。
Deepfake技术虽然在多个领域展现出其创新潜力,但其滥用也带来了一系列严重的危害。在政治领域,Deepfake可能被用来制造假新闻或操纵舆论,影响选举结果和政治稳定。经济上,它可能破坏企业形象,引发市场恐慌,甚至操纵股市。法律体系也面临挑战,因为伪造的证据可能误导司法判断。此外,深度伪造技术还可能加剧身份盗窃的风险,成为恐怖分子的新工具,煽动暴力和社会动荡,威胁国家安全。
深度伪造技术通常可以分为四个主流研究方向:
以下是由deepfake生成的一个图片:
使用了deepfake技术成功将一个人脸移植到了另一个的人脸上。
对于一个图片,如果存在假冒的情况,则一定存在以下的几种可能的情况
该图片来源于kaggle所给的训练集的图片。
该图片来源于kaggle所给的训练集的图片。
头发的光源方向与背影不一样
该图片来源于kaggle所给的训练集的图片。
从该图片中箭头所指的背景就可以看到,该图片大概率是模型生成的。(模型生成的图片对背景处理的不好,很可能生成网络状的背景)
该图片来源于kaggle所给的训练集的图片。
可以从该图片中看到,模型有的地方特别清晰,而有的地方特别模糊。
该图片来源于kaggle所给的训练集的图片。
有如此的皱纹,但是头发的发型与发质都说明该人很年轻,这很矛盾。
import timm
model = timm.create_model('resnet18', pretrained=True, num_classes=2)
model = model.cuda()
在pytorch中,可以使用timm库来加载一些经典的网络,比如如上使用的预训练的resnet18
。
resnet18
是残差神经网络的一种,对于普通的网络,存在以下的问题:
梯度消失或梯度爆炸
退化问题(degradation problem)
而解决梯度问题的一般方式是:
解决退化问题的一般方式是通过残差结构。而使用了残差结构的网络就是残差神经网络。
残差神经网络可以训练超过1000层的而不存在退化的问题,其对于一个基本的残差块,其结构如下:
预训练是指别人已经使用一个模型训练出了一套权重。而通过在别人预训练好的模型上再次训练自己的数据样本,即可实现迁移学习
迁移学习有以下的优点:
使用 torch.utils.data.DataLoader(dataset, batch_size, shuffle, ..)
来加载一个数据
参数:
Dataset
的子类实例。此外,在制作数据集时,可以使用transforms.Compose()
将多个变换连接在一起。从而实现数据的预处理,这也叫数据增强。数据增强是一种在机器学习和深度学习中提升模型性能的重要技术。它通过应用一系列随机变换来增加训练数据的多样性,从而提高模型的泛化能力。增加数据多样性是数据增强的核心目的。通过对原始图像进行如旋转、缩放、翻转等操作,可以生成新的训练样本,使模型学习到更丰富的特征表示。
可以使用的变换有:
transforms.ToTensor()
:将 PIL 图像或 numpy 数组转换为 PyTorch 的张量(Tensor)。同时,还会将图像的像素值自动的映射到 [0, 1]
。torchvision
数据集输出的范围为 [0, 1]
之间的 PILImage
。transforms.Normalize(mean, std)
:用于对图像数据进行标准化处理。标准化的目的是使每个通道的像素值具有零均值和单位标准差,这有助于加快模型训练速度和提高模型的收敛性。
transforms.CenterCrop(x)
:从输入图像的中心裁剪出一个指定大小的图像。这样可以简化数据处理并使得网络架构的一些操作可以正确运行。transforms.RandomCrop(x, padding = y)
:先对图像填充 y,再对图像进行随机裁剪,裁剪后的大小为 x * x
。transforms.RandomHorizontalFlip()
: 对图像进行随机水平翻转transforms.Resize(x)
:保持图片的长宽比不动,将最小边长缩放到 x常用的训练框架如下:
# 训练函数 def train(model): # 设置训练10轮 epochs = 10 # 将模型设置为训练模式,因为有些层在不同模式下的表现不同 model.train() # 主里从train_loader里,64个样本一个batch为单位提取样本进行训练 for epoch in range(epochs): for batch_idx, (data, target) in enumerate(train_loader): # 把数据送到GPU中 data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) # 计算损失。如果模型不是将log_softmax作为分类器,则可以使用其他的损失函数 loss = F.nll_loss(output, target) # 进行反向传播,计算梯度。 loss.backward() # 使用优化器(如 SGD)更新模型参数。 optimizer.step() # 输出参数 # ....
模型在评估时,要设置成评估模式,当模型设置为评估模式时,会禁用 dropout 层等。
常见的测试架构如下:
def test(model):
# 将模型设置为评估模式,此时会禁用dropout层
model.eval()
correct = 0
total = 0
for data in testloader:
images, labels = data
images, labels = images.to(device), labels.to(device)
outputs = net(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。