图像识别—深度学习模型理论与实战
内容简介
本书专注于深度学习在图像识别领域的应用。不仅详细讲解了各种模型的理论知识,还为读者提供了丰富的实践操作指南。旨在为读者提供一个从基础到高级的全方位指导,涵盖2012至2023间的经典和前沿模型。
本书在第一章介绍了人工智能在计算机视觉领域的现状,第二章和第三章是编程基础章节,有基础的同学可以跳过阅读。第四章和第五章详细讲解了卷积算法和基于卷积算法具有里程碑意义的模型。第六章介绍了工业中常用的轻量级卷积模型。第七章和第八章对现阶段前沿的图像识别模型进行了讲解。
本书适合对图像识别领域感兴趣的本科生、研究生、以及图像识别从业者。对于新入门的同学,本书提供了丰富的预备知识;而对于有经验的读者,可以直接跳入高级章节。
前 言
随着技术的迅速发展,深度学习已经从一个边缘领域转变为现代技术革命的核心。在这个浪潮中,图像识别显得尤为重要,它已经渗透到我们日常生活的方方面面,从简单的面部解锁手机到高级的医疗图像分析,再到自动驾驶汽车的视觉系统。
决定写这本书的时候,笔者首先考虑到了这个领域的巨大潜力和广阔的应用前景。但更重要的是,笔者意识到当前市场上的大部分教材太过专业化,难以为初学者所接受;或者内容过于浅显,无法满足专业人员的需求。因此,笔者希望《深度学习图像识别指南》能够填补这个空白,为所有对图像识别感兴趣的读者提供一个全面而深入的指南。
这本书既包含了基础知识,为初学者铺设坚实的基础,也涵盖了高级主题,供有经验的研究者或从业者探索。我们将从图像识别的历史和发展趋势开始,然后逐步深入每一个主题,确保读者可以从中得到真正的价值。
随着深度学习技术的进步,图像识别的门槛正在逐渐降低。但这也意味着,为了在这个领域脱颖而出,我们需要更深入的知识和更强大的技能。笔者希望这本书能够成为读者学习和进步的伴侣,帮助读者走在这条充满机遇和挑战的道路上。
本书主要内容
第1章:概述了人工智能在视觉领域的现状、挑战和展望。
第2章:指导读者进行深度学习的环境配置。
第3章:介绍编程语言Python和深度学习框架PyTorch的基础知识。
第4章:深入探讨卷积神经网络及其在图像识别中的应用。
第5章:呈现了一系列卷积算法的里程碑模型,并探讨它们为何成为视觉任务的基准模型。
第6章:关注轻量级的卷积神经网络模型,及这些模型在工业部署中具有重要价值。
第7章:深入探索起源于NLP领域的Transformer模型在图像识别中的应用,及其如何挑战了卷积在计算机视觉领域的主导地位。
第8章:Transformer与卷积算法的碰撞引起了CV领域专家对算法的重新思考。他们发现基于原始神经网络模型(MLP)同样可以达到不错的图像识别效果。第八章就介绍了这些基于原始神经网络算法的图像识别模型,并对之前的算法进行对比和评价。
阅读建议
初学者可以从第1章开始,逐步建立对图像识别和深度学习的基础理解,然后按章节的推进顺序逐渐深入。特别是第2章和第3章,为读者提供了实际操作的起点,介绍了如何配置深度学习环境以及编程基础。
对于那些已经对深度学习有一定了解的读者,第4章和第5章将为您提供更深入的知识,让您对卷积神经网络有更全面的了解。而第6章到第8章则探讨了图像识别领域的最新进展和趋势,对于那些希望进一步研究或在实际工作中应用这些技术的专业人士来说,这些章节尤为重要。
总之,无论您是新手还是有经验的研究者,我们都建议您按照自己的节奏和兴趣选择章节进行阅读。每章都有详尽的参考资料和实践建议,确保读者能够充分利用这本书的内容。本书源代码
目录
第一章 人工智能介绍
1.1什么是人工智能
1.2人工智能的三次浪潮
1.2.1 人工智能的第一次浪潮
1.2.2 人工智能的第二次浪潮
1.2.3 人工智能的第三次浪潮
1.3人工智能发展的必备三要素
1.3.1人工智能发展的基石:数据
1.3.2人工智能发展的动力:算法
1.3.3人工智能发展的手段:算力
1.4人工智能的美好愿景
1.4.1乌鸦与鹦鹉的启示
1.4.2人工智能到底有多智能
第二章 深度学习环境配置
2.1 专业名称和配置方案介绍
2.1.1 专业名称介绍
2.1.2 Window配置PyTorch深度学习环境初级方案
2.1.3 Window配置PyTorch深度学环境进阶方案
2.2 Anaconda配置Python和PyTorch
2.2.1 Anaconda简介
2.2.2 Window系统安装Anaconda
2.2.3 Linux系统安装Anaconda
2.2.4 Anaconda的快速入门
2.2.5 Anaconda配置PyTorch深度学习环境
2.3 配置VS Code和Jupyter的Python环境
2.3.1 VS Code下载与安装
2.3.2 VS Code配置Python环境
2.3.3 Jupyter Notebook中配置Python环境
2.4 配置Windows11和Linux双系统
2.4.1 Windows11配置WSL2的详细步骤
2.4.2 Windows11配置WSL2的常见错误
2.4.3 VS Code远程连接WSL2
2.5配置Docker深度学习开发环境
2.5.1 Docker安装的先决条件
2.5.2 安装Docker Desktop
2.5.3 拉取Docker镜像
2.5.4 快速入门Docker终端的使用
2.5.5 VS Code使用Docker的快速入门
第三章 编程语言快速入门
3.1 Python的起源、历史和应用
3.1.1 Python的起源
3.1.2 Python的历史
3.1.3 Python的应用场景
3.2 Python的基础知识
3.2.1 注释
3.2.2 六大数据类型
3.3 Python的判断与循环语句
3.3.1 比较运算符和关系运算符
3.3.2 判断语句
3.3.3 循环语句
3.4 Python中的函数
3.4.1 函数的定义
3.4.2 函数中的变量
3.4.3 高级函数用法
3.4.4 Python中的文件操作函数
3.5 Python中的面向对象编程
3.5.1 面向对象编程 VS 面向过程编程
3.5.2 类与对象
3.5.3 魔法方法
3.5.4 类属性和类方法
3.5.5 继承
3.5.6 多态
3.5.7 模块的介绍和制作
3.5.8 Python中的包和库
3.5.9 Python的pip命令
3.6 PyTorch的基础知识
3.6.1 PyTorch的基本数据类型
3.6.2 张量的索引,切片与维度变换
3.6.3 张量的拼接,拆分与统计
第四章 卷积神经网络理论基础
4.1全连接神经网络
4.1.1线性模型
4.1.2 回归与分类
4.1.3 感知机模型
4.1.4 激活函数
4.1.5 维度诅咒
4.1.6 过拟合与欠拟合
4.1.7正则
4.1.8数据增强
4.1.9数值不稳定性
4.2 基于梯度下降的优化算法
4.2.1 优化算法的数学基础
4.2.2 优化器
4.3 卷积神经网络
4.3.1 卷积神经网络的计算
4.3.2卷积的设计思想
4.3.3卷积对图像的特征提取过程
4.3.4卷积模型实现图像识别
4.3.5卷积神经网络的层级结构和感受野
4.3.6第一个卷积神经网络模型:LeNet
第五章 那些年我们追过的ImageNet图像识别大赛
5.1 ImageNet
5.1.1 什么是ImageNet?
5.1.2 ImageNet数据集
5.1.3 ImageNet图像分类大赛
5.2 AlexNet:拉开深度学习序幕
5.2.1 AlexNet理论
5.2.2 AlexNet代码
5.2.3 AlexNet小结
5.3 ZFNet:开创卷积模型的可解释性
5.3.1 ZFNet简介
5.3.2 对卷积计算结果的可视化
5.3.3 网络中对不同特征的学习速度
5.3.4 图片平移,缩放,旋转对CNN的影响
5.3.5 ZFNet的改进点
5.3.6 遮挡对卷积模型的影响
5.3.7 ZFNet的调参实验
5.3.8 ZFNet的模型代码实现
5.3.9 ZFNet小结
5.4 VGGNet: 探索深度的力量
5.4.1 VGGNet模型总览
5.4.2 网络贡献总结
5.4.3 VGGNet的模型代码实现
5.4.4 VGGNet模型小结
5.5 GoogLeNet:探索宽度的力量
5.5.1 GoogLeNetV1
5.5.2 GoogLeNetV2
5.5.3 GoogLeNetV3
5.5.4 GoogLeNetV4
5.5.5 GoogLeNetV5
5.6 ResNet:神来之“路”
5.6.1 深度学习网络退化问题
5.6.2残差连接
5.6.3 ResNet模型的网络结构
5.6.4 残差的调参
5.6.5 残差连接的渊源
5.6.6 残差连接有效性的解释
5.6.7 ResNet的变体
5.6.8 ResNeXt
5.7 DenseNet:特征复用真香
5.7.1 模型设计动机
5.7.2 DenseNet模型结构
5.7.3 DenseNet模型比较
5.8 SENet:通道维度的注意力机制
5.8.1 SENet模型总览
5.8.2 SE模块
5.8.3 SENet效果
5.8.4 SENet模型小结
第六章 易于应用部署的轻量卷积模型
6.1 MobileNet V1
6.1.1 模型设计动机
6.1.2深度可分离卷积
6.1.3 MBConv模块
6.1.4 MobileNet V1网络结构
6.1.5 MobileNet V1模型小结
6.2 MobileNet V2
6.2.1 逆残差结构
6.2.2 线性瓶颈结构
6.2.3 MobileNet V2网络结构
6.2.4 MobileNet V2模型小结
6.3 MobileNet V3
6.3.1优化网络深层结构
6.3.2 h-swish激活函数
6.3.3 Squeeze-and-Excite
6.3.4 MobileNet V3模型结构
6.3.5 MobileNet V3小结
6.4 ShuffleNet V1
6.4.1 组卷积
6.4.2 通道打散操作
6.4.3 ShuffleNet模块
6.4.4 ShuffleNet V1模型结构
6.4.5 ShuffleNet V1小结
6.5 ShuffleNet V2
6.5.1 ShuffleNet V2模型设计动机
6.5.2 轻量级网络设计的5个经验总结
6.5.3 ShuffleNet V2模型结构
6.5.4 ShuffleNet V2小结
6.6 EfficientNet V1
6.6.1 EfficientNet V1模型设计动机
6.6.2 模型的三种缩放方法
6.6.3 EfficientNet V1模型的缩放比率
6.6.4 EfficientNet V1模型结构
6.6.5 EifficientNet V1小结
6.7 EifficentNet V2
6.7.1 EifficentNet V2模型设计动机
6.7.2 EifficentNet的问题
6.7.3 EfficientNet V2的改进
6.7.4 EifficentNet V2小结
6.8 RepVGG
6.8.1 RepVGG模型设计动机
6.8.2 RepVGG模型架构
6.8.3 RepVGG重参数化
6.8.3 RepVGG小结
第七章 Transformer的强势入侵
7.1 Transformer模型
7.1.1 Transformer算法解读
7.1.2 自注意力层
7.1.3多头自注意力层
7.1.4 编码器结构
7.1.5 解码器结构
7.1.6 线性顶层和Softmax层
7.1.7 输入数据的向量化
7.1.8 Transformer小结
7.2 Vision Transformer模型
7.2.1 ViT框架
7.2.2 图片数据的向量化
7.2.3 VIT的Transformer编码器
7.2.4 MLP Head模块
7.2.5 模型缩放
7.2.6 混合ViT模型
7.2.7 ViT小结
7.3 Swin Transformer
7.3.1 网络整体框架
7.3.2 Patch Merging详解
7.3.3 W-MSA详解
7.3.4 SW-MSA详解
7.3.5 相对位置偏置详解
7.3.6 Swin Transformer模型详细配置参数
7.3.7 Swin Transformer模型讨论与总结
7.4 视觉注意力网络
7.4.1 相关工作
7.4.2 大核注意力机制
7.4.3 视觉注意力网络
7.4.4 VAN模型小结
7.5 ConvNeXt
7.5.1 模型和训练策略选择
7.5.2 Macro Design
7.5.3 模仿ResNeXt模型
7.5.4 Inverted Bottleneck反向瓶颈结构
7.5.5 Large Kernel Sizes
7.5.6 Micro Design
7.5.7 ConvNeXt 模型缩放
7.5.8 ConvNeXt小结
第八章 多层感知机的重新思考
8.1 MLP-Mixer
8.1.1 Per-patch全连接层
8.1.2 Mixer-Layer代替自注意力机制
8.1.3 MLP-Mixer模型结构
8.1.4 MLP-Mixer小结
8.1.5 MLP-Mixer模型实现
8.2 AS-MLP
8.2.1 AS-MLP模块
8.2.2 AS-MLP模型结构
8.2.3 AS-MLP代码实现
8.2.4 AS-MLP模型小结
8.3 ConvMixer
8.3.1 图像编码成向量
8.3.2 ConvMixer模块
8.3.3 ConvMixer网络结构
8.3.4 ConvMixer代码实现
8.3.5 ConvMixer小结
8.4 MetaFormer
8.4.1 MetaFormer模型
8.4.2 MetaFormer架构
8.4.3 MetaFormer代码实现
8.4.4 MetaFormer小结
致谢
感谢所有支持我、鼓励我和为这本书提供宝贵建议的人。没有你们,这本书将不会成为现实。
感谢佟天旭,徐梓源,刘慕晴,刘永昊对本书内容的整理,校对和修改。
感谢吴骏文,孙衍哲,马程远,刘子瑞对本书格式的编辑和整理。
感谢我的妻子和家人,在我写作过程中承担了生活的琐事,使我可以全身心地投入写作工作。 由于时间仓促,书中难免存在不妥之处,请读者见谅,并提宝贵意见。
[于浩文]
[2023.08.14]
作者
arwin.yu.98@gmail.com