Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >轻松学Pytorch-使用ResNet50实现图像分类

轻松学Pytorch-使用ResNet50实现图像分类

作者头像
OpenCV学堂
发布于 2020-07-22 08:04:51
发布于 2020-07-22 08:04:51
8.5K00
代码可运行
举报
运行总次数:0
代码可运行

微信公众号:OpenCV学堂 关注获取更多计算机视觉深度学习知识

Hello大家好,这篇文章给大家详细介绍一下pytorch中最重要的组件torchvision,它包含了常见的数据集、模型架构与预训练模型权重文件、常见图像变换、计算机视觉任务训练。可以是说是pytorch中非常有用的模型迁移学习神器。本文将会介绍如何使用torchvison的预训练模型ResNet50实现图像分类。

模型

Torchvision.models包里面包含了常见的各种基础模型架构,主要包括:

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

这里我选择了ResNet50,基于ImageNet训练的基础网络来实现图像分类, 网络模型下载与加载如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = torchvision.models.resnet50(pretrained=True).eval().cuda()
tf = transforms.Compose([
            transforms.Resize(256),
            transforms.CenterCrop(224),
            transforms.ToTensor(),
            transforms.Normalize(
            mean=[0.485, 0.456, 0.406],
            std=[0.229, 0.224, 0.225]
        )])

使用模型实现图像分类

这里首先需要加载ImageNet的分类标签,目的是最后显示分类的文本标签时候使用。然后对输入图像完成预处理,使用ResNet50模型实现分类预测,对预测结果解析之后,显示标签文本,完整的代码演示如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open('imagenet_classes.txt') as f:
    labels = [line.strip() for line in f.readlines()]

src = cv.imread("D:/images/space_shuttle.jpg") # aeroplane.jpg
image = cv.resize(src, (224, 224))
image = np.float32(image) / 255.0
image[:,:,] -= (np.float32(0.485), np.float32(0.456), np.float32(0.406))
image[:,:,] /= (np.float32(0.229), np.float32(0.224), np.float32(0.225))
image = image.transpose((2, 0, 1))
input_x = torch.from_numpy(image).unsqueeze(0)
print(input_x.size())
pred = model(input_x.cuda())
pred_index = torch.argmax(pred, 1).cpu().detach().numpy()
print(pred_index)
print("current predict class name : %s"%labels[pred_index[0]])
cv.putText(src, labels[pred_index[0]], (50, 50), cv.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 2)
cv.imshow("input", src)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下:

转ONNX支持

在torchvision中的模型基本上都可以转换为ONNX格式,而且被OpenCV DNN模块所支持,所以,很方便的可以对torchvision自带的模型转为ONNX,实现OpenCV DNN的调用,首先转为ONNX模型,直接使用torch.onnx.export即可转换(还不知道怎么转,快点看前面的例子)。转换之后使用OpenCV DNN调用的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open('imagenet_classes.txt') as f:
    labels = [line.strip() for line in f.readlines()]
