版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机视觉项目开发实战
(微课版)项目十工业零件质检—卷积神经网络基础思维导图学习目标概览能够实现CNN模型的基础搭建与训练知识目标学习目标素养目标技能目标培养精益求精的工匠精神培养社会责任感与合理使用资源的意识培养科学严谨的工作作风能够优化模型训练过程与性能能够应用经典CNN模型与迁移学习熟悉经典CNN模型的改进思路掌握CNN的组成模块的作用理解深度学习模型训练的关键机制掌握迁移学习的理论与应用方法目录项目导入知识准备项目拓展项目实施项目巩固10.1CNN基础10.2深度学习模型训练基础10.3经典CNN模型与改进10.4迁移学习与模型微调PART01项目导入项目导入工业生产的高效性与产品质量把控,已成为国家制造业竞争力的核心要素。工业零件作为各类精密设备的基础构成单元,每一个缺陷都有可能引发连锁反应,甚至造成严重的生命财产损失。工业智能质检是突破“卡脖子”技术、保障产业链自主可控的核心环节。因此,在构建工业零件缺陷检测模型时,我们不仅应追求算法在精度与效率上的卓越表现,更需将科学严谨、一丝不苟的态度贯穿于数据采集、模型设计、训练优化与评估验证的全过程。以“精益求精”的工匠精神编写每一段代码PART02知识准备知识准备—CNN基础10.1.1卷积层卷积运算原理卷积层的核心是卷积核(滤波器),它在输入图像上滑动并进行加权求和,提取局部特征。卷积运算公式如下:其中:表示输出特征在位置的值。表示输入特征图(或输入图像)。表示卷积核。表示卷积核的大小。表示偏置项。知识准备—CNN基础10.1.1卷积层卷积运算原理图10-1展示了卷积运算的具体过程。其中,输入特征图的大小为3×3,卷积核的大小为2×2,输出特征图的大小为2×2。蓝色背景部分表示一次卷积运算,结果为0×0+1×1+3×2+4×3=19。图10-1卷积运算知识准备—CNN基础10.1.1卷积层卷积核大小与步长根据图10-1的卷积运算过程可以看出,当卷积核大于1×1时,经过卷积之后,输出特征图小于输入特征图。按照这样的方式经过多层卷积之后,输出特征图将会远小于输入特征图,造成输入特征图的边界信息大量丢失。为有效解决该问题,通常采用在输入特征图边界填充元素(如填充元素0)的方式,如图10-2所示。图10-2填充操作知识准备—CNN基础10.1.1卷积层卷积核大小与步长卷积运算中的步长指的是卷积核每次移动的元素个数(通常为1),步长越大,得到的输出特征图越小。图10-3展示的是步长为3的卷积运算过程,将大小为5×5的输入特征图,经过步长为3,卷积核大小为2×2的卷积运算之后,得到一个大小为2×2的输出特征图,图中的不同颜色表示每次卷积运算对应位置的卷积结果。图10-3步长为3的卷积运算知识准备—CNN基础10.1.1卷积层特征图与感受野特征图(FeatureMap)是每层卷积的输出结果。卷积核在输入特征图上滑动时,在每个位置都会计算一个加权和,最终得到一个新的二维矩阵,这个矩阵就被称为输出特征图。输入特征图经过不同卷积核,可以生成多个输出特征图,每个输出特征图旨在捕捉图像的某一类特征(如水平边缘、垂直边缘、斑点、纹理等)。感受野(ReceptiveField)指的是输出特征图的某个元素在输入特征图上对应的区域大小,即当前输出特征图的一个元素值是由前一层输入特征图的范围决定的。在单个卷积层中,感受野等于卷积核的大小。当网络层数不断增加时,感受野会逐层叠加和扩大。随着网络层数的增加,特征图中每个元素的感受野将逐渐覆盖整幅图像。知识准备—CNN基础10.1.1卷积层—案例【例10-1】使用PyTorch构建一个包含单个卷积层的简单模型,并查看输入特征图、卷积核和输出特征图的元素值及其形状。根据题目要求,编写代码如下:知识准备—CNN基础10.1.1卷积层—案例【例10-1】使用PyTorch构建一个包含单个卷积层的简单模型,并查看输入特征图、卷积核和输出特征图的元素值及其形状。运行上述程序,输出结果如下:知识准备—CNN基础10.1.2池化层平均池化层池化层主要用于对特征图进行下采样,降低数据维度和参数量,同时提高模型的平移不变性。它通过一个固定大小的窗口在输入特征图上滑动,遍历其所有位置并分别输出一个值。平均池化(AveragePooling)层会输出特征图中滑动窗口内的平均值,平均池化操作如图10-4所示。图10-4平均池化操作知识准备—CNN基础10.1.2池化层最大池化层最大池化(MaxPooling)层会输出特征图中滑动窗口内的最大值,最大池化操作如图10-5所示。图10-5最大池化操作知识准备—CNN基础10.1.2池化层—案例【例10-2】使用PyTorch分别演示平均池化和最大池化操作。根据题目要求,编写代码如下:知识准备—CNN基础10.1.2池化层—案例【例10-2】使用PyTorch分别演示平均池化和最大池化操作。运行上述代码,输出如下结果:知识准备—CNN基础10.1.3激活函数ReLU激活函数激活函数是神经网络中引入非线性特性的关键,使模型能够拟合复杂的非线性关系。ReLU激活函数具有简单高效、计算开销小等特点,能够缓解梯度消失问题,是目前在CNN中最常用的激活函数之一。当输入为负值和0时,该函数输出0,当输入为正值时该函数输出结果保持线性增长,其图像如图10-6所示,定义如下:图10-6ReLU激活函数图像知识准备—CNN基础10.1.3激活函数LeakyReLU激活函数LeakyReLU激活函数通过在负区间保留一个很小的斜率,以解决ReLU激活函数容易出现的“神经元死亡”问题,函数图像如图10-7所示。它适合在深度网络或稀疏特征学习任务中使用,其定义如下:图10-7LeakyReLU激活函数图像知识准备—CNN基础10.1.3激活函数Softmax激活函数Softmax激活函数将一组实数映射为概率分布(所有输出非负且和为1),常用于分类任务的输出层,能直接得到各类别的概率,其定义如下:知识准备—CNN基础10.1.3激活函数—案例【例10-3】使用PyTorch分别演示ReLU、LeakyReLU和Softmax这3种激活函数的使用方法和输出结果。根据题目要求,编写代码如下:知识准备—CNN基础10.1.3激活函数—案例【例10-3】使用PyTorch分别演示ReLU、LeakyReLU和Softmax这3种激活函数的使用方法和输出结果。运行上述代码,输出如下结果:知识准备—CNN基础10.1.4全连接层与输出层—案例全连接层位于CNN的后端,用于将执行卷积和池化操作提取的特征映射到分类空间。输出层通常结合Softmax激活函数,将最终结果转化为类别概率,实现具体的识别或分类任务。源代码地址文件
ex10-4.py见教材配套代码,路径如下:src/proj10/ex10-4.py根据题目要求,编写代码如下:【例10-4】使用PyTorch构建一个简单的CNN分类模型,模型中包含卷积层、激活函数、最大池化层、全连接层和输出层。知识准备—CNN基础10.1.4全连接层与输出层—案例【例10-4】使用PyTorch构建一个简单的CNN分类模型,模型中包含卷积层、激活函数、最大池化层、全连接层和输出层。运行上述代码,输出如下结果:前向传播(ForwardPropagation)指的是输入数据依次经过神经网络的各层(卷积层、池化层、全连接层等),逐步计算出输出结果的过程。例如,在工业零件质检中,对输入的零件图像进行前向传播,最终得到“合格/不合格”的预测概率。反向传播(Backpropagation)指的是基于链式法则的梯度计算方法,用于将预测结果与真实标签的差异(损失)逐层传回网络,并更新卷积核权重和偏置参数。通过反复的前向与反向传播迭代,模型不断减小误差,从而学会自动识别零件缺陷。知识准备—深度学习模型训练基础10.2.1前向传播与反向传播知识准备—深度学习模型训练基础10.2.1前向传播与反向传播—案例【例10-5】使用PyTorch构建一个简单的线性模型,并输出前向传播和反向传播的梯度值。根据题目要求,编写代码如下:知识准备—深度学习模型训练基础10.2.1前向传播与反向传播—案例【例10-5】使用PyTorch构建一个简单的线性模型,并输出前向传播和反向传播的梯度值。运行上述代码,输出如下结果:知识准备—深度学习模型训练基础10.2.2损失函数均方误差损失函数是衡量模型预测结果与真实标签之间差异的指标,它为模型的参数更新提供了方向。均方误差(MeanSquareError,MSE)计算预测值与真实值之间差的平方并取平均。该损失函数适用于回归任务,能反映整体误差大小,对离群点敏感,误差大的样本会被放大。MSE损失函数的定义如下:其中:表示样本总数。表示第个样本的真实值(GroundTruth)。表示第个样本的预测值(模型的输出值)。知识准备—深度学习模型训练基础10.2.2损失函数平均绝对误差平均绝对误差(MeanAbsoluteError,MAE)计算预测值与真实值之差的绝对值并取平均。MAE适用于回归任务。相比MSE,MAE对离群点不那么敏感,但在零点处不可导(实际训练中通常用次梯度或平滑替代)。该损失函数的定义如下:知识准备—深度学习模型训练基础10.2.2损失函数Huber损失Huber损失(HuberLoss)在误差较小时使用平方项(类似MSE,梯度稳定),误差较大时使用线性项(类似MAE,抑制离群点影响)。该损失函数常用于鲁棒回归,其定义如下:其中:表示分段阈值(超参数),用于控制从平方惩罚到线性惩罚的切换位置。知识准备—深度学习模型训练基础10.2.2损失函数交叉熵损失交叉熵损失用于度量预测的概率分布与真实分布之间的差异。该损失函数常用于分类任务,能有效区分不同类别。当预测概率与真实标签差距大时,损失值增幅显著,从而显著推动模型参数的调整。该损失函数的定义如下:其中:表示类别总数。知识准备—深度学习模型训练基础10.2.2损失函数焦点损失焦点损失常用于类别极不平衡的分类任务(如目标检测)。它会降低“容易样本”(置信度较高)的损失权重,从而让模型更关注“难样本”(置信度较低)。该损失函数的定义如下:其中:表示样本对真实类别的预测概率。表示类别平衡系数。表示聚焦因子(时更强调难样本)。知识准备—深度学习模型训练基础10.2.2损失函数—案例源代码地址文件
ex10-6.py见教材配套代码,路径如下:src/proj10/ex10-6.py【例10-6】使用PyTorch分别计算上述5种损失。根据题目要求,编写代码如下:知识准备—深度学习模型训练基础10.2.2损失函数—案例【例10-6】使用PyTorch分别计算上述5种损失。运行上述代码,输出如下结果:知识准备—深度学习模型训练基础10.2.3优化算法SGD随机梯度下降法(StochasticGradientDescent,SGD)的核心思想是每次迭代从训练集中随机抽取一个或小批量样本,计算梯度并更新模型参数。该优化算法具有实现简单、计算效率高等特点,适合大规模数据训练。但SGD的更新方向受样本随机性影响,可能收敛速度慢或在最优点附近振荡,因此常配合学习率衰减策略使用。动量SGD动量SGD在SGD的基础上引入历史梯度的累积效应,使参数更新具有“惯性”。它能显著减小振荡、加速收敛,尤其在复杂曲面或噪声梯度下更稳定。相比SGD,动量SGD通常能更快达到较小损失,但需要合理设置动量系数,并与学习率衰减策略配合,才能取得更理想的训练效果。知识准备—深度学习模型训练基础10.2.3优化算法NGANesterovAcceleratedMomentum(NAG)是动量SGD的改进版本,其核心思想是在更新前对未来位置进行“前瞻”,再据此修正梯度方向。与动量SGD相比,NAG往往能更早发现方向偏差,使收敛过程更平滑、稳定,在接近最优点时不易过冲。它仍属于SGD系列,通常与学习率衰减策略配合使用,适合希望保留SGD泛化优势同时提升收敛效率的场景。AdaGradAdaGrad是一种自适应学习率优化算法,会根据参数在历史训练过程中累计的梯度大小来调整其更新步长:使“经常出现大梯度”的参数逐渐降低学习率,使“很少更新、梯度稀疏”的参数保持相对较高的学习率。但其缺点是学习率会不断衰减,训练后期可能变得过低,导致更新几乎停滞。知识准备—深度学习模型训练基础10.2.3优化算法RMSPropRMSProp属于自适应学习率优化算法,会根据近期梯度的变化为不同参数动态调整学习率,从而缓解不同维度梯度尺度差异带来的训练不稳定问题。它在非平稳目标、噪声较大或梯度稀疏的情况下常表现良好,训练收敛速度较快且不易振荡。其缺点是超参数仍需调节,且在部分任务上最终泛化效果不一定优于精心设置的SGD系列。AdamAdam(AdaptiveMomentEstimation)在SGD的基础上引入动量和自适应学习率综合考虑梯度的一阶矩估计(均值)和二阶矩估计(方差)。该优化算法的收敛速度快,对不同参数能动态调整学习率,适用于非平稳或稀疏梯度问题。但在某些任务中其容易过快收敛到局部最优,需要配合学习率衰减策略。Adam是目前深度学习中最常用的优化算法之一,广泛应用于图像识别、自然语言处理等任务。知识准备—深度学习模型训练基础10.2.3优化算法AdamWAdamW是Adam的改进版本,其在权重衰减的实现方式上更为合理,使正则化效果更稳定、泛化性能更可靠。它是Transformer等架构的常用选择,通常比Adam更不容易出现“收敛速度很快但泛化效果一般”的问题。实际使用中,AdamW仍需要设置合适的学习率、权重衰减系数和调度策略,但整体调参成本较低,适合多数深度学习任务。知识准备—深度学习模型训练基础10.2.3优化算法—案例源代码地址文件
ex10-7.py见教材配套代码,路径如下:src/proj10/ex10-7.py【例10-7】分别使用上述优化算法演示模型参数更新前后的变化。根据题目要求,编写代码如下:知识准备—深度学习模型训练基础10.2.3优化算法—案例【例10-7】分别使用上述优化算法演示模型参数更新前后的变化。根据题目要求,编写代码如下:知识准备—深度学习模型训练基础10.2.4正则化方法L1正则化正则化方法的核心功能就是降低模型的复杂度、提高其泛化能力,使模型不仅能“记住”训练数据,还能对新数据进行有效预测。L1正则化通过在损失函数中添加权重的绝对值之和,使很多不重要的权重被压缩到接近0,从而形成稀疏解。它的直观效果是“自动做特征选择”,这对高维、冗余特征较多的问题(如部分表格数据、线性模型)尤其有用。L2正则化L2正则化是一种在损失函数中添加权重的平方和的方法,主要作用是抑制过大权重,使模型更“平滑”,从而降低过拟合的风险。它通常不会产生稀疏解,而是让权重整体更小、更稳定。在深度学习训练中其更常见的实现方式是权重衰减,本质上也是限制权重大小。需要注意的是,在自适应学习率优化算法(如Adam)里,把权重的平方和直接加到损失函数里与“权重衰减”的效果并不完全一致。知识准备—深度学习模型训练基础10.2.4正则化方法ElasticNetElasticNet将L1正则化的稀疏性和L2正则化的稳定性结合起来,既能促使部分权重变为0(筛选特征),又能避免L1正则化在强相关特征下“随机选择某一个”的不稳定现象。ElasticNet在特征相关性很强同时又希望模型稀疏的场景(如高维回归、表格数据、线性分类)中更有优势。DropoutDropout正则化方法指的是在训练过程中,以一定的概率随机“丢弃”一部分神经元(即令其输出为0),让网络不过度依赖某些特定特征。这相当于在训练时动态地构建不同的子网络,提升模型的泛化能力。该方法能够有效减少神经元之间的“共适应”现象,提高模型的鲁棒性。但在测试阶段该方法不再“丢弃”神经元,而是使用完整网络(同时按概率缩放参数,保证数值一致性)。知识准备—深度学习模型训练基础10.2.4正则化方法早停机制早停机制不修改模型结构,它是训练策略级正则化方法,通过监控验证集指标,当模型在验证集上的性能在若干轮内不再提升时停止训练,并回滚到最佳轮次的参数。它的优势是简单有效,尤其适合数据量有限、训练轮数较多的场景,以防止模型继续拟合噪声。标签平滑标签平滑把one-hot标签变成“软分布”,减少模型对正确类别的过度自信,能提高泛化能力并改善校准(Calibration)。它常用于多分类任务,尤其在类别数多、数据噪声或标注不确定性存在时有效。标签平滑通常会带来更稳定的验证性能,但它也可能降低模型的“极限置信度”,在某些需要非常尖锐决策边界的任务上可能让训练损失下降变慢或影响性能。一般平滑系数取较小值(如0.05~0.1)更稳妥。知识准备—深度学习模型训练基础10.2.4正则化方法数据增强数据增强是数据层面的技巧,但在深度学习中其常被当作最强正则化方法之一:通过随机裁剪、翻转、颜色抖动、Mixup/CutMix等方式增加数据多样性,让模型学到更稳定的判别特征。它的优点是提升效果显著且“副作用小”,缺点是需要与任务匹配。例如,过强的增强可能破坏类别语义(尤其在细粒度分类、医学影像分析等场景中),导致欠拟合或性能下降。知识准备—深度学习模型训练基础10.2.4正则化方法—案例源代码地址文件
ex10-8.py见教材配套代码,路径如下:src/proj10/ex10-8.py【例10-8】使用PyTorch演示L1正则化、L2正则化、ElasticNet、Dropout正则化方法。根据题目要求,编写代码如下:批归一化(BatchNormalization,BN)是一种对神经网络中间层的输入进行标准化处理的技术。它通过将每一层的输入数据按小批量(mini-batch)进行归一化,使其均值接近0、方差接近1,从而缓解了深度网络训练中的梯度消失和梯度爆炸问题。通常,BN层常用于卷积层或全连接层之后、激活函数之前。总的来说,BN层具有以下特点:知识准备—深度学习模型训练基础10.2.5批归一化加快收敛速度:通过稳定数据分布,模型能在更高学习率下训练,加快收敛速度。提升稳定性:减少了不同层输入分布的内部协变量偏移(InternalCovariateShift),训练过程更加平滑。一定程度防止过拟合:BN在训练时会引入轻微噪声(因为批量均值/方差是估计值),具有类似正则化的效果。知识准备—深度学习模型训练基础10.2.5批归一化—案例源代码地址文件
ex10-9.py见教材配套代码,路径如下:src/proj10/ex10-9.py【例10-9】使用PyTorch演示BN方法。根据题目要求,编写代码如下:知识准备—经典CNN模型与改进10.3.1LeNet、AlexNetLeNet主要用于手写体数字识别任务(MNIST数据集)。它是第一个在实际任务中成功应用的CNN模型,奠定了CNN的基本架构。LeNet共包含7层,即两个卷积层、两个平均池化层和3个全连接层,其输入为32×32大小的灰度图像。卷积层使用5×5的卷积核,步长为1,能够提取图像局部的边缘和纹理特征。平均池化层则通过下采样减小特征图尺寸,从而减少参数量。最后的全连接层将特征映射为具体的分类结果。LeNet首次提出了卷积层、池化层和全连接层的组合结构,并通过局部连接和权重共享思想大大降低了网络模型的计算复杂度,这一设计理念成为后续CNN的重要基础。知识准备—经典CNN模型与改进源代码地址文件
ex10-10.py见教材配套代码,路径如下:src/proj10/ex10-10.py10.3.1LeNet、AlexNet—案例【例10-10】使用PyTorch实现LeNet模型的架构。根据题目要求,编写代码如下:知识准备—经典CNN模型与改进10.3.1LeNet、AlexNetAlexNet在2012年被提出,并在ImageNet大规模视觉识别挑战赛中取得了远超传统方法的成绩。相较于LeNet,AlexNet显著增加了网络深度,扩大了网络宽度,并与GPU并行训练、大规模数据集以及数据增强策略结合,在视觉任务上取得了巨大突破。AlexNet由5个卷积层和3个全连接层构成,其输入为224×224的彩色图像。第一个卷积层使用了11×11的大卷积核,并将步长设为4,以快速降低图像的分辨率,后续卷积层逐渐采用更小的卷积核(5×5或3×3)以提取更精细的特征。激活函数采用ReLU,以加速训练并缓解梯度消失的问题。训练模型时加入Dropout层,并且在训练过程中使用数据增强策略(如裁剪、翻转、颜色变换等)以防止出现过拟合现象。除此之外,AlexNet引入局部响应归一化作为辅助机制提高了模型的泛化能力。AlexNet的出现使深度学习在计算机视觉中得到了广泛应用,成为深度CNN发展的里程碑。知识准备—经典CNN模型与改进源代码地址文件
ex10-11.py见教材配套代码,路径如下:src/proj10/ex10-11.py10.3.1LeNet、AlexNet—案例【例10-11】使用PyTorch实现AlexNet模型的架构。根据题目要求,编写代码如下:知识准备—经典CNN模型与改进10.3.2VGGNetVGGNet在2014年提出,它通过实验验证了“更深的网络结构+小卷积核”的设计思路。VGGNet的结构整齐划一,主要由多个卷积块堆叠而成,每个卷积块包含多个3×3的卷积层和一个最大池化层。这样的设计既保证了有足够的感受野,又在相同感受野下大幅减少了模型的参数量。以VGG-16为例,该网络共有16层,最后通过3个全连接层完成分类预测。VGGNet的优点是结构规则、容易理解和实现,并且对细节特征的提取能力很强,因此在迁移学习和下游任务中被广泛使用。然而,其缺点是参数量和计算量仍然非常庞大,模型推理速度较慢,不适合资源受限或对实时性要求高的应用场景。知识准备—经典CNN模型与改进源代码地址文件
ex10-12.py见教材配套代码,路径如下:src/proj10/ex10-12.py10.3.2VGGNet—案例【例10-12】使用PyTorch实现VGG-16模型的架构。根据题目要求,编写代码如下:知识准备—经典CNN模型与改进10.3.3ResNetResNet由何恺明等人在2015年提出,它首次解决了深度网络的退化问题,即随着层数增加训练误差不减反增的现象。ResNet的核心在于提出了残差块(ResidualBlock),通过“残差连接”(SkipConnection)将输入直接加到输出上,使得网络能够学习残差函数而不是直接学习目标映射。这一设计极大地缓解了模型的梯度消失和梯度爆炸问题,使得网络可以轻松扩展到数十层甚至上百层。典型的ResNet包括卷积层、BN层和ReLU激活函数层,再加上恒等映射的残差连接。ResNet的出现使超深网络训练成为可能,其广泛应用于图像识别、检测与分割等任务,并成为众多后续网络模型的基础。知识准备—经典CNN模型与改进源代码地址文件
ex10-13.py见教材配套代码,路径如下:src/proj10/ex10-13.py10.3.3ResNet—案例【例10-13】使用PyTorch实现ResNet-18模型的架构。根据题目要求,编写代码如下:知识准备—经典CNN模型与改进10.3.4GoogleNetGoogLeNet是由Google团队在2014年提出的深度CNN,并在当年的ImageNet大规模视觉识别挑战赛中夺冠。GoogLeNet的最大特点是提出了Inception模块,它通过在同一层中并行使用不同大小的卷积核(如1×1、3×3、5×5)和进行池化操作,从而实现多尺度特征的同时提取。为了避免计算量过大,GoogLeNet在Inception模块中大量使用1×1的卷积核来进行降维和通道融合,既提高了网络的表达能力,又有效控制了模型的参数规模。GoogLeNet模型共有22层,比AlexNet和VGGNet的层数多,但参数量却显著减少,仅有VGGNet的十分之一左右。此外,GoogLeNet还在中间层引入了辅助分类器,用来缓解梯度消失问题并提升训练稳定性。这种结构的优势在于既能捕捉大缺陷特征,也能检测到细微纹理。GoogLeNet非常适合用于工业零件质检中存在多尺度缺陷的复杂场景。知识准备—经典CNN模型与改进源代码地址文件
ex10-14.py见教材配套代码,路径如下:src/proj10/ex10-14.py10.3.4GoogleNet—案例【例10-14】使用PyTorch实现GoogLeNet模型的架构。根据题目要求,编写代码如下:知识准备—经典CNN模型与改进10.3.5轻量化网络MobileNet是Google在2017年提出的轻量级CNN,主要面向移动端和嵌入式设备的实时应用场景。MobileNet的核心在于引入了深度可分离卷积(DepthwiseSeparableConvolution),即将传统卷积分解为逐通道卷积(DepthwiseConvolution)和逐点卷积(PointwiseConvolution)。这种分解策略极大地减少了参数量和计算量,使得模型在保持较好精度的同时能够在低功耗设备上高效运行。MobileNet模型在设计中还引入了宽度因子和分辨率因子,使得其可以根据实际应用场景的需求在速度与精度之间进行灵活权衡。与MobileNet类似,ShuffleNet也是一种面向轻量化的模型,它在设计中引入了通道分组卷积和通道混洗(ChannelShuffle)操作,使得跨组特征能够充分融合,从而进一步提升效率。MobileNet和ShuffleNet在保持模型小型化的同时,保证了特征提取的有效性,因此广泛应用于移动端图像识别、目标检测和工业现场质检等对实时性要求高的任务。知识准备—经典CNN模型与改进源代码地址文件
ex10-15.py见教材配套代码,路径如下:src/proj10/ex10-15.py10.3.5轻量化网络—案例【例10-15】使用PyTorch实现MobileNetV1模型的架构。根据题目要求,编写代码如下:知识准备—经典CNN模型与改进10.3.6现代改进模型ConvNeXt是2022年提出的一种现代CNN模型,它在设计中借鉴了ViT的思想,但依然保持了CNN的基本框架。ConvNeXt对传统CNN进行了全面的现代化改造:首先,它采用了更大的卷积核(如7×7),提升了全局特征建模能力;其次,残差块被重新设计,更加简单,类似于Transformer中的架构;此外,ConvNeXt在归一化、激活函数、网络宽度和深度的分配上也进行了优化,使得网络在精度和效率上都能与Transformer相媲美。与早期的CNN相比,ConvNeXt在大规模图像分类任务中表现优异,同时保持了CNN的高效性和易部署性。对工业质检而言,ConvNeXt代表了CNN发展的新趋势,它能够在复杂检测任务中提供更强的表达能力和更好的鲁棒性,为未来工业智能质检系统的发展提供了新的解决方案。知识准备—经典CNN模型与改进源代码地址文件
ex10-16.py见教材配套代码,路径如下:src/proj10/ex10-16.py10.3.6现代改进模型—案例【例10-16】使用PyTorch实现ConvNeXt-T模型的架构。根据题目要求,编写代码如下:知识准备—迁移学习与模型微调10.4.1迁移学习的基本概念在传统的深度学习任务中,通常需要大量标注数据来训练模型。但在许多实际应用场景中,数据(比如某种特定零件的缺陷样本、医学影像中的罕见病案例)往往有限。使用这些数据直接训练深度神经网络不仅容易过拟合,而且训练成本高昂。迁移学习(TransferLearning)提供了一种有效的解决方案。迁移学习的核心思想是知识的迁移,即将从一个任务中学到的知识(模型参数、特征表示)应用到另一个相关任务中。其背后的逻辑是视觉世界中存在许多共性特征,如边缘、角点、纹理,这些特征在不同任务间是共享的。知识准备—迁移学习与模型微调10.4.1迁移学习的基本概念CNN的层次结构为迁移学习提供了支持。低层卷积层:通常能学习到一些通用特征,如边缘、颜色梯度、简单形状,这些特征在不同视觉任务中普遍适用。中层卷积层:能够提取更复杂的模式,比如纹理、局部结构,既有一定通用性,也具备一定的任务相关性。高层卷积层:更贴近具体任务类别,通常能学习到与某一特定任务相关的高级语义特征,因此需要针对新任务进行重新训练。因此,迁移学习的常见模式是保留低层和中层网络参数,仅对高层卷积层或全连接层进行调整。这种方式能有效减少对数据量的需求,提升少样本任务的执行效率。知识准备—迁移学习与模型微调10.4.2预训练模型加载为了实现迁移学习,我们通常使用在大规模数据集如ImageNet数据集的子集ILSVRC2012(包含1000个类别、超过100万幅图像)上预训练好的模型。这些模型已经学到了丰富的视觉特征,经过适当调整后即可应用到新的任务中。在PyTorch中,torchvision.models模块提供了多种经典模型的预训练版本,例如VGGNet、ResNet、DenseNet、MobileNet等,加载方法十分简便。知识准备—迁移学习与模型微调10.4.2预训练模型加载—案例【例10-17】使用PyTorch中的torchvision.models模块实现对VGG-16和ResNet-18预训练模型的加载。根据题目要求,编写代码如下:知识准备—迁移学习与模型微调10.4.2预训练模型加载—案例运行上述代码,可以看到网络的层次化结构。对于用来分类的全连接层,VGG-16的是全连接层(classifier[6]),而ResNet-18的是全连接层(fc)。为了适应新的任务,我们只需替换最后的全连接层,代码如下:这样,网络前几层依旧保留了从ImageNet学到的通用特征,而新的全连接层则用于新的分类任务。知识准备—迁移学习与模型微调10.4.3微调策略与冻结层选择固定特征提取器做法:冻结预训练模型所有卷积层的参数,只训练新加入的全连接层。适用场景:目标任务数据量极少(例如只有几百幅图像)的场景。优缺点:优点是训练成本低、结果稳定;缺点是模型适应性不足,如果新任务与预训练任务差异较大,效果可能不佳。在迁移学习中,明白如何选择“哪些层要冻结,哪些层要训练”是至关重要的。这一策略取决于目标任务的数据规模和与预训练任务的相似度,通常包括固定特征提取器、部分解冻和全模型微调。知识准备—迁移学习与模型微调10.4.3微调策略与冻结层选择部分解冻做法:冻结前几层,只解冻网络的高层卷积层和全连接层。适用场景:目标任务数据量中等,且与预训练任务有一定差异的场景。优缺点:优点是既能利用通用特征,又能让模型更好地适应新任务,是迁移学习中常用的策略;缺点是模型适应能力有限,仍可能出现过拟合。知识准备—迁移学习与模型微调10.4.3微调策略与冻结层选择全模型微调做法:对整个预训练模型进行训练,权重初始化来自预训练参数,而不是随机初始化。适用场景:目标任务数据量相对较大(有数万幅图像),或新任务与预训练任务差异较大的场景。优缺点:适应性最强,能获得最佳性能,但训练开销最大,需要更多数据作为训练集以避免过拟合。知识准备—迁移学习与模型微调10.4.3微调策略与冻结层选择3种微调策略的区别如表10-1所示。PART03项目实施项目实施项目任务基于掩模和异或运算的图像区域加密、解密。任务实现步骤1:图像基本操作读取walkbridge.jpeg源图像,将图像转换为单通道灰度图像,并获取源图像尺寸。具体代码如下:项目实施项目任务构建并训练一个深度学习模型,实现工业零件缺陷检测。任务实现步骤1:数据集选择与预处理本项目可使用以下两类数据集。公开数据集:如NEUSurfaceDefectDataset(包含钢材表面6类缺陷)。自定义数据集:自行采集的工业零件图像,包含“正常样本”与“缺陷样本”。项目实施本项目选择NEUSurfaceDefectDataset数据集,实现工业零件缺陷检测。该数据集是由东北大学提供的一个公开数据集,用于热轧带钢(钢材)表面的缺陷检测,如图10-8所示。图10-8NEUSurfaceDefectDatabase数据集示例步骤1:数据集选择与预处理项目实施该数据集包含6种典型的钢材表面缺陷类型,每种缺陷类型各包含300个样本,总计1800个样本,其中训练集包含270个样本,测试集包含30个样本,每个样本均为200像素×200像素大小的灰度图像。在本项目中,数据集的组织格式如下:步骤1:数据集选择与预处理项目实施在训练阶段,为加强模型的鲁棒性,加入缩放、随机旋转、翻转、颜色扰动等数据增强操作。测试集则保持原始分布,仅进行尺度统一和标准化处理。具体代码如下:步骤1:数据集选择与预处理项目实施步骤2:构建并训练CNN模型使用一个轻量化的CNN模型(类似简化版VGGNet),适用于中小型数据集的训练。具体代码如下:项目实施使用交叉熵损失与Adam优化算法。具体代码如下:模型训练的具体代码如下:源代码地址文件
train.py见教材配套代码,路径如下:src/proj10/project/train.py步骤2:构建并训练CNN模型项目实施运行上述训练代码,可得到如下所示的训练结果,经过10次的迭代训练,模型在测试集上可达到93.89%的分类准确率:步骤2:构建并训练CNN模型项目实施步骤3:模型优化与调参观察训练损失曲线,若收敛速度过慢或振荡,可采用学习率衰减策略。具体代码如下:在训练时使用BN以减少过拟合。具体代码如下:项目实施从零训练模型(如步骤2)需要大量数据和时间调参。在工业质检中,缺陷样本往往有限,使用迁移学习是更高效的优化策略。我们可以加载torchvision中在ImageNet上预训练好的MobileNetV2。这是一个轻量化的高效模型,适合需要实时检测的工业场景。然后将基础模型(特征提取器)的参数冻结(requires_grad=False),使其在训练中不被更新,以保留其通用的特征提取能力。接着,将MobileNetV2原本用于ImageNet分类的分类头(1000类)替换为本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 带状镁合金牺牲阳极技术介绍
- 2026年高中秋季洪涝后防疫科普
- 2026年5月6日业务学习考试试题
- 湖北省咸宁市2025-2026学年高三冲刺模拟生物试卷含解析
- 2026基因检测服务下沉市场开发与渠道建设策略深度分析
- 2026中国药品研发行业市场前沿研究报告及创新技术与市场发展趋势分析报告
- 2026皮革制品行业市场消费分析及工艺革新与品牌价值提升报告
- 2026中国体育融资行业市场现状供需分析及投资评估规划分析研究报告
- 2026中国涡流泵行业物流成本分析与配送网络优化报告
- 2026年初中化学期末测试卷结合培训
- DG-T 285-2023 鲜食玉米收获机
- (2025年)城市管理网格员职业技能竞赛考试题库(含答案)
- 出入相补原理课件
- 《麻醉学》教学资料
- 青少年心理健康数字化服务体系建设研究
- 高新企业认定汇报材料
- 青少年民法典宣传课件
- 高原作业安全知识培训课件
- 算量培训课件
- 胎儿致死性侏儒的超声诊断
- 民兵应急抢险培训课件
评论
0/150
提交评论