pytorch resnet50_【图像分类】 基于Pytorch的细粒度图像分类实战

9d675ea7635504f2a32c051c120a651e.png

基于pytorch的细粒度图像分类实战来啦!

作者&编辑 | 郭冰洋

1 简介

针对传统的多类别图像分类任务,经典的CNN网络已经取得了非常优异的成绩,但在处理细粒度图像数据时,往往无法发挥自身的最大威力。

这是因为细粒度图像间存在更加相似的外观和特征,同时在采集中存在姿态、视角、光照、遮挡、背景干扰等影响,导致数据呈现类间差异性大、类内差异性小的现象,从而使分类更加具有难度。

为了改善经典CNN网络在细粒度图像分类中的表现,同时不借助其他标注信息,人们提出了双线性网络(Bilinear CNN)这一非常具有创意的结构,并在细粒度图像分类中取得了相当可观的进步。

本次实战将通过CUB-200数据集进行训练,对比经典CNN网络结构和双线性网络结构间的差异性。

2 数据集

9d14094f800fad136c51cc1b8508780f.png

首先我们回顾一下在多类别图像分类实战中所提出的图像分类任务的五个步骤。其中,在整个任务中最基础的一环就是根据数据集的构成编写相应的读取代码,这也是

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch 中冻结某些层参数不训练可以通过以下步骤实现: 1. 加载 ResNet50 预训练模型: ```python import torchvision.models as models resnet50 = models.resnet50(pretrained=True) ``` 2. 冻结指定层的参数: ```python for name, param in resnet50.named_parameters(): if 'layer3' not in name and 'layer4' not in name: param.requires_grad = False ``` 上述代码中,我们遍历 ResNet50 模型的所有参数,如果参数名中不包含 "layer3" 和 "layer4",则将其 requires_grad 属性设置为 False,即冻结该层的参数。 3. 将模型放到 GPU 上: ```python device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') resnet50 = resnet50.to(device) ``` 4. 定义优化器和损失函数: ```python import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(filter(lambda p: p.requires_grad, resnet50.parameters()), lr=0.001, momentum=0.9) ``` 上述代码中,我们只优化 requires_grad 属性为 True 的参数,即未冻结的参数。 5. 训练模型: ```python for epoch in range(num_epochs): for i, (inputs, labels) in enumerate(train_loader): inputs = inputs.to(device) labels = labels.to(device) optimizer.zero_grad() outputs = resnet50(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() ``` 上述代码中,我们使用 DataLoader 加载数据,并将输入和标签放到 GPU 上进行训练。由于部分参数被冻结,因此反向传播时只会更新未冻结的参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值