【学习笔记】昇思25天学习打卡(D11)CV02-ResNet50图像分类.ipynb

ResNet50图像分类

图像分类是最基础的计算机视觉应用,属于有监督学习类别,如给定一张图像(猫、狗、飞机、汽车等等),判断图像所属的类别。本章将介绍使用ResNet50网络对CIFAR-10数据集进行分类。

ResNet网络介绍

ResNet50网络是2015年由微软实验室的何恺明提出,获得ILSVRC2015图像分类竞赛第一名。在ResNet网络提出之前,传统的卷积神经网络都是将一系列的卷积层和池化层堆叠得到的,但当网络堆叠到一定深度时,就会出现退化问题。下图是在CIFAR-10数据集上使用56层网络与20层网络训练误差和测试误差图,由图中数据可以看出,56层网络比20层网络训练误差和测试误差更大,随着网络的加深,其误差并没有如预想的一样减小。

ResNet网络提出了残差网络结构(Residual Network)来减轻退化问题,使用ResNet网络可以实现搭建较深的网络结构(突破1000层)。论文中使用ResNet网络在CIFAR-10数据集上的训练误差与测试误差图如下图所示,图中虚线表示训练误差,实线表示测试误差。由图中数据可以看出,ResNet网络层数越深,其训练误差和测试误差越小。

了解ResNet网络更多详细内容,参见ResNet论文

数据集准备与加载

CIFAR-10数据集共有60000张32*32的彩色图像,分为10个类别,每类有6000张图,数据集一共有50000张训练图片和10000张评估图片。首先,如下示例使用download接口下载并解压,目前仅支持解析二进制版本的CIFAR-10文件(CIFAR-10 binary version)。

下载后的数据集目录结构如下:

datasets-cifar10-bin/cifar-10-batches-bin
├── batches.meta.text
├── data_batch_1.bin
├── data_batch_2.bin
├── data_batch_3.bin
├── data_batch_4.bin
├── data_batch_5.bin
├── readme.html
└── test_batch.bin

然后,使用mindspore.dataset.Cifar10Dataset接口来加载数据集,并进行相关图像增强操作。

对CIFAR-10训练数据集进行可视化。

构建网络

残差网络结构(Residual Network)是ResNet网络的主要亮点,ResNet使用残差网络结构后可有效地减轻退化问题,实现更深的网络结构设计,提高网络的训练精度。本节首先讲述如何构建残差网络结构,然后通过堆叠残差网络来构建ResNet50网络。

构建残差网络结构

残差网络结构图如下图所示,残差网络由两个分支构成:一个主分支,一个shortcuts(图中弧线表示)。主分支通过堆叠一系列的卷积操作得到,shortcuts从输入直接到输出,主分支输出的特征矩阵 F ( x ) F(x) F(x)加上shortcuts输出的特征矩阵 x x x得到 F ( x ) + x F(x)+x F(x)+x,通过Relu激活函数后即为残差网络最后的输出。

残差网络结构主要由两种,一种是Building Block,适用于较浅的ResNet网络,如ResNet18和ResNet34;另一种是Bottleneck,适用于层数较深的ResNet网络,如ResNet50、ResNet101和ResNet152。

Building Block

Building Block结构图如下图所示,主分支有两层卷积网络结构:

  • 主分支第一层网络以输入channel为64为例,首先通过一个 3 × 3 3\times3 3×3的卷积层,然后通过Batch Normalization层,最后通过Relu激活函数层,输出channel为64;
  • 主分支第二层网络的输入channel为64,首先通过一个 3 × 3 3\times3 3×3的卷积层,然后通过Batch Normalization层,输出channel为64。

最后将主分支输出的特征矩阵与shortcuts输出的特征矩阵相加,通过Relu激活函数即为Building Block最后的输出。

主分支与shortcuts输出的特征矩阵相加时,需要保证主分支与shortcuts输出的特征矩阵shape相同。如果主分支与shortcuts输出的特征矩阵shape不相同,如输出channel是输入channel的一倍时,shortcuts上需要使用数量与输出channel相等,大小为

### api-ms-win-crt-runtime-11-1-0.d11 错误解决方案 当遇到 `api-ms-win-crt-runtime-11-1-0.d11` 文件缺失错误时,这通常意味着 Windows 计算机缺少必要的 C++ 运行时库。此类问题可以通过多种方式得到解决。 #### 安装或更新 Microsoft Visual C++ 可再发行包 为了修复由于缺少 `api-ms-win-crt-runtime-11-1-0.d11` 导致的应用程序无法启动的问题,建议安装适用于 Visual Studio 2015 的 Microsoft Visual C++ 可再发行包组件[^2]。具体操作如下: 下载并安装 **Microsoft Visual C++ 2015 Redistributable (x64)** 版本,版本号为 14.0.23026 或更高版本[^3]。确保选择了与目标应用程序架构相匹配的版本(即 x86 对应于 32 位应用;x64 对应于 64 位应用)。通过这种方式可以提供所需的运行时支持给依赖这些 DLLs 的软件。 #### 更新 Windows 操作系统 保持系统的最新状态有助于防止因系统文件损坏而引起的兼容性和功能性问题。因此,定期执行 Windows Update 是推荐的做法之一。对于某些情况下,更新操作系统可能会自动替换或修正有问题的动态链接库文件[^1]。 #### 验证和恢复系统文件 如果上述措施未能解决问题,则可能是因为系统中的关键文件遭到破坏。此时可利用命令提示符下的 SFC 工具来扫描并尝试修复受损的系统文件。打开管理员权限的 CMD 并输入以下指令: ```cmd sfc /scannow ``` #### 手动复制 DLL 文件 作为最后的选择,在极少数情形下可以直接从其他相同配置且正常的机器上获取相应的 dll 文件,并将其放置到系统的 System32 目录中。不过这种方法存在风险,不被官方所提倡,仅限于特殊情况考虑使用。 #### Python 编译环境调整 考虑到 Python 在 Windows 上编译会调用微软提供的 C++ 库以及 runtime 库,所以针对特定开发环境下出现此问题的情况,还可以检查当前使用的 Python 发行版是否已经包含了所需的所有依赖项。如果不是的话,可以选择重新构建项目或者切换至预编译好的二进制分发版本以规避潜在的风险因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值