0


Datawhale AI 夏令营2024·第二期(Deepfake攻防挑战赛-图像赛道)Task01

系列文章目录

Datawhale AI 夏令营2024·第二期(Deepfake攻防挑战赛-图像赛道)Task02
Datawhale AI 夏令营2024·第二期(Deepfake攻防挑战赛-图像赛道)Task03


文章目录


前言

这次的Datawhale AI夏令营第二期开营了,选的是CV相关的内容,是基于kaggle上的一个任务。

蚂蚁集团举办的“外滩大会-全球Deepfake攻防挑战赛”

赛题背景:随着人工智能领域技术的快速发展,deepfake技术已经成为一把双刃剑。它不仅创造了大量的人工智能生成内容,也对数字安全提出了前所未有的挑战。这次的"Inclusion・The Global Multimedia Deepfake Detection"全球多媒体深度伪造挑战赛旨在开发、测试并进一步发展更准确、有效和创新的检测模型,以应对真实场景中的各种类型的深度伪造攻击,并激励创新防御策略,提高深度伪造识别准确率。


一、赛题理解

比赛根据赛方发布的两个数据集设置了两个不同的Task,Task1是确定人脸图像是否为Deepfake图像,并输出其为Deepfake图像的概率分数。Task2是确定包含人脸的视频(带音频)是否是Deepfake视频,并输出它是假的概率。我选的是Task1。

针对Task1,我要做的就是针对一张给定的人脸图像,判断他是真实的还是伪造的。确实和之前接触的一些内容不太一样,哈哈。比一般的人脸识别,人脸检测还是要复杂的我感觉。

下面给两张图吧😊。

这是从训练集里扒的两张图,小伙伴很容易就能看出来左边的是更像真人一点,右半边的就有点假了,数据集里还有很多假得恐怖的图片,这个算好一点的了。😭😭😭

二、数据集理解

这次的任务是一个图像的二分类任务,在给出的标准中,label=1 表示Deepfake图像,label=0 表示真实人脸图像。


在赛方给出的trainset_label.txt中,内容如下。前面是图片名称,后面是标签,一个文件,有点类似于COCO格式的annotation.json标签,不过格式是txt。
img_nametarget3381ccbc4df9e7778b720d53a2987014.jpg163fee8a89581307c0b4fd05a48e0ff79.jpg07eb4553a58ab5a05ba59b40725c903fd.jpg0
这次的训练集有524429张图片,验证集有147363张图片,数据量非常大。而在训练集中,伪造图片的数量有425043张,真实人脸图像只有99386张,在验证集中,伪造图片有88281张,真实图片有59082张。可见,总体上来说,还是伪造图片更多些。

三、规则理解

⭐⭐⭐

  • 仅允许提交单个模型,有效网络参数不得超过200M(使用thop工具统计模型参数)参数量的限制还是蛮宽松的,200M的上限已经很高了
  • 为公平比较算法性能,本次比赛不允许使用任何额外的数据集,仅允许使用ImageNet1K训练预模型。应该timm里面的好多预训练模型都可以用
  • 基于发布的训练集生成的扩展样本(通过数据增强/Deepfake工具)可以用于训练,但这些工具需在第三阶段提交以供重现。数据增强的工具和记录要保留好
  • 验证结果每天限提交5次。测试结果每天限提交2次。(现在应该是只有验证结果),测试集开放要到8月15日了,这样的话就是每天限制提交5次结果

⭐⭐⭐

模型理解

1.导入模型

ResNet18

import timm
model = timm.create_model('resnet18', pretrained=True, num_classes=2)
model = model.cuda()

可以看到的是,赛方给出的模型还是基础的ResNet18的预训练模型。结合赛方给出的只允许使用ImageNet1K预训练模型,我感觉是不是条件还是很宽松的,应该是允许使用timm的预训练模型进行一些操作的,比如模型融合和模型迁移。

2.训练数据

这次Kaggle上提供的GPU资源是P100,初始的设置是只有最前1000条数据,batch_size是40,只训练2轮,时间大概在4分钟。最后的测试评估结果在0.5左右,非常低,基本无效(评估指标为AUC)。弱弱地看了下榜上第一的大神,已经0.9999+了😂😂😂

相关代码如下

train_loader = torch.utils.data.DataLoader(
    FFDIDataset(train_label['path'].head(1000), train_label['target'].head(1000), 
            transforms.Compose([
                        transforms.Resize((256,256)),
                        transforms.RandomHorizontalFlip(),
                        transforms.RandomVerticalFlip(),
                        transforms.ToTensor(),
                        transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])])), batch_size=40, shuffle=True, num_workers=4, pin_memory=True)

val_loader = torch.utils.data.DataLoader(
    FFDIDataset(val_label['path'].head(1000), val_label['target'].head(1000), 
            transforms.Compose([
                        transforms.Resize((256,256)),
                        transforms.ToTensor(),
                        transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])])), batch_size=40, shuffle=False, num_workers=4, pin_memory=True)

