Datawhale AI夏令营 Task3

部署运行你感兴趣的模型镜像

数据增强
数据增强的目的是通过人工方式增加训练数据的多样性,从而提高模型的泛化能力,使其能够在未见过的数据上表现得更好。
在之前baseline中,

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
)
  1. 图像大小调整:使用transforms.Resize((256, 256))将所有图像调整到256x256像素的尺寸,这有助于确保输入数据的一致性。
  2. 随机水平翻转:transforms.RandomHorizontalFlip()随机地水平翻转图像,这种变换可以模拟物体在不同方向上的观察,从而增强模型的泛化能力。
  3. 随机垂直翻转:transforms.RandomVerticalFlip()随机地垂直翻转图像,这同样是为了增加数据多样性,让模型能够学习到不同视角下的特征。
  4. 转换为张量:transforms.ToTensor()将图像数据转换为PyTorch的Tensor格式,这是在深度学习中处理图像数据的常用格式。
  5. 归一化:transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])对图像进行归一化处理,这里的均值和标准差是根据ImageNet数据集计算得出的,用于将图像像素值标准化,这有助于模型的训练稳定性和收敛速度。
    实操
    1.基于baseline进行调整训练
    在前两次使用baseline训练时获得了0.55、0.96、0.97的分数,在最近一次采用如下设置,
train_loader = torch.utils.data.DataLoader(
    FFDIDataset(train_label['path'].head(300000), train_label['target'].head(300000), 
            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=64, shuffle=True, num_workers=4, pin_memory=True
)
​
val_loader = torch.utils.data.DataLoader(
    FFDIDataset(val_label['path'].head(50000), val_label['target'].head(50000), 
            transforms.Compose([
                        transforms.Resize((256, 256)),
                        transforms.ToTensor(),
                        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
        ])
    ), batch_size=64, shuffle=False, num_workers=4, pin_memory=True
)

提交得分为0.974,若使用全部数据+增加数据增强方式,得分应该可以可以在0.98以上。
2.简易CNN模型训练

class DeepfakeDetector(nn.Module):
    def __init__(self):
        super(DeepfakeDetector, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(256, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1),
            nn.ReLU(inplace=True),
            nn.AdaptiveAvgPool2d((1, 1))
        )
        self.classifier = nn.Sequential(
            nn.Linear(512, 1024),
            nn.ReLU(inplace=True),
            nn.Dropout(0.5),
            nn.Linear(1024, 512),
            nn.ReLU(inplace=True),
            nn.Dropout(0.5),
            nn.Linear(512, 2)
        )

实现二分类,并使用早停技术以免过度浪费资源,

for epoch in range(20):
    print(f'Epoch {epoch + 1}/20')
    train_loss = train(train_loader, model, criterion, optimizer, epoch)
    val_acc = validate(val_loader, model, criterion)
    
    if val_acc > best_acc:
        best_acc = val_acc
        best_model_wts = model.state_dict().copy()
        print(f'Validation Accuracy improved to {best_acc:.4f}')
        epochs_since_improvement = 0
    else:
        print(f'Validation Accuracy did not improve from {best_acc:.4f}')
        epochs_since_improvement += 1
    
    if epochs_since_improvement >= patience:
        print("Early stopping triggered")
        break

因为模型相对架构简单等问题,每一个epoch的准确率更新存在问题,不过基本实现了模型训练及验证的过程,其中添加了部分数据增强、早停等技术,对流程有了进一步的了解。
参考资料:Datawhale AI学习指南

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

Datawhale AI夏令营是由国内AI领域最大的开源学习组织Datawhale发起的一项暑期学习活动,旨在帮助在校大学生和在职工作者深入学习和掌握AI技术,并将其应用于实际的学习和工作中[^1]。该夏令营不仅为参与者提供了丰富的学习资源和实践机会,还通过各种竞赛和项目实践,提升参与者的实际操作能力和团队协作能力。 ### 官方介绍 Datawhale AI夏令营每年暑期都会开展,活动内容丰富多样,涵盖了AI领域的多个热门方向,如大模型微调、机器翻译、AIGC(生成式人工智能)等[^1]。通过这些活动,参与者可以接触到最新的AI技术和应用场景,同时还能结识一群志同道合的学习伙伴,共同进步和成长。 ### 报名条件 Datawhale AI夏令营面向所有对AI技术感兴趣的人士开放,无论是在校大学生还是在职工作者,只要对AI技术有热情,都可以报名参加[^1]。参与者需要具备一定的编程基础和对AI技术的基本了解,以便更好地参与到夏令营的各项活动中。 ### 活动内容 Datawhale AI夏令营的活动内容非常丰富,主要包括以下几个方面: 1. **竞赛挑战**:例如讯飞机器翻译挑战赛,参与者可以通过竞赛的形式提升自己的技术水平,同时还能获得宝贵的实践经验[^2]。 2. **大模型微调**:如第四期夏令营中提到的从零入门大模型微调,参与者可以学习到如何对大模型进行微调,以适应特定的应用场景[^3]。 3. **AIGC方向**:包括图像生成、文本生成等多个方向,参与者可以学习到如何利用生成式AI技术创造出新的内容[^5]。 4. **环境配置与代码实践**:夏令营期间,参与者需要配置相应的开发环境,并通过实际的代码实践来加深对所学知识的理解。例如,使用Git LFS安装和克隆数据集,进行项目开发[^4]。 此外,夏令营还会提供一系列的学习资源和支持,包括详细的教程、在线答疑等,确保参与者能够顺利完成各项任务并有所收获。 ### 示例代码 以下是一个简单的示例代码,展示了如何使用Git LFS安装和克隆数据集: ```bash git lfs install git clone https://www.modelscope.cn/datasets/Datawhale/AISumerCamp_picture_generation_fight.git ``` 通过这些活动,参与者不仅可以提升自己的技术能力,还有机会获得实习证明和证书,为未来的职业发展打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值