net = cv.dnn.readNetFromONNX("resnet.onnx")
src = cv.imread("D:/images/messi.jpg")  # aeroplane.jpg
image = cv.resize(src, (224, 224))
image = np.float32(image) / 255.0
image[:, :, ] -= (np.float32(0.485), np.float32(0.456), np.float32(0.406))
image[:, :, ] /= (np.float32(0.229), np.float32(0.224), np.float32(0.225))
blob = cv.dnn.blobFromImage(image, 1.0, (224, 224), (0, 0, 0), False)
net.setInput(blob)
probs = net.forward()
index = np.argmax(probs)
cv.putText(src, labels[index], (50, 50), cv.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 2)
cv.imshow("input", src)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果见上图,这里就不再贴了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【强基固本】PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理和神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。
马上科普尚尚
2024/04/19
3110
【强基固本】PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
亲测有效 | OpenVINO支持ONNX格式文件直接读取了
OpenVINO 2020R04版本支持ONNX格式文件的直接读取了,使用的函数还是跟之前读取IR文件函数保持一致,只是第二个参数缺省为空时候,就会尝试读取ONNX格式文件。相关的函数与参数解释如下:
OpenCV学堂
2020/09/24
4K0
亲测有效 | OpenVINO支持ONNX格式文件直接读取了
讲解pytorch可视化 resnet50特征图
在计算机视觉任务中,ResNet50是一个非常流行和强大的预训练模型。不仅可以用它来进行图像分类,还可以使用它来提取图像特征。在这篇博客文章中,我们将讨论如何使用PyTorch对ResNet50的特征图进行可视化。 首先,我们需要安装PyTorch和其他必要的库。在终端中运行以下命令:
大盘鸡拌面
2023/12/15
1.3K0
【小白学习PyTorch教程】十四、迁移学习:微调ResNet实现男人和女人图像分类
ResNet是 Residual Networks 的缩写,是一种经典的神经网络,用作许多计算机视觉任务。
润森
2022/08/18
1.3K0
【小白学习PyTorch教程】十四、迁移学习:微调ResNet实现男人和女人图像分类
轻松学Pytorch-使用torchvision的transforms实现图像预处理
Pytorch中的图像预处理都跟transforms这个工具包有关系,它是一个常用的图像变换工具包,主要支持方式有两中:
OpenCV学堂
2021/05/10
3K0
轻松学Pytorch-使用torchvision的transforms实现图像预处理
轻松学Pytorch之Deeplabv3推理
Torchvision框架中在语义分割上支持的是Deeplabv3语义分割模型,而且支持不同的backbone替换,这些backbone替换包括MobileNetv3、ResNet50、ResNet101。其中MobileNetv3版本训练数据集是COCO子集,类别跟Pascal VOC的20个类别保持一致。这里以它为例,演示一下从模型导出ONNX到推理的全过程。
OpenCV学堂
2023/01/04
9420
轻松学Pytorch之Deeplabv3推理
这个AI模型能识别出这个橘子吗?
图像识别任务是人工智能计算机视觉领域一个重要的子任务,本篇文章将通过使用一个预训练模型来帮助读者快速上手图像识别任务,对应的文件可通过关注文章末尾的公众号领取
Nowl
2024/01/18
1480
这个AI模型能识别出这个橘子吗?
resnet34 pytorch_pytorch环境搭建
导师的课题需要用到图片分类;入门萌新啥也不会,只需要实现这个功能,给出初步效果,不需要花太多时间了解内部逻辑。经过一周的摸索,建好环境、pytorch,终于找到整套的代码和数据集,实现了一个小小的分类。记录一下使用方法,避免后续使用时遗忘。感谢各位大佬的开源代码和注释!
全栈程序员站长
2022/09/27
8400
resnet34 pytorch_pytorch环境搭建
Pytroch入坑 3. 自己的人脸数据+迁移学习(resnet18)
本文转载自:http://www.zhongruitech.com/856941441.html
全栈程序员站长
2022/09/01
3770
Pytroch入坑 3. 自己的人脸数据+迁移学习(resnet18)
PyTorch实现ResNet18
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141287.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/01
9821
PyTorch实现ResNet18
『跟我做AI工程化』使用Python原生实现PyTorch的Transforms数据变换操作
在应用PyTorch训练好的模型时,为了保证模型的准确稳定性,需要保持与训练时相同的操作。
小宋是呢
2021/04/23
1.4K0
VGG16 训练猫狗数据集
准备数据应该是一件比较麻烦的过程,所以一般都去找那种公开的数据集。在网上找到的可以用于猫狗分类的数据集有 Kaggle 的 “Dogs vs. Cats”数据集,还有牛津大学提供的 Oxford-IIIT Pet 数据集,包含猫和狗的图片,都是非常适合做猫狗分类任务的公开数据集。
繁依Fanyi
2025/03/24
1500
从零开始学Pytorch(十九)之Kaggle上的狗品种识别
在本节中,我们将解决Kaggle竞赛中的犬种识别挑战,比赛的网址是https://www.kaggle.com/c/dog-breed-identification 在这项比赛中,我们尝试确定120种不同的狗。该比赛中使用的数据集实际上是著名的ImageNet数据集的子集。
墨明棋妙27
2022/09/23
4020
PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
这篇文章将演示如何可视化PyTorch激活层。可视化激活,即模型内各层的输出,对于理解深度神经网络如何处理视觉信息至关重要,这有助于诊断模型行为并激发改进。
deephub
2024/04/17
6110
PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
使用Pytorch和转移学习进行端到端多类图像分类
将从Kaggle 的Boat数据集开始,以了解多类图像分类问题。该数据集包含约1,500种不同类型的船的图片:浮标,游轮,渡船,货船,吊船,充气船,皮划艇,纸船和帆船。目标是创建一个模型,以查看船只图像并将其分类为正确的类别。
代码医生工作室
2020/06/06
1.1K0
用Python制作斗地主AI出牌器,赢取海量“财富”,走上人生巅峰!
之前写过一个项目《斗地主老是输?一起用Python做个AI出牌器,欢乐豆蹭蹭涨!》,但是在扑克牌牌型识别的时候由于使用的是特定模板匹配,所以只适用于固定分辨率的某游戏大厅的斗地主,而无法适用于大部分的斗地主,尤其是某手游助手的斗地主。于是打算通过YOLOv5算法进行扑克牌目标检测与识别,从而实现AI出牌。
用户8544541
2022/03/24
2.6K0
用Python制作斗地主AI出牌器,赢取海量“财富”,走上人生巅峰!
Demo:用PyTorch Hub几行代码体验对象分割
使用PyTorch Hub只需一行代码即可导入需要的模型,PyTorch Hub是一个简易API和工作流程,为复现研究提供了基本构建模块,包含预训练模型库。
深度学习与Python
2019/07/10
1.1K0
OpenVINO2022 Dev Tools安装与使用
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 引言 OpenVINO2022版本发布之后,对之前旧版本的功能做明确的划分,其中仍然通过exe方式安装程序的是runtime推理包,支持ONNX、IR、PADDLE等模型读取与推理。但是模型优化转换、模型库下载功能等其他功能被分在一个叫Dev Tool的部分。该部分可以通过pip方式直接安装,然后通过命令行直接直线,完成模型的转换,下载等操作,跟之前版本易用性有较大提升!做个对比如下: Dev Tools安装与使用
OpenCV学堂
2022/06/24
1.2K0
OpenVINO2022 Dev Tools安装与使用
PyTorch之迁移学习实战
迁移学习是把一个领域(即源领域)的知识,迁移到另外一个领域(即目标领域),使得目标领域能够取得更好的学习效果。通常,源领域数据量充足,而目标领域数据量较小,迁移学习需要将在数据量充足的情况下学习到的知识,迁移到数据量小的新环境中。
IT派
2018/08/10
6210
PyTorch之迁移学习实战
【机器学习】小样本学习的实战技巧:如何在数据稀缺中取得突破
小样本学习,作为一种高效的学习范式,旨在利用极为有限的标注样本训练出具备强大泛化能力的模型。其核心策略巧妙地融合了迁移学习、元学习以及数据增强等多种技术,以应对数据稀缺的挑战,进而推动模型在少量数据条件下的有效学习与适应。
2的n次方
2024/10/15
6750
【机器学习】小样本学习的实战技巧:如何在数据稀缺中取得突破
推荐阅读
相关推荐
【强基固本】PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验