criterion = nn.CrossEntropyLoss().cuda()
optimizer = torch.optim.Adam(model.parameters(),0.005)
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=4, gamma=0.85)
best_acc =0.0for epoch inrange(2):
    scheduler.step()print('Epoch: ', epoch)

    train(train_loader, model, criterion, optimizer, epoch)
    val_acc = validate(val_loader, model, criterion)if val_acc.avg.item()> best_acc:
        best_acc =round(val_acc.avg.item(),2)
        torch.save(model.state_dict(),f'./model_{best_acc}.pt')

3.评估指标

Acc

关于本次任务的评估指标,Kaggle是使用AUC进行测试给出分数的。这里有一点需要注意,在赛方提供的训练代码中,使用的评估指标是Acc,来进行验证并输出最后的submit.csv的,二者不太一样。

      T 
     
    
      P 
     
    
      : 
     
    
      真正例,表示正类预测为正类 
     
     
    
      F 
     
    
      P 
     
    
      : 
     
    
      假正例,表示负类预测为正类 
     
     
    
      F 
     
    
      N 
     
    
      : 
     
    
      假反例,表示正类预测为负类 
     
     
    
      T 
     
    
      N 
     
    
      : 
     
    
      真反例,表示负类预测为负类 
     
    
   
     TP:真正例,表示正类预测为正类\\FP:假正例,表示负类预测为正类\\FN:假反例,表示正类预测为负类\\TN:真反例,表示负类预测为负类 
    
   
 TP:真正例,表示正类预测为正类FP:假正例,表示负类预测为正类FN:假反例,表示正类预测为负类TN:真反例,表示负类预测为负类

Acc的计算公式

      A 
     
    
      c 
     
    
      c 
     
    
      = 
     
     
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        T 
       
      
        N 
       
      
      
      
        T 
       
      
        P 
       
      
        + 
       
      
        T 
       
      
        N 
       
      
        + 
       
      
        F 
       
      
        P 
       
      
        + 
       
      
        F 
       
      
        N 
       
      
     
    
   
     Acc=\frac{TP+TN}{TP+TN+FP+FN} 
    
   
 Acc=TP+TN+FP+FNTP+TN​

其含义就是预测正确的占所有样本数的比值。

AUC

关于AUC,其含义大致如下:

随机采样一对样本(一个正样本,一个负样本),模型将正类预测为正类的概率大于将负类预测为正类的概率。

比如

     A 
    
   
     U 
    
   
     C 
    
   
     = 
    
   
     0.8 
    
   
  
    AUC=0.8 
   
  
AUC=0.8,其含义就表示,随机采样一个正样本和一个负样本,在80%的情况下,模型将正类预测为正类的概率大于将负类预测为正类的概率。同时,可以看到 
 
  
   
   
     A 
    
   
     U 
    
   
     C 
    
   
  
    AUC 
   
  
AUC关心的是正负样本之间得分的相对高低,而不是绝对分值的大小。

此外,

     A 
    
   
     U 
    
   
     C 
    
   
     = 
    
   
     0.5 
    
   
  
    AUC=0.5 
   
  
AUC=0.5是模型的最低限度,此时模型会随机将一个样本分为正类或者负类,最终使得样本的正负类分布各占50%。 
 
  
   
   
     A 
    
   
     U 
    
   
     C 
    
   
     = 
    
   
     1 
    
   
  
    AUC=1 
   
  
AUC=1是模型的最高上限。

AUC的计算公式

      A 
     
    
      U 
     
    
      C 
     
    
      = 
     
     
      
      
        ∑ 
       
       
       
         I 
        
       
         ( 
        
        
        
          p 
         
         
         
           p 
          
         
           o 
          
         
           s 
          
         
        
       
         , 
        
        
        
          p 
         
         
         
           n 
          
         
           e 
          
         
           g 
          
         
        
       
         ) 
        
       
      
      
      
        P 
       
      
        × 
       
      
        N 
       
      
     
    
   
     AUC=\frac{\sum{I(p_{pos},p_{neg})}}{P\times N} 
    
   
 AUC=P×N∑I(ppos​,pneg​)​

参考模型评估指标详解:ROC 曲线和 AUC 的计算方法

总结

以上就是Datawhale AI 夏令营2024·第二期(Deepfake攻防挑战赛-图像赛道)Task01的一些解读和理解,剩下的且看且做。祝大家都有收获💗💗💗


本文转载自: https://blog.csdn.net/weixin_64779993/article/details/140387186
版权归原作者 bnbncch 所有, 如有侵权,请联系我们删除。

“Datawhale AI 夏令营2024·第二期(Deepfake攻防挑战赛-图像赛道)Task01”的评论:

还没有评论