【机器学习实战】Datawhale夏令营2:音视频攻防(deepfake)Baseline句解

# Datawhale # AI夏令营 # 夏令营

1. 赛题简要介绍

比赛任务是判断一张人脸图像是否为Deepfake图像,并输出其为Deepfake图像的概率评分。参赛者需要开发和优化检测模型,以应对多样化的Deepfake生成技术和复杂的应用场景,从而提升Deepfake图像检测的准确性和鲁棒性。

2. 赛题数据集

训练集的标签文件train_label.txt用于训练模型,而验证集的标签文件val_label.txt仅用于模型调优。例如,在train_label.txt或val_label.txt中,每行包含两部分,由逗号分隔。第一部分是文件名(后缀为.mp4),第二部分是真实值。
目标值为1表示深度伪造音视频,目标值为0表示真实的人脸音视频。

以下是train_label.txt和val_label.txt的样本:

train_label.txt

video_name,target
96b04c80704f02cb426076b3f624b69e.mp4,0
16fe4cf5ae8b3928c968a5d11e870360.mp4,1

val_label.txt

video_name,target
f859cb3510c69513d5c57c6934bc9968.mp4,0
50ae26b3f3ea85babb2f9dde840830e2.mp4,1

文件中的每一行包含两部分,由逗号分隔。第一部分是视频文件名,第二部分是模型预测对应的深度伪造分数(即样本属于深度伪造视频的概率值)。请参考下面的提交模板:

prediction.csv

video_name,score
658042526e6d0c199adc7bfeb1f7c888.mp4,0.123456
a20cf2d7dea580d0affc4d85c9932479.mp4,0.123456

第二阶段在第一阶段之后,第二阶段发布公共测试集。参与者需要在系统中提交测试集的预测分数文件prediction_test.csv,实时在线反馈测试分数结果。

在第二阶段结束后,前30名队伍将晋级到第三阶段。在这一阶段,参赛者需要提交代码docker和技术报告。Docker要求包括原始训练代码和测试API(函数输入为图像路径,输出为模型预测的Deepfake评分)。主办方将检查并重新运行算法代码,以重现训练过程和测试结果。

仅允许提交单个模型,有效网络参数不得超过200M(使用thop工具统计模型参数)。

仅允许使用ImageNet1K训练预模型。基于发布的训练集生成的扩展样本(通过数据增强/Deepfake工具)可以用于训练,但这些工具需在第三阶段提交以供重现。

3. 评价指标

评价指标主要使用ROC曲线下的AUC作为指标,AUC的取值范围通常在0.5-1之间,否则我们认为这不是一个好的机器学习模型。AUC越接近1,模型就越好。如果AUC呈现了模棱两可的排名结果,我们再使用**TPR(真阳性率)**作为辅助参考。当然,对应的还有FPR这种方法。

F1-Score也是我们可以参考的指标:它是精准率和召回率的调和平均值

F 1 _ S c o r e = 2 ∗ ( T P ) / ( 2 T P + F N + F P ) F1\_Score = 2*(TP)/(2TP+FN+FP) F1_Score=2(TP)/(2TP+FN+FP)

在学习机器学习之前我们应该回顾两个重要的概念:精准率召回率

精准率 P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP,它用于衡量模型的查准性能,正确预测的样本中,预测为正的样本的比例。

召回率 R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN} Recall=TP+FNTP,它用于衡量模型的查全性能,预测为正的样本中,实际为正的样本的比例。

真阳性率 (TPR):
TPR = TP / (TP + FN)
假阳性率 (FPR):
FPR = FP / (FP + TN)
其中:
TP:攻击样本被正确识别为攻击;
TN:真实样本被正确识别为真实;
FP:真实样本被错误识别为攻击;
FN:攻击样本被错误识别为真实。

参考文献:Aghajan, H., Augusto, J. C., & Delgado, R. L. C. (Eds.). (2009). (题目中给的链接打不开请点击:全书)

这里贴出我的TPR计算脚本:

l1 = [0,1,1,1,0,0,0,1]
l2 = [0,1,0,1,0,1,0,0]

def accuracy(y_true, y_pred):
    # 正确预测数初始化一个简单计数器
    correct_counter = 0
    # 遍历y_true, y_pred中所有元素
    # zip函数接受多个元组,返回他们组成的列表
    for yt, yp in zip(y_true, y_pred):
        if yt == yp:
            # 如果预测标签与真实标签相同,则增加计数器
            correct_counter += 1
    # 返回正确率,正确标签数/总标签数
    return correct_counter / len(y_true)
    
def false_positive(y_true, y_pred):
    # 初始化假阳性样本计数器
    fp = 0
    # 遍历y_true,y_pred中所有元素
    for yt, yp in zip(y_true, y_pred):
        # 若真实标签为负类但预测标签为正类,计数器增加
        if yt == 0 and yp == 1:
            fp += 1
    return fp

def false_negative(y_true, y_pred):
    # 初始化假阴性样本计数器
    fn = 0
    # 遍历y_true,y_pred中所有元素
    for yt, yp in zip(y_true, y_pred):
        # 若真实标签为正类但预测标签为负类,计数器增加
        if yt == 1 and yp == 0:
            fn += 1
    return fn
    
def true_positive(y_true, y_pred):
    # 初始化真阳性样本计数器
    tp = 0
    # 遍历y_true,y_pred中所有元素
    for yt, yp in zip(y_true, y_pred):
        # 若真实标签为正类且预测标签也为正类,计数器增加
        if yt == 1 and yp == 1:
            tp += 1
    return tp

def true_negative(y_true, y_pred):
    # 初始化真阴性样本计数器
    tn = 0
    # 遍历y_true,y_pred中所有元素
    for yt, yp in zip(y_true, y_pred):
        # 若真实标签为负类且预测标签也为负类,计数器增加
        if yt == 0 and yp == 0:
            tn += 1
    # 返回真阴性样本数
    return tn
    
# 您可以尝试更好的精确度计算方式
def accuracy_v2(y_true, y_pred):
  # 真阳性样本数
  tp = true_positive(y_true, y_pred)
  # 假阳性样本数
  fp = false_positive(y_true, y_pred)
  # 假阴性样本数
  fn = false_negative(y_true, y_pred)
  # 真阴性样本数
  tn = true_negative(y_true, y_pred)
  # 准确率
  accuracy_score = (tp + tn) / (tp + tn + fp + fn)
  return accuracy_score
  
# F1-score的计算方法
def f1(y_true,y_pred):
    p = precision(y_true, y_pred)
    r = recall(y_true,y_pred)
    score = 2*p*r/(p+r)
    return score
    

如果需要分类,您可能需要一个阈值。它与预测值的关系如下:

P r e d i c t i o n = P r

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城主_全栈开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值