利用torchvision.models调用现成的网络

这篇具有很好参考价值的文章主要介绍了利用torchvision.models调用现成的网络。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现成的网络结构主要包括以下几种:

  • AlexNet
  • VGG
  • ResNet
  • SqueezeNet
  • DenseNet
  • Inception v3
  • GoogLeNet
  • ShuffleNet v2
  • MobileNet v2
  • ResNeXt
  • Wide ResNet
  • MNASNet

以resnet50为例,其最简单的调用方式就是:↓

model=torchvision.models.resnet50()

不需要初始化什么参数,这样得到的model就是默认的resnet50结构,可以直接用来做分类训练。

但是还提供了预训练参数权重,只需要:↓

model=torchvision.models.resnet50(pretrained=True)

这种方式会直接从官网上进行预训练权重的下载,该预训练权重是由ImageNet-1K(标准输入224x224)而来,由于其本质是一个分类网络,所以最后的全连接层大小为1000.

但是这种方式会被警告,因为pretrained参数可能以后会被舍弃,建议我们使用weight参数。
这样的话我们有两种方法

第一可以直接通过官网先把预训练权重下载好:↓

model=models.resnet50()
weight=torch.load("resnet50.pth")
model.load_state_dict(weight)

第二利用网络的weights参数:↓

from torchvision.models import resnet50,ResNet50_Weights

model=resnet50(weights=ResNet50_Weights.DEFAULT)

导入的ResNet50_Weights其实也不是现成的参数,它里面实际就是预训练权重的地址,它也是现下载的。不管是哪种现成网路的权重,一般在里面都配套了两套权重,一套是论文里面原汁原味的权重,一套是经过一些小技巧,在不改变网络结构的前提下进行改进的一套权重,而DEFAULT(默认值)就选择的是高性能的那一套:

model_1=resnet50(weights=ResNet50_Weights.IMAGENET1K_V1)

model_2=resnet50(weights=ResNet50_Weights.IMAGENET1K_V2)

其中ResNet50_Weights.DEFAULT就是ResNet50_Weights.IMAGENET1K_V2

如果我们想要直接使用现成的网络,不管是分类网络也好,目标检测网络,语义分割网络,还需要注意的就是预处理的步骤,即需要将检测的图片转化成网络训练是输入的格式,这个步骤也在ResNet50_Weights中:↓

weights=ResNet50_Weights.DEFAULT

preprocess=weight.transforms()

batch=preprocess(img).unsequeeze(0)

最后将结果映射回来即可:↓

prediction = model(batch).squeeze(0).softmax(0)
class_id = prediction.argmax().item()
score = prediction[class_id].item()
category_name = weights.meta["categories"][class_id]

其他网络的具体操作可以查看利用torch.models实现分类,目标检测,语义分割任务
但是的但是,我们基本不会使用原始的网络来进行分类,一般使用该网络进行特征的提取,换句话说它的分类层对于我们的用处不大。那么下面分为两种情况来介绍如何改造现成的网络:

将resnet50改造为其他分类网络

如果我们只想要训练分类层,那么先直接冻结网络里面所有的权重:↓

resnet50=models.resnet50(pretrained=True)

for param in resnet50.parameters():
	param.requires_grad=False

当我们直接print出resnet50的网络结构以后,最后几行是这样的↓

  (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))
  (fc): Linear(in_features=2048, out_features=1000, bias=True)

这里面的fc就是我们需要更改的全连接层,其中fc其实就是全连接层名称,也可以认为是一个初始化变量,所以我们只需要改变这个初始化变量就可以了:↓

num_features=resnet50.fc.in_features

resnet50.fc=nn.Linear(num_features,10)#假设我们只需要分类10类

也可以再添加一层softmax,写成:↓

resnet50.fc=nn.Sequential(nn.Linear(num_features,10),
						  nn.LogSoftmax(dim=1))

使用resnet50部分结构组成下游网络的backbone(重点)

model=resnet50(weights=ResNet50_Weights.IMAGENET1K_V2)

feature_maps=nn.Sequential(*list(model.children())[:7])

imgs=torch.randn([2,3,224,224])

output=feature_maps(imgs)

就这么简单。

首先model.children()是一个很好用的接口,其只会将model的最外层结构分别输出,resnet50最外层一共有10个模块,我这里只去了前面7个,取出来以后利用nn.Sequential进行连接,就可以只使用其中某部分的结构了,具体可以参考
迁移学习文章来源地址https://www.toymoban.com/news/detail-618636.html

