Resnet50分类任务在华为云平台上的训练与部署
一、ResNet神经网络
1.1 Resnet50简介
ResNet是何凯明等人在2015年提出的一种网络结构。ResNet又名残差神经网络,指的是在传统卷积神经网络中加入残差学习(residual learning)的思想,解决了深层网络中梯度弥散和精度下降(训练集)的问题,使网络能够越来越深,既保证了精度,又控制了速度。以下是论文第一页。
1.2 Residual net(残差网络)
将靠前若干层的某一层数据输出直接跳过多层引入到后面数据层的输入部分。意味着后面的特征层的内容会有一部分由其前面的某一层线性贡献。
深度残差网络的设计是为了克服由于网络深度加深而产生的学习效率变低与准确率无法有效提升的问题。
残差网络结构如下:
1.3 Resnet50模型框架
ResNet50有两个基本的块,分别名为Conv Block和Identity 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. 里面有airplane,automobile,bird,cat,deer,dog,frog,horse,ship,truck的图片。
|
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网络,对于每个残差网络块,由3个Bottleneck结构堆叠而成,每个Bottleneck的输入channel为64,输出channel为256。
对于残差块的定义代码如下:
其中:
last_out_channel表示上一层残差网络输出的通道数。
block表示残差网络的类别,包括ResidualBlockBase,ResidualBlock。
channel表示残差网络输入的通道数。
block_nums表示残差网络块堆叠的个数。
stride表示卷积移动的步幅。
其次我们进行ResNet50模型的构建,通过用调函数resnet50即可构建。代码如下:
函数resnet50参数如下:
num_classes表示分类的类别数。
pretrained表示下载对应的预训练模型,并加载到网络。
最后我们进行模型的训练评估,代码如下:
训练与评估结果如下截图:
3.1.4模型验证
最后我们使用上述模型对cifar-10测试集进行预测,且将结果可视化,代码如下:
- 点赞
- 收藏
- 关注作者
评论(0)