Resnet50分类任务在华为云平台上的训练与部署

举报
yd_286601064 发表于 2023/09/20 14:56:08 2023/09/20
【摘要】 一、ResNet神经网络1.1 Resnet50简介ResNet是何凯明等人在2015年提出的一种网络结构。ResNet又名残差神经网络,指的是在传统卷积神经网络中加入残差学习(residual learning)的思想,解决了深层网络中梯度弥散和精度下降(训练集)的问题,使网络能够越来越深,既保证了精度,又控制了速度。以下是论文第一页。1.2 Residual net(残差网络)将靠前若干...

一、ResNet神经网络

1.1 Resnet50简介

ResNet是何凯明等人2015年提出的一种网络结构。ResNet又名残差神经网络,指的是在传统卷积神经网络中加入残差学习(residual learning)的思想,解决了深层网络中梯度弥散和精度下降(训练集)的问题,使网络能够越来越深,既保证了精度,又控制了速度。以下是论文第一页。

1.2 Residual net(残差网络)

将靠前若干层的某一层数据输出直接跳过多层引入到后面数据层的输入部分。意味着后面的特征层的内容会有一部分由其前面的某一层线性贡献。

  深度残差网络的设计是为了克服由于网络深度加深而产生的学习效率变低与准确率无法有效提升的问题

残差网络结构如下:

1.3 Resnet50模型框架

  ResNet50有两个基本的块,分别名为Conv BlockIdentity Block,其中Conv Block输入和输出的维度是不一样的,所以不能连续串联,它的作用是改变网络的维度;Identity Block输入维度和输出维度相同,可以串联,用于加深网络的。这两个都是残差网络结构。

1.4 Resnet50网络结构及特点

     Resnet增加网络深度,实现深层提取特征。

Resnet50 网络中包含了 49 个卷积层、一个全连接层。Resnet50网络结构可以分成七个部分,第一部分不包含残差块,主要对输入进行卷积、正则化、激活函数、最大池化的计算。第二、三、四、五部分结构都包含了残差块,不会改变残差块的尺寸,图中的绿色图块只用于改变残差块的维度。在 Resnet50 网 络 结 构 中 , 残 差 块 都 有 三 层 卷 积 , 那 网 络 总 共 有1+3×(3+4+6+3=49个卷积层,加上最后的全连接层总共是 50 层,这也是Resnet50 名称的由来。网络的输入为 224×224×3,经过前五部分的卷积计算,输出为 7×7×2048,池化层会将其转化成一个特征向量,最后分类器会对这个特征向量进行计算并输出类别概率。

二、数据集和算法模型的获取及导入

2.1数据获取

据集名称

Cifar10数据集

测试时间

2022.11.23

数据集来源

开源

测试人

刘欣澎

数据集获取

1. cifar10数据集下载链接:http://www.cs.toronto.edu/~kriz/cifar.html,下载二进制版本。

2. 里面有airplaneautomobilebirdcatdeerdogfroghorseshiptruck的图片。


2.2算法模型

算法模型名称

ResNet50模型

时间

2022.11.23

来源

开源

测试人

刘欣澎

算法模型获取

1、 resnet50模型下载链接:https://gitee.com/mindspore/models/tree/r1.5/official/cv/resnet 选择1.5版本

2、


2.3 导入

1.打开华为云中的mindspore,找到里面的对象服务器obs

2.在里面创建文件夹并点击上传对象,  然后将刚刚解压好的文件传到对应的文件夹中。

模型训练与验证

3.1环境配置与数据集准备

3.1.1环境配置

初期计划使用ModelArts的云端Python环境进行调试。使用镜像tensorflow1.15-mindspore1.7.0-cann5.1.0-euler2.8-aarch64

3.1.2数据集准备

CIFAR-10数据集共有60000张32*32的彩色图像,分为10个类别,每类有6000张图,数据集一共有50000张训练图片和10000张评估图片。我们组考虑使mindvision.classification.dataset.Cifar10接口下载并加载CIFAR-10数据集。

 

首先我们下载解压数据集到相应目录,包含训练集和测试集,代码如下:

其次,我们对cifar-10训练集进行可视化,代码如下:

可视化结果如下:

3.1.3模型训练

首先,我们构造ResNet50网络,对于每个残差网络块,由3Bottleneck结构堆叠而成,每个Bottleneck的输入channel64,输出channel256

对于残差块的定义代码如下:

其中:
last_out_channel表示上一层残差网络输出的通道数。

block表示残差网络的类别,包括ResidualBlockBaseResidualBlock

channel表示残差网络输入的通道数。

block_nums表示残差网络块堆叠的个数。

stride表示卷积移动的步幅。

 

其次我们进行ResNet50模型的构建,通过用调函数resnet50即可构建。代码如下:

函数resnet50参数如下:
num_classes表示分类的类别数。

pretrained表示下载对应的预训练模型,并加载到网络

 

最后我们进行模型的训练评估,代码如下:

训练与评估结果如下截图:

3.1.4模型验证

最后我们使用上述模型对cifar-10测试集进行预测,且将结果可视化,代码如下:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。