第5章视觉数据分析 5.视觉数据分析概述 1 ie) vdo), 进而提供建议或采取行动,可为现实生活和生产中的许多应用提供技术支持。例如,在工业 检测中,采集产品图像并使用计算机视觉技术,利用目标检测技术可检测出产品在生产过程 中出现的裂纹、形变、部件丢失等外观缺陷,达到提升产品质量稳定性和生产效率的目的;在 物流运输中,采集包裹运输过程的视频,利用目标跟踪技术可获取包裹的运动轨迹,通过运 动轨迹的分析预警包裹跌落、包裹损毁等状况,达到节约人力成本和提高管理效率的目的。 视觉数据分析以图像或视频作为输入,通过计算机视觉技术构建模型,旨在充分提取图 像和视频数据的特征,进而根据特定任务利用提取的特征完成相应的功能。通常,使用到的 imageclasificatioobjectdetectio 视觉数据主要包括图像(mag和视频(ie通过计算机技术获取其中的有用信息, 计算机视觉技术有图像分类(n)、目标检测(n)、图像分割 (imagesegmentation)和视频目标跟踪(videoobjecttracking)等。其中,图像分类技术将整 幅图像划分到某个类别,例如给定狗或猫的图像,使用图像分类技术可将图像标记为狗或 猫;目标检测技术在图像分类的基础上,既要使图像中的目标分类正确,也要检测目标的实 际位置,例如给定包含狗和猫的图像,使用目标检测不仅要分别检测出狗和猫这两个类别, 还要分别检测出狗和猫的位置;图像分割技术把图像分成若干个各具特性的区域,并提取出 感兴趣区域,对于包含狗和猫的图像,图像分割的输出至少包含感兴趣的狗的区域、猫的区 域和其他不感兴趣的区域;视频目标跟踪技术则需把视频数据拆解为一系列连续的视频帧, 当某一帧出现感兴趣的目标时,在后续帧中对该目标进行跟踪,对于一段包含狗的视频,当 视频目标跟踪在第一帧检测到狗时,需要对后续帧逐一检测是否存在同样的这只狗。 各类视觉数据分析任务都需对图像和视频数据进行特征提取,所提取特征的质量决定 了各种任务是否能成功完成。传统的特征提取方法需总结大量的先验知识,依靠人工方式 设计特定的规则,在一定的时间范围内能满足实际需求。随着应用场景的不断丰富、数据规 模的快速增大和性能要求的不断提高,依靠先验知识设计的规则在特征提取上遇到了瓶颈。 随着人工智能技术的快速发展,由于深度神经网络能从大量数据中学习到丰富的特征,且仅 有极少部分需人为干预,深度神经网络受到了学界和业界的广泛关注,并取得了巨大的成 功,能进一步满足人们越来越多的视觉数据分析需求。 卷积神经网络(convolutionalneuralnetwork,CNN)是用于视觉数据特征提取的主流模 型,基于CNN的视觉数据分析,也是深度学习技术在实际中应用最广泛的领域。CNN起源 第 5 章视觉数据分析 于20 世纪70 年代人们对动物大脑视觉系统的研究。近年来,随着计算性能的提升和越来 越多的研究人员投入,CNN 对视觉数据处理的优势被充分挖掘,其不仅能将大数据量的图 像和视频进行降维处理,且能从有限的数据中提取到有效的特征。因此,基于CNN 开发的 图像分类、目标检测、图像分割和视频目标跟踪等大量算法已广泛应用于工业检测、农业生 产、医疗保健、故障诊断和自动驾驶等领域。 本章介绍视觉数据分析的关键流程,通过对目标检测、图像分割和视频目标跟踪等以 CNN 为主干网络进行特征提取的典型任务的讨论,使读者更深入理解视觉数据分析技术。 5.目标检测 2 2.目标检测概述 5.1 目标检测是对图像中的目标进行分类和定位,最终得到图像中目标的类别及该目标在 图像中的位置。例如,在图5.为保证施工人员安全, 1所示的5G 基站建设中, 必须确保施工 人员正确佩戴安全帽、安全绳和反光衣等各类安全护具。此时,使用目标检测算法对摄像头 采集到的图像中的安全帽和人员等目标进行检测,可快速判断目标人员是否正确佩戴安全 帽,能有效地加快检测效率,减少人工检测成本。 图5.安全帽佩戴检测 1 目标检测技术的研究和应用由来已久,在深度神经网络崛起之前,传统目标检测技术涉 及区域选择、手动特征提取、分类器分类等步骤。其中,手动提取特征的方法往往很难满足 目标的多样化特征,因此这种解决方案一直未能有效解决目标检测问题。自深度神经网络 得到关注并被广泛应用以来,特别是CNN 对图像强大的特征提取能力快速推动了目标检测 技术的发展。基于CNN 的目标检测包括目标分类和目标定位两个任务,目标分类任务判断 输入图像中是否包含需要检测的目标类别,目标定位任务确定输入图像中目标类别的具体 位置,并输出目标的边界框来表示具体的位置信息。围绕这两个任务,可将目标检测算法分 twostagonestag为两阶段(e)算法和一阶段(e)算法。两阶段算法将目标检测任务分为两个 阶段,首先生成目标物体的边界框,再对其类别进行预测;一阶段算法将边界框定位问题转 107 化为回归(问题进行处理,直接计算目标的类别和边界框坐标。因此,两阶段算法通 regresion) 常比一阶段算法具有更高的准确率,而一阶段算法比两阶段算法具有更高的效率。下面以 CNN模型和YOLO这一经典的一阶段目标检测算法为代表,详细介绍目标检测技术。 5.2 卷积神经网络 2. CNN是一种深度学习模型,自2012年后被广泛应用于视觉数据分析,且对图像数据的处 理尤为有效。它不仅能自主地提取图像数据特征,且基于CNN的模型具有良好的泛化能力。 1.CNN 结构 2所示, inputlayer)、convolutional layeoolinglayer) fulyconnectedlaye CNN的层级结构如图5.主要包含输入层(卷积层( r)、池化层(p和全连接层(r),通过不同层级的组合可构 建不同的CNN,对图像实现不同的处理任务。 图5. 2 CNN 层级结构图 2.CNN 层级简介 1)输入层 ( 输入层即输入的图像数据,一张图像在计算机中通常采用矩阵形式来存储,并由红绿蓝 RGB)三个通道叠加而成。因此,一张图像通常存储为(长×宽×通道数)的多维矩阵(也称 为特征图),其中的数值表示RGB通道的256级亮度值,3所示。 如图5. 图5.输入图像及其对应的特征图形式 3 108 第 5 章视觉数据分析 2)卷积层 卷积层是CNN的核心层级,其作用是对输入特征图进行特征提取。每个卷积层中与输 入特征图进行卷积运算的结构称为卷积核,输入特征图通过与卷积核进行卷积计算,得出输 出特征图。 对于图像数据,卷积计算是在图像空间上翻转、滑动卷积核,从而提取图像的特征。为 了减少不必要的翻转开销,在CNN的具体实现中,通常以互相关(cros-corelation)计算代 替卷积计算,具体为卷积核中所有作用点依次与输入特征图中的像素点相乘并相加,如图5. 所示。原特征图和卷积核中的某个作用点,互相关计算为(7×5)+(3×3)+(6×3)+(1× 4 9)+(2×1)+(7×4)+(5×2)+(3×1)+(9×9)=195,然后为每个输出特征图的像素点加 一个偏置值,若偏置值为3,则最终输出结果为195+3=198 。一个卷积层中通常包括多个 卷积核,其参数可通过学习得到,与其他神经网络模型的计算相比,卷积层中的互相关计算 能高效地提取图像中的特征,并减少计算量。 图5.互相关计算 4 下面介绍卷积计算涉及的概念。深度是指特征图的通道数量,每个卷积层输出特征图 的深度与卷积核数量一致;步长用来描述卷积核移动的间隔;填充是指对特征图边缘添加适 当数目的行和列,旨在使卷积核能完整地覆盖特征图。 3)池化层 池化是一种将特征图进行压缩抽象的步骤,常见的池化操作包括最大池化和平均池化。 最大池化在对应区域内取最大值作为输出,平均池化取对应区域内的平均值作为输出。池 化层可降低网络模型的计算量,避免过拟合。步长为2的2×2最大池化操作如图5. 5所示, 即取出原特征图中每2×2个位置的最大值。 图5.最大池化 5 109 4)全连接层 全连接层通常作为CNN 的输出层级,旨在将高维的特征图通过全连接操作映射成低维 数据,进而实现图像数据处理的任务。CNN 中的全连接操作通过互相关计算实现,例如,对 于输入的长宽为a、a×a×b), c×1) 深度为 b 的特征图(全连接操作可转化为该特征图与 c 个同 样长宽为a、深度为 b 的卷积核进行的卷积计算,生成(维的输出向量。 5.3 YOLO 算法 2. YOLO 算法是基于单个CNN 模型的一阶段目标检测算法,将目标分类和目标定位两 个任务合二为一,作为一个回归任务,可直接从完整的图像中预测目标类别和边界框坐标, 具有实时检测的性能和非常广泛的应用。 1.YOLO 框架 YOLO 算法以固定大小的图像数据作为输入,经CNN 提取到特征图后,由两个全连接 层对特征图进行降维,得到固定大小的输出特征图,输出特征图中包含本张图像中检测到的 目标类别及其边界框的回归值,其框架如图5.输出 6所示。输入图像大小为448×448×3, 特征图的大小为7×7×(B×5+Cls), 其中,7×7 表示可将输出特征图看作49(7×7)个像 素点,每个像素点均为(B×5+Cls)的向量; B 表示每个像素点存在 B 个边界框负责检测目 标,每个边界框需要中心点(y)、)、h)、Cn及类别数(s) x,宽(高(置信度(of) Cl这5个值表 示,Conf表示该边界框含有目标的概率(w) ,Cls表示类别数,每个目标类别对应的概率为 i)}Cls 将 B 和Cl {p(i=1。例如,s分别设置为2和2,也就是将图像划分为7×7 个像素点,每个 像素点有两个边界框负责检测目标,且需检测的两个目标类别对应的概率。 图5. 6 YOLO 框架结构 2.YOLO 基本步骤 由特定数据集训练完成的CNN 算法可将其模型参数应用于特定的视觉数据分析任务。 例如,由安全帽佩戴数据集所训练完成的YOLO 算法,可加载其模型参加对新的图像数据 进行是否正确佩戴安全帽的自动检测。在视觉数据分析中,这一过程称为推理(e)。 inferenc 110 第 5 章视觉数据分析 1)图像预处理 基于YOLO网络结构,为获取固定大小的输出特征图,需将输入图像 X 的长宽均缩放 为固定值448 。具体缩放方法为长宽等比例缩放,即图像中最长的边缩放到448像素,对短 边不满448像素的位置使用灰色填充。缩放完成后,输入图像可表示为X448×448×3 。 2)设置边界框 把缩放后的图像划分为7×7的网格,每个网格中设置 B 个边界框,负责检测目标。例 如,将 B 设置为2,也就是将输入图像划分为49(7×7)个网格,每个网格有两个边界框负责 检测目标。 3)输出特征图 首先,YOLO中使用基于CNN实现的GoogLeNet,对 X 提取特征。GoogLeNet为 2014年提出的CNN框架,能高效地利用计算资源,在相同的计算量下提取到更丰富的特 征,其对 X 提取特征的网络结构如表51所示,提取到的特征图为F7×7×1024。其中,_4 .11 Convi=1 表示第 i 个卷积层,Pooli4=1表示第 i 个池化层,ConvBlock_1表示4个卷积层组成的模卷(i) 积模块,ConvBlock2表(_) 示(i) 10个卷积层组成的卷积模块,C(_) onvBlock3表示6个卷积层组成的模卷积模块(_) 。然后,(_) 使用全连接层1对F11降维得F4096×1,再(_) 使用全(_) 连接层2对F12降 维得F[7×7×(B×5+Cls)]×1 。最后,对F13作变换得到输出特征图(12) F7×7×(B×5+Cls)。其中,宽高 t Fot 维度为7(13) ×7,可表示49个像素点。假设B=2时,Fo输出维度为(o) 7×7×(2(u) ×5+Cls)(u) 的特 征图,每个(s) 坐标((t) y,h)、Cn {p(i=1。 2×5+Cl向量表示预测得到的边界框x(u) ,w,of及目标类别概率 Cls i)} 表5. ogLNt结构表 1Gee GogLeNet X(输入) 输出 Conv_1 (448×448×3) F1(224×224×64) Pool_1 F1 F2(112×112×256) Conv_2 F2 F3(112×112×192) Pool_2 F3 F4(56×56×192) Conv_Block_1 F4 F5(56×56×512) Pool_3 F5 F6(28×28×512) Conv_Block_2 F6 F7(28×28×1024) Pool_4 F7 F8(14×14×1024) Conv_Block_3 F8 F9(7×7×1024) Conv_3 F9 F10(7×7×1024) Conv_4 F10 F11(7×7×1024) 4)非极大值抑制 y,Conp(i=1, non-maximum 根据预测得到的(x,w,h)、f及{i)}Cls 利用非极大值抑制( suppresion,NMS)方法进行筛选,得到最有可能包含目标的边界框。两个边界框的交集面 积与并集面积的比值称为交并比(用于度量两个边界框的交 intersectionoverunion,IoU), 111 叠程度,其计算如图5.onf最大的边界框 7所示。非极大值抑制首先从边界框集合中取出C 作为输出;然后逐一计算其余边界框与输出边界框的IoU,将IoU 大于给定阈值(TS)的边 界框从边界框集合中移除;最后,重复上述步骤,直至边界框集合为空,输出的边界框即为最 有可能包含目标的边界框。 图5. U 计算 7 Io 1。 上述思想见算法5. 算法5. 1 YOLO 算法 输入: X:待检测图像,TS:IoU 阈 值 输出 : l _={i}1:包含目标的边界框集合 PredbboxBboxi= 步骤: 1.对 X 进行预处理,将输入图像 X 的维度处理为448×448×3 2.将 X 划分为7×7 的网格 3.F11←GogLNet(X) / / 提取 X 的特征,F11 维度为7×7×1024 4.F12←FC_11) / / 使用全连接层FC_1对F11 降维,F12 维度为4096×1 1(F(e) (o) 5.F13←FC_2(F12) / / 使用全连接层FC_2对F12 降维,并得到固定大小的维度,F13 维度为[7×7×(B×5+Cls)]×1 6.Fout←Rshape(F13) / / 将二维矩阵F13 转换为三维矩阵Fout,Fou维度为(7×7×(B×5+Cls)) 动画5- 1 7×7×B 令{i}(e) 为所得边界框集合,每个边界框Bbi ={xi ,wi , i , i ,7×7×B 7. Bbox=1 oxyi ,honfClsi}C(t) 8.Confi =maonfi}=1 ), 令A=Bboxi ,Pred_bbox={A}x({C(i) //从边界框集合中取出C(i) onf最大的边界框 A 9.Fori=1To7×7×B Do 10. Score←IoU(A,Bboxi) 11. IfScore>TSTh 12. Delete(Bbox/ / 从边界框集合中移除该边界框i(e) )(n) 13. ElePe_bbx.ppnd(oi) / / 将该边界框添加至Pe_bbox集合 srdoaeBbxrd 14. EndIf 15.EndFor 16.ReturnPred_bbox / / 返回筛选剩余的边界框 112 第 5 章视觉数据分析 例5.用YOLO 算法检测图像中的目标( 为例,8所示。将输入图像缩放为 1 鸟) 如图5.448×448×3,设S=7,即划分为7×7 的网格(如图中Image1所示); 将处理后的图像输入 YOLO 模型中进行特征提取,每个网格采用2个边界框检测目标(B=2), 由于目标仅有鸟, 因此Cls=1,最终输出特征图的维度为7×7×(2×5+1)( 如图中Image2所示); 对于7×7 i, 大小的输出特征图,第i行第 j 列的像素点对应维度为(2×5+1)的特征向量,表示为v(j)= i,j)(j) i,(j) j) j) i,(j) i,i,( i,(j) i,i,i,(j) i,(j) j) i, Con1 x1 1 1 1on2 x22 22 {f(,,y,w,h(,Cf(,,y,w,h(,pj)}, 其中 i,(j) i,i,i,(j) f(h(f( (i,j),(j),i,,(j),j))表示该像素点中第一个边界框的信息,(j),i,, i,(j)h(j) i,y2 w22 p Con1 x1 y1 w1 1 Con2 x2 (j),i,,i,)表示该像素点中第二个边界框的信息,(j)表示该像素点中的对象为鸟 类的概率。输出特征图共能检测出98(7×7×2)个边界框,将98 个边界框通过NMS 方法 进行筛选,最终得到像素点(4,5)所对应的边界框(如图中I3所示)为最可能属 i=j= 98 。 mage 于鸟的边界框及其属于鸟的概率为0. 图5.基于YOLO 算法的检测 8 5.图像分割 3 5.1 图像分割概述 3. 图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相 交的区域,使得这些特征在同一区域内表现出一致性或相似性,而在不同区域间表现出明显 113 的不同。因此,图像分割有助于区分图像的组成部分,为图像的后续处理和应用奠定基础。 例如,在医学影像领域,绝大多数人体的影像数据都可分割成不同的器官、组织类型或疾病 症状,分割好的区域可很好地辅助医生减少诊断所需的时间。 与目标检测类似,图像分割的研究和应用仍由来已久,在深度神经网络崛起之前,主要 的图像分割技术包括阈值分割、区域分割、边缘分割、纹理特征和聚类等,而这些传统的方法 往往需相互结合起来使用才能取得较好的分割结果;自深度神经网络得到关注并被广泛应 用以来,特别是CNN对图像的处理,为图像分割领域注入了强大的技术活力,并成为图像分 割最核心的支撑技术。基于CNN的图像分割聚焦到具体的每一个像素,对每一个像素赋予 一个语义标签,因此这类图像分割可分为语义分割和实例分割两类。语义分割是对所有的 图像像素执行像素级标记,即为每个像素分配一个类别,但不区分同一类别中的对象。实例 分割将目标检测和语义分割相结合,通过检测和描绘图像中每个感兴趣的对象进一步扩展 语义分割范围,即需区分同一类别中的不同对象。相比语义分割,实例分割发展较晚,因此 实例分割算法大多基于CNN实现,且分割精度和效率逐渐得到提升。下面以MaskR-CNN 这一经典的实例分割算法为代表,详细介绍图像分割技术及其实现过程。 5.3.2 MaskR-CNN 算法 MaskR-CNN实例分割算法在目标检测的基础上再进行图像分割,概念简单、灵活,不 仅可高效地检测出图像的目标,且对每个目标生成一个高质量的分割掩膜,是通用的图像分 割框架。 1.MaskR-CNN 框架 Mas-atrRCNN的框架, ful kRCNN基于Fse-在特征提取网络之后加入了全卷积网络( convolutionalnetwork,FCN),由原来的两个任务(分类+回归)变为了三个任务(分类+回 归+分割)。MaskR-CNN采用和FasterR-其框架结构如图5. CNN相同的两个阶段,9所 示。第一阶段,待分割的图像由CNN提取特征,该特征的每个位置都事先设定好部分锚框, 使用区域提案网络(对这些锚框进行初步筛选,并留下感兴 regionproposalnetwork,RPN) 趣的区域(regionofinterest,RoI),即可能的目标区域,然后将这些RoI逐一输入RoI对齐 (RoIalign)模块,使每个RoI对齐特征图,并得到统一维度的输出。第二阶段,统一维度的 RoI除了用于分类和边界框回归,还添加了一个FCN的分支,对每个RoI预测了对应的分 割掩膜(mask)图,以说明给定像素是否是目标的一部分。当像素属于目标时,所有位置掩 膜标识为1,其他位置掩膜标识为0。 2.MaskR-CNN 关键模块 1)RPN结构 RPN是一个轻量的神经网络,通过滑动窗口来扫描特征图,并寻找存在目标的区域,这 样的思想使得RPN可有效复用所提取的特征,且避免了重复计算。RPN为特征图上各个 位置的每个锚框生成两个输出,一是锚框的前景概率和背景概率(9的Softma 图5.x分支), 前景概率高,则锚框框选的部分为目标,背景概率高,则锚框框选的部分是背景;二是锚框精 调参数(图5.ox_reg分支), 因此 9的Bb事先设定的锚框可能并未完美地位于目标中心, RPN评估了锚框中心点坐标、宽和高的变化,以精调锚框来更好地拟合目标。通过RPN的 114 第 5 章视觉数据分析 图5.MakR-CNN 框架结构 9s 处理,MaskR-CNN 可最好地选出包含目标区域的锚框,并对其位置和尺寸进行精调,而背 景锚框经筛选后数量会明显减少,被筛选后剩余的锚框被称为RoI。 2)RoI对齐 由于剩余的每个RoI宽高等维度大小不一,必须将这些RoI与原特征图对齐,并统一维 度大小,以便后续对所有RoI进行相同的分类、边框回归和分割掩膜处理任务。之前实现该 操作的模块称为RoI池化(RoIpoolin如图5. g), 10 上半部分所示。若当前得到一个特征图 尺寸为5×7 的Ro要求此区域统一缩小为2×2 。此时, 5, I, 因为5与2的比值是非整数2. 所以RoI池化将对其进行取整的分割,即将“5”分割成“3+2”,将“7”分割成“3+4”,然后取 每个区域的最大值作为本区域的值。 从该过程可看出,使用RoI池化很粗糙地量化一个区域的值,且每个区域的尺寸还有较 大差距,会导致RoI通过FCN 进行像素分割的过程中目标对齐时出现较大的偏移。对此, Mas-oI池化, 其实现方式如图5. kRCNN 使用RI对齐代替Ro高效地解决了这个问题, 10 下半部分所示。首先将5×7 特征图固定为相同大小的2×2 区域,即得到图中的①、②、③ 和④这4个区域,该过程中不做任何量化处理;然后对这4个区域内部进行同样的处理,再 细分成4个规模相同的区域(使用虚线表示), 之后对于每一个最小区域(包含不止一个像素 点), 确定其中心点(使用“+”号表示), 并使用双线性插值法得到该“+”号所在位置的值,作 为最小格子区域的值。对于①、②、③和④这4个区域,每个区域都会有4个这样的值,取这 4个值中的最大值作为每个区域的值。最终可得到2×2 区域中每个位置的值,作为统一维 度的特征图输出结果。上述RoI对齐的处理方式可避免计算过程中丢失原特征图的信息, 且中间过程全程不量化,保证了最佳的信息完整性。 3)FCN 结构 FCN 是一个经典的语义分割结构,可对一张图像上的所有像素点进行分类,即实现对 图像中目标的准确分割。FCN 是一个端到端的网络,结构如图5.主要执行过程包 11 所示, 括卷积和转置卷积(或反卷积), 即先对图像进行卷积和池化,使其特征维度的大小逐渐减 115