ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI for Beginners 课程:卷积神经网络(CNN)实战指南——从边缘滤波器到金字塔架构

AI for Beginners 课程:卷积神经网络(CNN)实战指南——从边缘滤波器到金字塔架构 教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本指南是 AI for Beginners 课程第 07 课的完整技术解读围绕卷积神经网络Convolutional Neural NetworksCNN展开。你将理解为什么通用神经网络难以胜任真实世界的图像识别、卷积滤波器如何提取模式、滤波器如何从手工设计走向自动学习并通过仓库内配套的 PyTorch 与 TensorFlow 笔记本与辅助脚本获得可直接运行的实战能力最终掌握以 VGG-16 为代表的金字塔架构设计思想。从 MNIST 说起为什么通用网络不够用在之前的课程中我们已经看到神经网络对图像处理相当擅长甚至单层感知机就能以不错的精度识别 MNIST 手写数字。但 pytorchcv.py 中load_mnist所加载的 MNIST 数据集非常特殊所有数字都居中在图像中这让任务被大幅简化了。而在现实世界中我们希望在图片中识别物体无论它出现在图片的什么位置。计算机视觉不同于一般的分类任务——当我们在图片中寻找某个物体时实际上是在扫描整张图片寻找特定的**模式patterns**及其组合。例如找猫时我们先找水平线可能是胡须若干胡须的组合才告诉我们这是一只猫。模式之间的相对位置和是否存在很重要而不是它们出现在像素坐标中的精确位置。这正是 CNN 要解决的问题不再依赖像素的绝对位置而是在图片各处搜索可迁移的模式。卷积滤波器用滑动窗口提取模式要提取模式我们引入**卷积滤波器convolutional filters的概念。图像本身是一个 2D 矩阵或带颜色深度的 3D 张量。应用滤波器意味着取一个相对较小的滤波器核filter kernel**矩阵对原始图像中的每个像素计算其与邻域的加权平均值。可以把它想象成一个小窗口在整幅图像上滑动按照核矩阵中的权重对像素做平滑处理。以两个经典的 3x3 边缘滤波器为例|垂直边缘滤波器由如下矩阵定义可在 ConvNetsPyTorch.ipynb 中通过plot_convolution复现-1 0 1 -1 0 1 -1 0 1当这个滤波器滑过相对均匀的像素区域时所有值相加为 0但一旦遇到图像中的垂直边缘就会产生一个明显的尖峰响应。因此从滤波结果中可以看到垂直边缘被高亮出现高低值而水平边缘被平均掉。水平边缘滤波器则恰好相反水平线被增强垂直线被平均掉。除此之外还可以设计更多滤波器去寻找其他低层模式例如 Leung-Malik 滤波器组覆盖了不同方向、不同尺度的纹理响应在经典计算机视觉中人们就是这样手工设计一批滤波器来生成特征再交给机器学习算法做分类。而深度学习的核心突破在于不再手工设计滤波器而是让网络自己学习最优的卷积滤波器来解决分类问题。CNN 的三大核心思想CNN 的工作原理建立在如下关键观点之上卷积滤波器能够提取模式——上述边缘滤波器就是明证可以设计网络使滤波器自动被训练——滤波器权重就是网络的参数通过反向传播学习同一套方法可以用于高层特征——不仅能从原始图像提取低层模式还能在上一层特征之上继续找更复杂的组合。因此 CNN 的特征提取工作在特征的层次结构上运行从低层的像素组合逐级上升到图像部件的组合。这意味着第一层卷积层寻找横线、竖线等原始模式后续卷积层在它们之上组合出基本形状、图像部件直到最终要分类的完整对象。动手实验让滤波器可训练本课提供了两份配套笔记本建议逐步运行卷积神经网络 - PyTorch卷积神经网络 - TensorFlowPyTorch 笔记本依赖同目录下的 pytorchcv.py 辅助脚本其中提供了load_mnist加载 MNIST、train/train_epoch/validate训练与验证、plot_convolution可视化滤波器作用效果、plot_results绘制训练曲线等函数。TensorFlow 侧对应的 tfcv.py 提供了功能类似的plot_convolution、plot_results与数据加载工具。单卷积层网络OneConv在 PyTorch 中卷积层用nn.Conv2d构造需要指定三个关键参数参数含义典型值in_channels输入通道数灰度图 1RGB 图 3out_channels使用的滤波器数量如 9kernel_size滑动窗口尺寸通常 3x3 或 5x5最简单的 CNN 只含一个卷积层输入为 28x28 的灰度 MNIST 图像经过 9 个 5x5 滤波器后得到 9x24x24 的张量空间尺寸变小因为长度为 5 的窗口在 28 个像素中只能滑动出 24 个位置。随后把 9x24x24 展平为 5184 维向量接一个线性层输出 10 个类别中间用relu激活class OneConv(nn.Module): def __init__(self): super(OneConv, self).__init__() self.conv nn.Conv2d(in_channels1, out_channels9, kernel_size(5, 5)) self.flatten nn.Flatten() self.fc nn.Linear(5184, 10) def forward(self, x): x nn.functional.relu(self.conv(x)) x self.flatten(x) x nn.functional.log_softmax(self.fc(x), dim1) return x用torchinfo.summary查看参数量该网络仅约5.2 万个可训练参数而此前课程中的全连接多层网络约为 8 万。参数更少意味着泛化更好即使在小数据集上也能取得良好效果——仅 5 个 epoch 训练验证精度就达到了 97% 以上。训练完成后还可以把学到的 9 个滤波器权重可视化会发现其中一些已能识别斜向笔画另一些则看起来随机——这正是网络自主探索特征空间的体现。多层 CNN 与池化层只用一层卷积虽然不错但更好的做法是叠加多层卷积第一层找横竖线等原始模式第二层组合出基本形状更多层则组合出图像部件直至完整对象。在此过程中有一个关键技巧缩小空间尺寸。一旦检测到某个 3x3 窗口内有水平笔画它究竟出现在哪个确切像素就不那么重要了于是可以用池化层pooling layer缩小图像平均池化Average Pooling取滑动窗口如 2x2内数值的平均值最大池化Max Pooling用窗口内的最大值替换窗口其思想是检测窗口中是否存在某模式。于是典型 CNN 由若干卷积层构成层间穿插池化层来缩小图像尺寸同时不断增大滤波器数量——因为模式越复杂值得搜索的组合就越多。由于空间维度递减而特征/滤波器维度递增这种架构被称为金字塔架构pyramid architecture。多层 CNN 的参数量可大幅下降示例MultiLayerCNNconv1Conv2d(1,10,5)、poolMaxPool2d(2,2)、conv2Conv2d(10,20,5)、fcLinear(320,10)只有约8.5K参数——因为卷积层本身参数很少而进入全连接层前的特征维度已被显著压缩。小参数量有助于在小数据集上防止过拟合而且只需 1~2 个 epoch 就能达到比单层网络更高的精度更精巧的网络结构需要更少数据就能提炼出通用模式。进阶CIFAR-10 与 LeNet为了摆脱玩具级的手写数字任务笔记本还进一步探索了 CIFAR-10 数据集6 万张 32x32 图片10 个类别。经典架构 LeNet 遵循同样的原则主要区别是输入变为 3 个颜色通道nn.Conv2d(3, 6, 5)并且不再用log_softmax作为输出激活而是直接返回最后一个全连接层的输出配合CrossEntropyLoss优化。完整 LeNet 约 5.9 万参数3 个 epoch 在 CIFAR-10 上可取得 50% 以上的验证精度——考虑到随机猜测只有 10%且该任务远比 MNIST 困难这一结果已是不错的起点。注意要完整训练这类网络最好在 GPU 上运行。金字塔架构以 VGG-16 为例绝大多数用于图像处理的 CNN 都遵循金字塔架构作用于原始图像的第一个卷积层通常只有较少滤波器8~16 个对应横/竖线、笔画等像素组合下一层则缩小空间维度、增加滤波器数量以覆盖更多简单特征的组合。每向最终分类器前进一步图像的空间尺寸就缩小一次、滤波器数量就增长一次。VGG-16 是 2014 年在 ImageNet top-5 分类上达到92.7% 精度的代表性网络其结构就是一系列卷积-池化层的经典金字塔从图中可以看到VGG-16 遵循传统的金字塔式卷积-池化序列通道数逐层翻倍64→128→256→512同时特征图的空间尺寸逐级减半。其他经典 CNN 架构速览进一步学习可参考同目录的 CNN_Architectures.md其中介绍了以下四种里程碑式架构ResNet残差块ResNet 由微软研究院于 2015 年提出核心思想是使用残差块residual blocks引入一条恒等直连identity pass-through让层去预测上一层输出与残差块输出之间的差值——残差residual由此得名。这些块更易训练可以堆叠数百层常见变体有 ResNet-52、ResNet-101、ResNet-152。可以把这种网络理解为能够根据数据集自适应复杂度训练初期权重值很小大部分信号走恒等直连通道随着训练推进权重变大网络参数的意义逐渐增强网络自适应地获得正确分类训练图像所需的表达能力。Google Inception多路径与 1x1 卷积Inception 架构更进一步把每个网络层构建为若干不同路径的组合。这里要特别强调1x1 卷积的作用乍看之下用 1x1 滤波器扫描图像似乎没有意义但请记住卷积滤波器同时作用于多个深度通道原始输入是 RGB 颜色后续层则是不同滤波器的输出通道——1x1 卷积就是用可训练权重把这些输入通道混合起来也可以视为沿通道维度的降采样pooling。MobileNet深度可分离卷积MobileNet 是一族体积缩小、适合移动设备的模型。在资源紧张、可以牺牲一点精度时适用。其核心是深度可分离卷积depthwise separable convolution把卷积滤波器分解为空间卷积与沿深度通道的 1x1 卷积的组合从而显著减少参数量使网络更小、也更容易用较少数据训练。总结与课后挑战本课的核心结论推动图像分类、目标检测乃至图像生成的真实架构本质上都是 CNN——只是层数更多、叠加了更多训练技巧。你还可以把 CNN 的思想迁移到其他任务处理音频时用 1 维滤波器1D-CNN寻找声音信号中的模式处理视频中的时序事件时用 3D-CNN 捕捉特征随时间变化的模式。配套的 实验室任务PetFaces.ipynb要求你用牛津-IIIT Pet 数据集从头训练一个 CNN对 37 个猫狗品种进行分类——类别多、图像远比 MNIST 复杂是一个从零解决真实图像分类问题的完整挑战。此外两份笔记本末尾都附有提升精度的提示不妨动手实验尝试在现有架构基础上取得更高精度。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐卷积神经网络CNN全面指南从卷积滤波器到金字塔架构 —— AI for Beginners 第 7 课精讲与实战卷积神经网络CNN全面指南从卷积滤波器到金字塔架构 —— AI for Beginners 第 7 课精讲与实战 本文围绕 AI for Beginner教程人工智能机器学习深度学习AI-For-Beginners 课程从卷积滤波器到 CNN 金字塔架构——手写数字识别的深度学习实战指南AI For Beginners 课程从卷积滤波器到 CNN 金字塔架构——手写数字识别的深度学习实战指南 导读 本篇指南基于 AI For Beginner教程人工智能机器学习深度学习AI-For-Beginners 卷积神经网络CNN实战指南从卷积核原理到 LeNet 与经典架构AI For Beginners 卷积神经网络CNN实战指南从卷积核原理到 LeNet 与经典架构 导读 卷积神经网络Convolutional Neu教程人工智能机器学习深度学习上一篇3步搞定DeepCode部署从零到精通的完整指南下一篇Select2 4.1 版本发布现代化下拉搜索的全面进化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表