第3 章 基于深度学习的数字图像处理 深度学习已经成为数字图像处理的主流方法。工业机器视觉系统开发过程中,经常 将传统数字图像处理用作图像的数据增强、预处理和后处理等环节,将深度学习作为图像 分类、目标检测、实例分割等应用的主要方法。 本章首先介绍人工智能、机器学习、强化学习、深度学习的基本概念,明确深度学习在 人工智能领域中的地位和作用;然后重点对深度学习学习对象、学习过程和评价标准等进 行详细描述,期望对深度学习建立一个宏观整体的认识;最后对普通神经网络、一般深度 卷积神经网络及构成、典型深度卷积神经网络及应用等进行深入的讨论。 3.1 人工智能与机器学习 3.1.1 人工智能概述 人工智能(ArtificialIntelligence,AI)是对模拟、延伸和扩展人类智能的理论、方法、 图3-1 人工智能的相关学科 技术进行研究的一门科学。通俗地说,人工 智能就是使用人工的方法在计算机上实现 的智能。从计算机科学的角度看,人工智能 是计算机科学的一个分支。从学科交叉的 角度看,人工智能涉及计算机科学、脑科学、 认知科学、心理学、逻辑学和统计学等多个 学科,如图3-1所示。 从1956年正式提出人工智能的概念起, 人工智能的研究、发展已有60多年的历史。 不同学科背景的学者对人工智能做出了不 同的研究尝试,逐渐形成三个主流学派,分 别是符号主义、连接主义和行为主义。 (1)符号主义,又称为逻辑主义、心理学 派或计算机学派,该学派认为人工智能源于数学逻辑,使用符号运算模拟人的认知过程。 典型的代表成果是基于产生式规则构建的专家系统。 (2)连接主义,又称为仿生学派或生理学派,该学派认为人工智能可以基于神经网 络、网络间的连接机制以及学习算法实现。典型的代表成果是普通神经网络以及在此基 110 数字图像处理与深度学习 础上发展的深度卷积神经网络,这些网络已经广泛应用于人脸识别、字符识别、产品表面 的缺陷识别等。 (3)行为主义,又称为进化主义或控制论学派。该学派认为人工智能表现为智能体 在适应环境的控制过程中的自寻优、自适应、自校正、自组织和自学习等。典型代表成果 是基于强化学习的智能机器人系统。 3.1.2 机器学习概述 机器学习(MachineLearning)研究的是使用计算机模拟或实现人类学习过程的科 学,是实现人工智能的重要途径。人工智能与机器学习的关系如图3-2所示。当前,机器 学习是人工智能最重要、最具有热度的研究分支,机器学习包括传统的机器学习算法,如 线性回归、决策树、支持向量机、聚类、主成分分析和人工神经网络,以及当下最受关注的 深度学习、强化学习以及深度强化学习等。 图3- 2 人工智能与机器学习的关系 按照学习方式进行分类,机器学习可以分为如下三种。 (1)有监督学习(SupervisedLearning), 又称为有导师学习,指的是从带有标签的数 据中训练模型,以对未知数据作出分类或预测。例如,从网络上收集1000 张猫和狗的图 像,并且对每张图像中猫和狗的位置及类别进行标注,然后将这些带标签的数据送入机器 学习系统进行训练,模型训练达到一定的评价标准后,停止训练。当给定一个新的带有猫 和狗的图像时,模型就可能指出猫和狗在图像中的位置,并以概率方式标注模型认可的分 类置信度,这是一种典型的有监督学习。有监督学习的常见算法包括决策树、支持向量 机、人工神经网络和深度卷积神经网络等。 (2)无监督学习(UnsupervisedLearning), 又称为无导师学习,指的是从不带标签的 数据中发现隐含的结构。例如,工厂在生产过程中,分析、收集并找到可能影响产品表面 质量的50 个因素及数据,通过学习算法找到影响产品表面质量的最重要的10 个关键因 素,这是一种典型的无监督学习过程。无监督学习的常见算法包括聚类和主成分分析等。 (3)强化学习(ReinforcementLearning), 指的是智能体在与环境的交互过程中通过 执行一定的学习策略以达成回报最大化或实现特定目标的学习。强化学习过程示意,如 图3-3所示。智能体基于当前环境的状态S(State), 执行一定的动作A(Action), 环境受 到智能体动作A的影响会将状态从S更新为S',并获得奖励R(Reward), 如此循环往复, 直到达到某一设定值。例如,寒冷的冬天里,一只没有见过火焰的动物想取暖。这只动物 可以认为是智能体。起初,该动物距离火焰较远,动物与火焰之间的距离可以定义为状 第 3 章 基于深度学习的数字图像处理 111 态,根据距离的远近可以定义系统不同的状态。该动物想取暖,就向火焰靠近。而当动物 距离火焰非常近时,又会感到火焰的灼热,就要远离火焰。这里,靠近和远离就是智能体 采取的动作。智能体获得的奖励就是取暖但不能灼伤自己。目前,强化学习已经在无人 驾驶、AI游戏、智慧物流等领域得到广泛的应用。 图3- 3 强化学习过程示意 3.深度学习的基本概念 2 3.2.1 深度学习概述 深度学习(DepLearning)是机器学习的一个子研究领域。深度学习的概念源于人 工神经网络。其“深度”的含义,一般指的是构成神经网络的层数较多,通常有5层、10层 甚至50层等。深度学习的本质是通过多层非线性变换,从大量数据中自动学习各种低层 和高层的复杂特征,从而替代传统机器学习中需要人工设计的特征。 通过前面内容的学习,我们知道:如果要提取图像中物体的边缘,可以使用Roberts、 Sobel、Prewit 算子或Canny算子;如果要计算图像的纹理特征,可以使用基于灰度共生 矩阵的纹理特征、LBP纹理特征、分形维数。这些传统的数字图像处理方法,对于图像特 征的提取都有明确的数学公式的表达形式。而在深度学习中,对于图像中物体形状、边 缘、纹理、亮度、对比度、颜色等特征的提取,都是通过算子或算子的组合进行级联和构造, 并由神经网络自动学习而来。很多时候,深度学习抽取到的特征无法使用自然语言进行 描述。 当前,深度学习应用于数字图像处理中,大多是有监督学习。例如,当使用深度卷积 神经网络进行图像分类时,需要输入大量的带类别标签的图像。由于数字图像处理和机 器视觉的研究热度居高不下,深度学习已经成为有监督学习中重要的研究方法之一。 近年来出现的深度Q网络模型(DepQ-Network,DQN)则是将深度学习与强化学 习方法相结合,采用卷积神经网络(简称Q网络)拟合动作价值函数,成功实现从输入图 像到输出动作的端到端学习。深度学习、强化学习、深度强化学习已经成为机器学习中最 引人关注的方法。 大多数应用中,深度学习作为一种有监督学习算法进行使用。深度学习作为一种重 要的机器学习算法,也要关注机器学习的本质问题:如何学习? 学习的目标是什么? 如 1 12 数字图像处理与深度学习 何评价学习效果? 学习的知识如何表达和存储? 机器学习的一般过程如图3-4所示。 图3-4 机器学习的一般过程 一般来说,机器学习可以分为训练阶段和验证阶段。在训练阶段,根据输入样本 {xi},在学习算法的驱动下,针对一定损失函数L(θ|{xi}),期望通过样本的训练降低损 失函数的值。这里,{θ}是一组模型的训练参数。当训练达到一定的迭代次数或其他终止 条件时,将学习到的知识以一定方式进行保存即可获得模型,模型可以理解为一组经过训 练优化调整后的参数θ* { j } ;在验证阶段,对训练获得的模型输入新的数据xval,检验并统 计输出结果yval是否满足系统精度要求。当模型达到一定的精度要求时,模型即可投入 现场使用,进入现场测试和运行阶段。 下面以一个机器视觉中目标检测应用为示例,使用深度学习中的深度卷积网络详细 说明模型的训练过程。炼钢生产过程中,钢包包号识别是一个典型的目标检测问题,如图 3-5所示,不仅需要识别出钢包包号图像中1~2位的钢包包号(使用1~2位的0~9的数 字进行标识),还需要通过四边形的方式给出钢包包号的准确位置。 图3-5 钢包包号的目标检测 模型训练阶段,使用大量的已经标注标签的图像及标签数据输入深度卷积神经网络。 对于目标检测,一般使用LabelImg工具进行标注,如图3-6所示。显然,由于人工标注了 真实的目标位置,因此这是一种有监督学习。 深度卷积神经网络接收到图像及图像中目标的标签(一般保存为XML文件)后,将 图像作为输入,通过深度卷积神经网络中的各个算子进行层层计算,输出目标的类别和目 第 3 章 基于深度学习的数字图像处理 113 图3- 6 使用LabelImg工具标注钢包包号 标的位置,即包号中每个字符的具体值以及所在的四边形框位置。目标函数用于描述模 型输出的每个字符的类别是否正确,即分类损失(ClasificationLos),以及每个字符的四 边形位置是否精确,即回归损失(RegresionLos)。模型学习的目标是降低分类损失和 回归损失的总和。一般情况下,对于深度学习来说,目标函数值越大,损失值越大,模型精 度越低;目标函数值越小,损失值越小,模型精度越高。有关深度学习的目标函数,将在3. 2节中详细介绍。 2. 面向目标检测的深度卷积神经网络的学习过程,如图3-7所示。对于深度卷积神经 网络来说,模型的训练过程是一个多轮反复输入图像、特征提取、计算损失和调整神经元 之间连接权重的过程。对于钢包包号目标检测的深度卷积神经网络来说,训练阶段需要 多次输入钢包包号图像,通过神经网络的各层算子提取有效特征并进行组合,以进行目标 类别判定和精确位置的计算。当模型输出预测的目标类别和位置后,即可计算分类损失 和回归损失,然后根据该损失调整神经网络中神经元之间的连接权重。这些权重就是深 度卷积神经网络对于知识的表达和存储形式。有关神经网络学习算法,将在3.4节中 3. 详细介绍。 3.2.2 深度学习的损失函数 机器学习经常解决的问题有两类:分类(Clasification)和回归(Regresion)。分类 问题的输出为有限个离散值。回归问题的输出为无限个连续值。例如,预测明天是晴天、 雨天还是多云,预测某个字符是0~9中具体哪一个,这些都是典型的分类问题;预测明天 天气的气温是多少度,预测某个字符出现在图像中的位置,这些都是典型的回归问题。 深度学习是一种典型的机器学习方法,同样也要处理分类和回归问题。对于分类的 损失函数,深度学习中经常使用均方误差损失(MeanSquaredEror,MSE)和交叉熵损失 (CrosEntropy,CE)进行描述。 1 14 数字图像处理与深度学习 图3-7 面向目标检测的深度卷积神经网络的学习过程 1.均方误差损失 当模型的输出有M 个类别,设这M 个输出为[y^1,y^2,…,y^M ],分别是每个类别的预 测输出概率。例如,当识别的字符是0~9 的10 个字符的其中一个字符时,如果 [^y1,^y2,…,^yM ] =[0.1,0.8,0.05,0.02,…,0.01],则在输出概率中,字符“1”对应的概率 0.8为最大值,输出的分类结果为字符“1”,即识别出来的字符为“1”。 设真实的标签为[y1,y2,…,yM ]。对于识别字符0~9的其中一个字符问题,如果真 实的字符为“1”,则[y1,y2,…,yM ]=[0,1,0,…,0]。 均方误差损失(MSE)定义,如式(3-1)所示。 L =(y1 -y^1)2 + (y2 -y^2)2 + … + (yM -y^M )2 (3-1) 如果真实标签为类别p,1≤p≤M ,则均方误差损失为 L =(y1 -y^1)2 + (y2 -y^2)2 + … + (yM -y^M )2 =(1-y^p )2 + (y^21 + … +y^2p-1 +y^2p +1 + … +y^2M ) 可以看出,预测类别p 的均方误差损失,不仅与类别p 的预测概率有关,还与其他类 别的预测概率有关。 2.交叉熵损失 交叉熵损失(CE)定义,如式(3-2)所示。 L =-(y1logy^1 +y2logy^2 + … +yMlogy^M ) (3-2) 如果真实标签为类别p,1≤p≤M ,则交叉熵损失为 L =-(y1logy^1 +y2logy^2 + … +yMlogy^M ) =-yplogy^p =-logy^p 可以看出,预测类别p 的交叉熵损失,只与类别p 的预测概率有关,与其他类别的预 测概率无关。大多数情况下,深度学习选择交叉熵作为分类损失函数。 深度学习的训练过程就是多次反复输入图像、特征提取、计算损失和调整参数的过 程,目标是降低损失函数的值,以获得高精度或误差较小的模型。 115 第 3 章 基于深度学习的数字图像处理 3.模型过拟合与欠拟合 由于训练样本和验证样本不是相同的,深度学习训练出的模型在训练数据上和验证 数据上的表现可能差异较大。 若模型在训练数据上获得了较小的误差损失,而在验证数据上的误差损失较大,则称 为模型过拟合。过拟合的原因可能是特征维度太多、模型过于复杂、参数过多、训练数据 太少等。若模型在训练数据上误差一直较大,无法找到合适的模型表达来描述数据集,则 称为模型欠拟合。欠拟合的可能原因是训练不充分、训练数据太少、训练数据中噪声过 多、超参数设置不合理等。模型过拟合与欠拟合,如图3-8所示。 图3- 8 模型过拟合与欠拟合 有关图像处理中目标检测的回归损失函数,将在目标检测的深度卷积神经网络相关 章节详细介绍。 3.2.3 深度学习的评价指标 当使用深度学习方法训练出模型后,需要系统地讨论模型在验证数据上的表现。对 于分类问题,常用的评价指标大多基于混淆矩阵,并据此定义精确率(Precision)、召回率 (Recal)、准确率(Acuracy)、错误率(ErorRate)以及F1值(F-measure)。 混淆矩阵,又称为误差矩阵。混淆矩阵的每一列代表预测值,每一行代表实际的类 别,见表3-1。 表3- 1 混淆矩阵 预测值 实际值 预测为正样本预测为负样本 实际为正样本TP FN 实际为负样本FP TN 这里,TP 、FP 、FN和TN的含义如下。 (1)TP(TruePositive):实际为正样本,预测为正样本; (2)FP(FalsePositive):实际为负样本,预测为正样本; 116 数字图像处理与深度学习 (3)FN(FalseNegative):实际为正样本,预测为负样本; (4)TN(TrueNegative):实际为负样本,预测为负样本。 例如,一个火灾智能检测系统,模型的实际检测结果,如图3-9所示。方框里面是模 型给出检测结果为火焰的情况,其中,8个真实火焰被检测出来火焰,2个灯泡的照明被错 误地检测出来为火焰;方框外面是模型没有给出检测结果的情况,其中,3个真实的火焰, 1个灯泡的照明,火灾检测模型没有给出检测结果。 图3- 9 火灾检测结果的示意 这里,对于火灾智能检测系统,火焰是正样本,灯泡照明是负样本。方框里面的8个 火焰被检测出来火焰,即8个正样本被识别为8个正样本,TP=8;方框里面的2个灯泡 照明被检测出来火焰,即2个负样本被识别为2个正样本,FP=2;方框外面的3个火焰 没有被识别出来火焰,即3个正样本被识别为3个负样本,FN=3;方框外面的1个灯泡 照明没有被识别出来,即1个负样本被识别为1个负样本,TN=1。 下面对精确率、召回率、准确率、错误率以及F1值进行定义并解释说明。 (1)精确率指的是预测为正类的全部样本中,预测正确的正类样本比例。精确率的 计算,如式(3-3)所示。 TP Precision=TP+FP (3-3) (2)召回率指的是在全部的正类样本中,预测正确的正类样本比例。召回率的计算, 如式(3-4)所示。 TP Recal=TP+FN (3-4) (3)准确率指的是在全部样本中,预测正确的正类样本和预测正确的负类样本的比 例。准确率的计算,如式(3-5)所示。 Acuracy= TP+TN (3-5) TP+FP+FN+TN (4)错误率(ErorRate)指的是在全部样本中,预测错误的正类样本和预测错误的负 类样本的比例。错误率的计算,如式(3-6)所示。 ErorRate= FP+FN (3-6) (5)F1值定义,如式(3-7)所示。 TP+FP+FN+TN 2*Precision*Recal F1= Precision+Recal (3-7) 117 第 3 章 基于深度学习的数字图像处理 根据上述定义,对于该火灾智能检测系统,计算各个指标的结果如下。 TP 88 Precision=TP+FP =8+2=10 Recal= TP 8 8 TP+FN =8+3=11 TP+TN 8+1 9Acuracy= TP+FP+FN+TN =8+2+3+1=14 ErorRate= FP+FN 2+3 5 TP+FP+FN+TN =8+2+3+1=14 88 2×Precision×Recal 2×10×11 =76F1= Precision+Recal = 8 8 0.10+11 3.2.4 深度学习模型开发的一般过程 本节主要以机器视觉领域使用的深度卷积神经网络的模型开发过程为例,对深度学 习模型的开发过程做一个简要介绍。这里以X射线底片上的焊缝缺陷检测为例,需要识 别的缺陷主要包括裂纹、未熔合、未焊透、条形缺陷和圆形缺陷共5种。模型开发过程包 括:数据标注、数据扩增、数据格式转换、模型训练、模型转换、模型调用等步骤。 1.数据标注 数据标注指的是使用专用标注软件对输入图像数据进行分类标识和目标标注。对于 X射线底片上的焊缝缺陷,使用LabelImg软件标注裂纹、未熔合、未焊透和条形等各种缺 陷的具体位置,如图3-10所示。这里使用四边形框标注一个裂纹缺陷,标记缺陷名称为 crack,标注软件会自动记录缺陷类型和缺陷所在位置信息。位置信息一般记录为四边形 左上角坐标、宽度和高度。 2.数据扩增 数据扩增指的是不增加原始数据,仅对原始数据进行一些变换而获得更多的训练数 据。数据扩增的主要目的是提高模型的鲁棒性和泛化能力。对于图像数据来说,常见的 扩增方法包括:基于几何方法的扩增、基于颜色或亮度的扩增、基于噪声的扩增、基于深 度学习方法的扩增。 .基于几何方法的扩增包括图像翻转、图像旋转、图像扭曲、图像缩放和图像裁 减等。 .基于颜色或亮度的扩增包括亮度调整、色度调整、饱和度调整和对比度调整等。 .基于噪声的扩增包括向图像中添加高斯、椒盐或泊松噪声等 。 上述扩增方法,均可以使用传统方法的数字图像处理实现 。 .基于深度学习方法的扩增的典型代表是使用对抗生成网络(Generative AdversarialNetworks,GAN)生成新的数据,实际是通过深度学习训练出一个新 的模型来扩增数据。 118 数字图像处理与深度学习 图3-10 使用LabelImg标注X射线底片上的焊缝缺陷 增加亮度、减少亮度的数据扩增示意,如图3-11 所示。图3-11(a)是对原图像的亮度 降低30 的扩增图像,图3-11(b)是对原图像的亮度提高30 的扩增图像,两种扩增方式属于 图像的线性点运算。图像中添加高斯噪声的示意,如图3-12 所示。图3-12(a)、图3-12(b) 和图3c)分别加入了方差为0.001 和0.属于图像的算术运算。 -12(01 、0.0001 的高斯噪声, 图3-11 亮度扩增的示意 图3-12 噪声扩增的示意 3. 数据格式转换 数据格式转换指的是将图像数据及标签文件组成的训练数据转换成为模型训练要求 的格式。将图像数据及标签文件转换为TFRecord格式的示意,如图3-13 所示。其中, 119 第 3 章 基于深度学习的数字图像处理 JPEGImages文件夹存放图像数据,Annotations文件夹存放标签文件。TFRecord格式 是TensorFlow训练的标准数据格式,将数据存储为二进制文件,复制和读取效率更高, 可以更加高效地进行数据的频繁访问操作。 图3-13 训练数据转换为TFRecord格式 4.模型训练 模型训练指的是多次反复输入图像、进行特征提取、计算损失和调整参数的过程。模 型训练过程输出的各种损失函数值,如图314所示。其中,_为分类损失,_ -clalos loclos 为目标检测的回归损失。 图3-14 模型训练过程 5.模型转换 模型训练过程得到的模型依赖于训练环境,只能在指定的框架下运行。例如,基于 TensorFlow进行模型训练,得到的含有检查点checkpoint文件的ckpt模型就属于这种 情况。因此,经常需要将训练得到的模型转换为可独立运行的文件。对于TensorFlow, 经常需要将ckpt模型转换为pb模型。pb模型文件具有编程语言独立性,可独立运行 并允许任何编程语言进行解析并运行。ckpt模型转换为pb模型的示意,如图3-15 所示。 图3-15 模型转换 120 数字图像处理与深度学习 6. 模型调用 一般来说,基于深度学习开发机器视觉系统,需要完成模型训练和模型调用两个阶段 的工作。模型训练和模型调用可以使用不同的编程语言开发。前述的模型训练就是使用 Python编程语言在Ubuntu操作系统下进行的,通过模型转换为pb模型,如图3-16 所 示。使用C++并基于QT 框架开发的前端界面,基于TensorFlowC++编程接口可以调 用pb模型,如图3-17 所示。 图3-16 前端界面调用的pb模型 图3-17 前端界面 3.普通神经网络 3 深度卷积神经网络是数字图像处理或机器视觉开发中广泛使用的一种深度学习方 法,而深度卷积神经网络是从一般或普通神经网络发展而来的。 神经网络(NeuralNetwork,NN), 又称为人工神经网络(ArtificialNeuralNetwork, ANN), 是一种模仿人类神经网络行为特征,进行分布式并行信息处理的模型。神经网络 是由大量的人工神经元按照一定拓扑结构相互连接而成,通过调整人工神经元之间的连 接权重或连接关系达到信息处理、知识存储进而模拟人工智能的目的。 第3 章 基于深度学习的数字图像处理1 21 3.3.1 人工神经元 人工神经元是对生物神经元的抽象和简化。生物神经元由细胞体、树突和轴突组成。 细胞体是神经元的主体,树突是感知器官,接受来自其他神经元传递的输入信号,轴突用 来传递本神经元产生的输出信号。 人工神经元是对组成生物神经元的树突、轴突和细胞体进行数学抽象而来。具体来 说,人工神经元就是将树突和轴突简化并抽象为多个输入和单个输出,将细胞体抽象为一 个激活函数,如图3-18所示。 图3-18 人工神经元模型 人工神经元的输入与输出关系,如式(3-8)所示。 y =f Σn i=1 ( wixi -θ) (3-8) 这里,x1,x2,…,xn 是人工神经元的n 个输入,w1,w2,…,wn 是n 个输入对应的权 重,θ 是神经元的阈值,输入和阈值进行线性组合Σn i=1 wixi -θ 作为激活函数f 的输入,y 是神经元的输出。神经元的输出依赖于具体的激活函数。 3.3.2 神经网络的拓扑结构 神经网络由多个神经元按照一定拓扑结构连接而成。大多数神经网络的拓扑结构都 是前馈神经网络,如图3-19所示。 图3-19 前馈神经网络 前馈的神经网络由多层神经元组成,包括输入层、隐藏层和输出层,各层顺序连接,数 122 数字图像处理与深度学习 据严格遵从从输入层经过隐藏层到输出层进行单向流动,同一层内的神经元之间没有连 接。图3-x1 和x2 是前馈神经网络的输入,h1、h2 和h3 组 19中,o1 和o2 是网络的输出, 成神经网络的一个隐藏层。前馈神经网络的信息处理能力主要由隐藏层层数、拓扑结构、 激活函数等决定。神经元之间的连接权重就是模型的参数,模型训练过程就是不断地调 整神经元之间的连接权重来降低损失函数的值,训练好的模型实际就是一个调整优化后 的神经元连接参数及网络拓扑结构。这种前馈神经网络的典型代表是反向传播(Back Propagation,BP)神经网络。 3.3.3 激活函数 激活函数指的是将神经元的输入映射为输出的函数。引入激活函数可以增强神经网 络的拟合能力。常见的激活函数包括Sigmoid、tanh、ReLU和PReLU 。 1.Sigmoid函数 Sigmoid函数的表达式,如式(3-9)所示。 f(x) = 1+1e(3-9) - x Sigmoid函数图像,如图3-20所示。 图3-20 Sigmoid函数图像 Sigmoid函数,又称为逻辑回归(LogisticRegresion,LR)函数,作为一种指数函数模 型广泛应用于面向分类和回归问题的机器学习。Sigmoid函数的优点是:输出映射在(0, 1)之间,且单调连续,输出范围有限且稳定,输出范围(0,1)之间的值还可以作为分类问题 中类别的输出概率,可直接用作输出层;其缺点是:由于其双端饱和的特性(函数两端的 梯度趋近于零),训练过程中容易导致梯度消失,模型训练失败或训练不充分,模型欠拟 合,此外,Sigmoid函数输出并不是以0为中心。 2.tanh函数 tanh 函数的表达式,如式(3-10)所示。 ex -e- x f(x) = ex+e- x (3-10) 第3 章 基于深度学习的数字图像处理1 23 tanh 函数图像,如图3-21所示。 图3-21 tanh 函数图像 tanh 函数,又称为双曲正切函数。tanh 函数的优点是:解决了Sigmoid的输出不是 以0为中心的问题;其缺点是:函数依然具有双端饱和的特性,可能在模型训练中导致梯 度消失。 3.ReLU 函数 ReLU 函数,又称为线性整流函数(RectifiedLinearUnit,ReLU)。ReLU 函数的表 达式,如式(3-11)所示。 f(x)= x, x ≥0 0, x <0 { (3-11) ReLU 函数图像,如图3-22所示。 图3-22 ReLU 函数图像 ReLU 函数的优点是:解决了梯度消失的问题,在x 为正数的区间中,神经元不会饱 124 数字图像处理与深度学习 和,模型训练过程中能够快速收敛;其缺点是:输出不是以0为中心,而且当输入为负时, 神经元不被激活。因此,在训练过程中可能出现神经元“死亡”,神经元之间的连接权重无 法更新的情况。 4.PReLU 函数 PReLU 函数的表达式,如式(3-12)所示。 f(x)x(x)+a*mi0,(312) =ma0,n(x) - PReLU 函数图像,如图3-23 所示。 图3-23 PReLU 函数图像 PReLU 函数中的 a 为可调整的参数,一般在(0,1)之间。当a=0时,PReLU 函数退 化为ReLU 函数;当 a 为非0实数时,PReLU 给所有的负值输入赋予一个非0的较小的 斜率,从而改进ReLU 函数在输入为负的情况下完全不被激活的情况。 3.3.4 BP 算法 本节主要介绍典型的前馈神经网络的学习算法,通过学习调整神经元之间的连接权 重,形成知识表达、模拟人工智能。 前馈神经网络的学习过程总体上分为两个阶段:正向计算和反向传播。正向计算指 的是输入数据从输入层依次经过隐藏层的各层神经元进行逐层计算,并最终通过输出层 进行输出。在输出层,综合神经网络的输出和给定的标签,计算损失函数值;反向传播指 的是将损失函数所表达的误差按原来正向计算的路径进行反向传递,并对沿途各个神经 元之间的连接权重进行调整,期望下次进行正向计算时由损失函数计算的误差减小。 1. 正向计算 下面以一个含由两个输入、三个神经元组成的隐藏层和两个输出的简单前馈神经网 络为例,详细说明BP 算法的工作过程,如图3-19 所示。 对于隐藏层的神经元h1,输入来自x1 和x2,输出给o1 和o2。输入和输出分别如 式(3-13)和式(3-14)所示。 Inh1 =w1*x1+w4*x2 (3-13) 125 第 3 章 基于深度学习的数字图像处理 h1=Outh1 =SigmoiInh13-14) 神经元h1 的输入与输出如图3-24所示。 d() ( 隐藏层的神经元h2,输入同样来自x1 和x2,输出给o1 和o2。输入和输出分别如 式(3-15)和式(3-16)所示。 Inh2 =w2*x1+w5*x2 (3-15) d() ( h2=Outh2 =SigmoiInh23-16) 隐藏层的神经元h3,输入同样来自x1 和x2,输出给o1 和o2。输入和输出分别如 式(3-17)和式(3-18)所示。 In=w3*x1+w6*x2 (3-17) h3 h3=Ouh3 =Sgmod(n(318) tiiIh3) 输出层神经元o1,输入来自h1、h2 和h3,输出即模型的一个输出。输入和输出分别 如式(3-19)和式(3-20)所示。 InO1 =w7*h1+w8*h2+w9*h3 (3-19) o1=Outo1 =SigmoiIno13-20) 神经元o1 的输入与输出,如图3-25所示。 d() ( 图3-24 神经元h1 的输入与输出图3-25 神经元o1 的输入与输出 输出层神经元o2,输入同样来自h1、h2 和h3,输出即模型的另一个输出。输入和输 出分别如式(3-21)和式(3-22)所示。 Ino2 =w10*h1+w11*h2+w12*h3 (3-21) o2=Ouo2 =Sgmod(no2) ( tiiI322) 为了计算简单,损失函数采用均方误差损失(MSE),2Σ(2,其中, i=1 为真实输出(标签数据),为神经网络的 Eror= 12 oi-yi) yi oi 计算输出。 设输入x1 和x2 分别为0.3, 5和0.相应 的真实输出为0.07 。当各个神经元 23和-0. 之间的连接权重确定之后,即可进行正向计 算,如图3-26所示。一般来说,神经元之间 的连接权重可初始化为(之间的小数,大 多使用随机函数生成。 0,1) 图3-26 神经元之间的连接权重初始化 1 26 数字图像处理与深度学习 若隐藏层神经元和输出层神经元的输出分别如下。 h1=Sigmoid(0.20*0.50+0.50*0.30)=0.56 h2=Sigmoid(0.30*0.50+0.10*0.30)=0.54 h3=Sigmoid(-0.40*0.50+0.60*0.30)=0.50 o1=Sigmoid(0.10*0.56+0.54*0.20+(-0.30*0.50))=0.50 o2=Sigmoid((-0.50*0.56)+0.54*0.40+0.80*0.50)=0.58 则均方误差损失(MSE)的计算如下。 Error=12 (0.50-0.23)2 +12 [0.58-(-0.07)]2 =0.25 2.反向传播 反向传播指的是将损失函数所表达的误差按原来正向计算的路径进行反向传递。反 向传播是根据微积分中的链式法则,沿着从输出层经过隐藏层到输入层的反向顺序,依次 计算损失函数对权重参数的梯度,并据此进行调整。 对于图3-25所示的神经网络,以权重w7为例,计算MSE函数对w7的梯度,如式(3- 23)所示。 δ7 =.Error .w7 =.Error .o1 * .o1 .Ino1 *.Ino1 .w7 (3-23) 其中, .Error .o1 =o1 -y1 .o1 .Ino1 =o1*(1-o1) .Ino1 .w7 =h1 误差损失在权重w8~w12上的计算,与δ7的计算类似。 对于输入层与隐藏层之间的权重,以权重w1 为例,计算损失函数对w1 的梯度,计算 如式(3-24)所示。 δ1 =.Error .w1 =.Error .o1 * .o1 .w1 +.Error .o2 * .o2 .w1 = .Error .o1 * .o1 .Ino1 *.Ino1 .h1 * .h1 .Inh1 *.Inh1 .w1 +.Error .o2 * .o2 .Ino2 *.Ino2 .h1 * .h1 .Inh1 *.Inh1 .w1 = .Error .o1 * .o1 .Ino1 *w7 +.Error .o2 * .o2 .Ino2 *w10 . è . . . ÷ * .h1 .Inh1 *.Inh1 .w1 (3-24) 其中, .h1 .Inh1 =h1*(1-h1) .Inh1 .w1 =x1 第3 章 基于深度学习的数字图像处理1 27 误差损失在权重w2~w6 上的计算,与δ1 的计算类似。 根据上述公式,分别计算误差损失在各个权重上的梯度,如下。 δ7 =.Error .w7 =.Error .o1 * .o1 .Ino1 *.Ino1 .w7 =0.27*0.50*(1-0.50)*0.56=0.04 δ8 =.Error .w8 =.Error .o1 * .o1 .Ino1 *.Ino1 .w8 =0.27*0.50*(1-0.50)*0.54=0.04 δ9 =.Error .w9 =.Error .o1 * .o1 .Ino1 *.Ino1 .w9 =0.27*0.50*(1-0.50)*0.50=0.03 δ10 =.Error .w10 =.Error .o2 * .o2 .Ino2 *.Ino2 .w10 =0.65*0.58*(1-0.58)*0.56=0.09 δ11 =.Error .w11 =.Error .o2 * .o2 .Ino2 *.Ino2 .w11 =0.65*0.58*(1-0.58)*0.54=0.09 δ12 =.Error .w12 =.Error .o2 * .o2 .Ino2 *.Ino2 .w12 =0.65*0.58*(1-0.58)*0.50=0.08 δ1 =.Error .w1 = .Error .o1 * .o1 .Ino1 *w7 +.Error .o2 * .o2 .Ino2 *w10 . è . . . ÷ * .h1 .Inh1 *.Inh1 .w1 =(0.27*0.50*(1-0.50)*0.10+0.65*0.58*(1-0.58)*(-0.50)) *0.56*(1-0.56)*0.50=-0.01 δ4 =.Error .w4 = .Error .o1 * .o1 .Ino1 *w7 +.Error .o2 * .o2 .Ino2 *w10 . è . . . ÷ * .h1 .Inh1 *.Inh1 .w4 =(0.27*0.50*(1-0.50)*0.10+0.65*0.58*(1-0.58)*(-0.50)) *0.56*(1-0.56)*0.30=-0.01 δ2 =.Error .w2 = .Error .o1 * .o1 .Ino1 *w8 +.Error .o2 * .o2 .Ino2 *w11 . è . . . ÷ * .h2 .Inh2 *.Inh2 .w2 =(0.27*0.50*(1-0.50)*0.20+0.65*0.58*(1-0.58)*0.40) *0.54*(1-0.54)*0.50=0.01 δ5 =.Error .w5 = .Error .o1 * .o1 .Ino1 *w8 +.Error .o2 * .o2 .Ino2 *w11 . è . . . ÷ * .h2 .Inh2 *.Inh2 .w5 =(0.27*0.50*(1-0.50)*0.20+0.65*0.58*(1-0.58)*0.40) *0.54*(1-0.54)*0.30=0.01 δ3 =.Error .w3 = .Error .o1 * .o1 .Ino1 *w9 +.Error .o2 * .o2 .Ino2 *w12 . è . . . ÷ * .h3 .Inh3 *.Inh3 .w3 =(0.27*0.50*(1-0.50)*(-0.30)+0.65*0.58*(1-0.58)*0.80) *0.50*(1-0.50)*0.50=0.01 δ6 =.Error .w6 = .Error .o1 * .o1 .Ino1 *w9 +.Error .o2 * .o2 .Ino2 *w12 . è . . . ÷ * .h3 .Inh3 *.Inh3 .w6 =(0.27*0.50*(1-0.50)*(-0.30)+0.65*0.58*(1-0.58)*0.80) *0.50*(1-0.50)*0.30=0.01 128 数字图像处理与深度学习 根据MSE函数值对各个连接权重的梯度,对权重进行调整,如式(3-25)所示。 w'i=wi-η*δi (3-25) 这里,w'是新的权重,wi 是原有权重, i 是MSE误差在神经元连接权重上的梯度, iδη 是学习率,控制对梯度的学习程度。 设η=1,调整后的权重,如图3-27所示。 图3-27 神经网络中调整后的权重 再次进行一次正向计算,MSE=0.与调整前的0.误差损失降低了, 22, 25比较, 说明 模型通过学习提高了预测或拟合精度。 多次迭代地进行正向计算→反向传播,使得误差损失值不断降低。当误差损失值基 本不再变化时,认为找到了合适的模型参数,结束训练过程。 3.深度卷积神经网络 4 深度卷积神经网络(DepConvolutionNeuralNetwork)是一种多层前馈神经网络, 多通道输入的图像可以直接输入网络,经过卷积层、池化层、归一化层、全连接层等依次进 行处理,输出分类或回归结果。深度卷积神经网络是机器视觉系统采用的典型深度学习 方法,是在一般神经网络的基础上发展而来。与一般神经网络相比,深度卷积神经网络又 有许多不同的特点,如表3-2所示。 表3- 2 深度卷积神经网络与一般神经网络的比较 比较深度卷积神经网络一般神经网络 网络结构数十层及以上一般3层或以内 层间连接共享权重、部分连接一般为全连接 目标损失函数交叉熵(CE)损失函数MSE函数 激活函数ReLU及改进函数Sigmoid函数 避免过拟合Dropout、BN等技术经验 参数优化Adam SGD (1)从网络结构来说,一般神经网络通常为3层或3层以内,而深度卷积神经网络大 多在数十层甚至上百层。