昇思25天学习打卡营第11天|xkd007|计算机视觉应用实践(2)-ResNet50迁移学习
在实际应用场景中,由于训练数据集不足,所以很少有人会从头开始训练整个网络。普遍的做法是,在一个非常大的基础数据集上训练得到一个预训练模型,然后使用该模型来初始化网络的权重参数或作为固定特征提取器应用于特定的任务中。本章将使用迁移学习的方法对ImageNet数据集中的狼和狗图像进行分类。
迁移学习详细内容见Stanford University CS231n。
ResNet50网络介绍
ResNet50 是一种深度卷积神经网络架构,属于残差网络(Residual Networks,简称ResNets)系列中的一种。它由微软研究院的 Kaiming He 等人在 2015 年提出,并在当年的 ImageNet 和 COCO 竞赛中取得了优异的成绩。
ResNet50 的特点
-
残差学习:ResNet50 引入了残差学习框架,通过添加跳过连接(skip connections)或快捷连接(shortcut connections),允许网络中的信号绕过一层或多层直接传递。这解决了随着网络深度增加时训练困难的问题。
-
深度:ResNet50 包含 50 层,其中包括多个残差块,每个残差块由多个卷积层和批量归一化层组成。
-
批量归一化:网络中的每个卷积层后面都紧跟着批量归一化层,这有助于加速训练过程并提高模型的稳定性。
-
ReLU 激活函数:在每个卷积层和批量归一化层之后使用 ReLU(Rectified Linear Unit)激活函数,引入非线性。
-
全局平均池化:在网络的最后,使用全局平均池化层代替全连接层,以减少参数数量并防止过拟合。
-
预训练模型:由于 ResNet50 在 ImageNet 数据集上进行了预训练,因此它可以用于迁移学习,即在一个任务上训练的模型可以迁移到另一个相关任务上。
1 数据准备(代码见原文链接)
下载数据集
下载案例所用到的狗与狼分类数据集,数据集中的图像来自于ImageNet(ImageNet 是一个按照 WordNet 层次结构组织的图像数据库,它对每个概念节点都提供了数百到数千张图片,极大地推动了计算机视觉和深度学习研究的发展 。这个项目由斯坦福大学的李飞飞教授等人在 2009 年发起,并从 2010 年到 2017 年举办了基于 ImageNet 数据集的大规模视觉识别挑战赛(ILSVRC)),每个分类有大约120张训练图像与30张验证图像。使用download接口下载数据集,并将下载后的数据集自动解压到当前目录下。
2 加载数据集(代码见原文链接)
狼狗数据集提取自ImageNet分类数据集,使用mindspore.dataset.ImageFolderDataset接口来加载数据集,并进行相关图像增强操作。
数据集可视化
从mindspore.dataset.ImageFolderDataset接口中加载的训练数据集返回值为字典,用户可通过 create_dict_iterator 接口创建数据迭代器,使用 next 迭代访问数据集。batch_size 设为18,表示使用 next 一次可获取18个图像及标签数据。
3 训练模型(代码见原文链接)
本章使用ResNet50模型进行训练。搭建好模型框架后,通过将pretrained参数设置为True来下载ResNet50的预训练模型并将权重参数加载到网络中。
① 构建Resnet50网络
② 固定特征进行训练
使用固定特征进行训练的时候,需要冻结除最后一层之外的所有网络层。通过设置 requires_grad == False 冻结参数,以便不在反向传播中计算梯度。
训练和评估
开始训练模型,与没有预训练模型相比,将节约一大半时间,因为此时可以不用计算部分梯度。保存评估精度最高的ckpt文件于当前路径的./BestCheckpoint/resnet50-best-freezing-param.ckpt。
可视化模型预测
使用固定特征得到的best.ckpt文件对对验证集的狼和狗图像数据进行预测。若预测字体为蓝色即为预测正确,若预测字体为红色则预测错误。
原文链接:ResNet50迁移学习… (6) - JupyterLab (mindspore.cn)
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)