到了这里,关于利用torchvision.models调用现成的网络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习:Pytorch安装的torch与torchvision的cuda版本冲突问题与解决历程记录

    今天不小心将conda环境中的一个pytorch环境中的torch包给搞混了,将其更新了一下,发生了一些问题: 当时运行了一下这个代码:  pip install torchvision --upgrade 导致了环境中包的混乱: 只能说欲哭无泪,当时这个 pytorch环境中我是安装的CUDA11.8的版本应该,后来安装了cpu版本的将

    2024年02月20日
    浏览(44)
  • torchvision.models简介

    PyTorch框架中有一个非常重要且好用的包: torchvision ,该包主要由3个子包组成,分别是:torchvision.datasets、torchvision.models、torchvision.transforms 该篇主要介绍torchvision.models,关于torchvision.datasets 和 torchvision.transforms 可以看以下几篇: https://blog.csdn.net/Alexa_/article/details/129408512 tor

    2024年02月11日
    浏览(21)
  • ModuleNotFoundError: No module named ‘torchvision.models.utils

    如果你是高版本的torch大概pytoch1.6以上,直接换语句就不报错了 如果没能够解决问题就是你torch版本与torchvision版本不对应,可以重新安装torch。

    2024年02月12日
    浏览(45)
  • 【错误解决方案】ModuleNotFoundError: No module named ‘torchvision.models.utils‘

    在python程序,尝试导入一个名为\\\'torchvision.models.utils\\\'的模块,但Python提示找不到这个模块。 错误提示:ModuleNotFoundError: No module named \\\'torchvision.models.utils\\\' 1)这可能是因为你还没有安装这个模块,或者安装的版本不正确。 torchvision.models.utils\\\'是PyTorch的torchvision库中的一个模块,它

    2024年02月06日
    浏览(75)
  • 【深度学习】扩散模型(Diffusion Model)详解

    扩散模型有两个过程: 扩散过程:如上图所示,扩散过程为从右到左 X 0 → X T X_0 rightarrow X_T X 0 ​ → X T ​ 的过程,表示对图片逐渐加噪,且 X t + 1 X_{t+1} X t + 1 ​ 是在 X t X_{t} X t ​ 上加躁得到的,其只受 X t X_{t} X t ​ 的影响。 因此扩散过程是一个马尔科夫过程 。 X 0 X

    2024年01月19日
    浏览(52)
  • 利用torchvision库实现目标检测与语义分割

    利用torchvision库实现目标检测与语义分割。         Pytorch预训练模型、内置模型实现图像分类、检测和分割

    2024年02月10日
    浏览(36)
  • 【深度学习模型】扩散模型(Diffusion Model)基本原理及代码讲解

    生成式建模的扩散思想实际上已经在2015年(Sohl-Dickstein等人)提出,然而,直到2019年斯坦福大学(Song等人)、2020年Google Brain(Ho等人)才改进了这个方法,从此引发了生成式模型的新潮流。目前,包括OpenAI的GLIDE和DALL-E 2,海德堡大学的Latent Diffusion和Google Brain的ImageGen,都基

    2023年04月22日
    浏览(48)
  • python的pytorch和torchvision利用wheel文件安装

    在做人工智能的时候,我们需要下载pytorch和torchvision,那么如何下载呢。利用wheel文件+pip安装 首先要看你的python版本,打开命令行,输入: 就可以看到了 打开下载网址 pytorch和torchvision下载地址 根据你的电脑下载相应的wheel包,我的电脑是windows,cpu,x64,python3.9所以我选择

    2024年02月07日
    浏览(32)
  • 【深度学习PyTorch入门】6.Optimizing Model Parameters 优化模型参数

    现在我们有了模型和数据,是时候通过优化数据上的参数来训练、验证和测试我们的模型了。训练模型是一个迭代过程;在每次迭代中,模型都会对输出进行猜测,计算其猜测中的误差( 损失 ),收集相对于其参数的导数的误差(如我们在上一节中看到的),并使用梯度下

    2024年01月24日
    浏览(60)
  • 【深度学习:Micro-Models】用于标记图像和视频的微模型简介

    在本文中,我们将介绍 Encord 用于自动化数据注释的“微模型”方法。我们已将这种方法部署到各个领域的计算机视觉标记任务中,包括医学成像、农业、自动驾驶汽车和卫星成像。 让我们切入正题: 什么是微模型 低偏差模型适用于数据集中的一小组图像或视频。 微模型如

    2024年01月20日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包