随着物联网技术的发展,视觉感知逐步和物联网生态融合形成视觉传感器网络,其利用空间上分布的网络智能相机实现对复杂场景的多视角感知。视觉传感器网络可视作一种无线传感器网络,后者的许多理论和应用都适用于前者。随着移动互联网和人工智能技术的普及,传统的视觉传感网已经无法满足移动多变的应用场景,需要融合更加智能的视觉感知技术。本节将介绍当下主流的视觉感知技术。
图像分析中,图像质量的好坏直接影响识别算法的设计和识别效果的精度,因此在进行图像分析(特征提取、分割、匹配和识别等)之前,需要进行预处理。图像预处理的主要目的包括:消除图像中的无关信息、恢复有用的真实信息、增强有关信息的可检测性、最大限度地简化数据等,从而改进特征提取、图像分割、匹配和识别的性能。一般的预处理流程为灰度化→几何变换→图像增强。
1.数据预处理
一般而言,彩色图像数据量大、处理开销高。因此,为了达到提高处理速度,需要减少数据量。一种常用的方法是灰度化,以RGB(Red, Green, Blue)模型为例,当 R = G = B 时表示灰度颜色,其中 R = G = B 的值称作灰度值。因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0~255。一般有分量法、最大值法、平均值法、加权平均法四种方法对彩色图像进行灰度化。如图3-1所示,下面介绍四种常见的图像灰度计算方法。
图3-1 灰度法图像预处理
分量法: 将彩色图像中三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。如公式(3-1)所示,其中 f k ( i , j )( k = 1, 2, 3)为转换后的灰度图像在( i , j )处的灰度值。
最大值法: 如公式(3-2)所示,将彩色图像中三分量亮度的最大值作为灰度图的灰度值。
平均值法: 如公式(3-3)所示,将彩色图像中三分量亮度的平均值作为灰度图的灰度值。
加权平均法: 如公式(3-4)所示,根据重要性等指标,将三分量进行加权平均。由于人眼对绿色的敏感度最高,而对蓝色的敏感度最低,因此可根据公式(3-4)对RGB三分量进行加权平均,以得到较为合理的灰度图像。
在灰度计算完成后,通常会对图像进行几何变换。图像几何变换又称为图像空间变换,通过平移、转置、镜像、旋转、缩放等几何变换对图像进行处理,用于改正图像采集系统的系统误差和仪器位置(成像角度、透视关系乃至镜头自身原因)导致的随机误差。
2.数据增强方法
物联网场景中,经常需要通过图像增强来改善其视觉效果。图像增强可以看作是针对给定图像的应用场景,有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或突出某些特定信息,提升图像识别效果,满足特殊分析需要。常用的图像增强算法可分成两大类:空间域法和频率域法。
空间域法: 空间域法是一种直接图像增强算法,分为点运算算法和邻域去噪算法。点运算算法包括灰度级校正、灰度变换(又叫对比度拉伸)和直方图修正等。邻域去噪算法包括图像平滑和锐化两种,其中平滑常用算法有均值滤波、中值滤波、空域滤波,锐化常用算法有梯度算子法、二阶导数算子法、高通滤波、掩模匹配法等。如图3-2所示为邻域去噪算法原理示意,目标像素点的邻域是以其自身为中心的正方形或矩形子图像,利用邻域中的像素值计算得到输出像素。其中,正方形邻域最为常用,一般取奇数大小为边长(如3×3,5×5),通过移动子图像中心便可以实现对整个图像的处理。
图3-2 邻域去噪算法示例
频率域法: 频率域法是一种间接图像增强算法,常用的频域增强方法分为低通滤波器和高通滤波器。低通滤波器包括理想低通滤波器、巴特沃斯低通滤波器、高斯低通滤波器、指数滤波器等。高通滤波器包括理想高通滤波器、巴特沃斯高通滤波器、高斯高通滤波器、指数滤波器等。图3-3为基于高斯低通滤波器的图像增强效果示例,其中图3-3a为原始图像,图3-3b和图3-3c分别是低通截止频率取5Hz和200Hz时的处理结果。
图3-3 基于高斯低通滤波器的图像增强示例
3.边缘检测
边缘检测是物联网图像处理与计算机视觉中极为重要的一种图像分析方法,其目的是找到图像中亮度变化剧烈的像素集合,一般表现为轮廓。如果能够精确刻画图像边缘,则意味着目标物体能够被定位和测量,包括物体的面积、直径、形状等。边缘一般在下面四种情况下产生:
● 深度的不连续(物体处在不同的物平面上);
● 表面方向不连续(如正方体的不同的两个面);
● 物体材料不同(这样会导致光的反射系数不同);
● 场景光照不同(如被树荫投向的地面)。
图3-4 边缘检测图像示例
图3-4上方是图中水平方向7个像素点的灰度值,我们可以容易地判断在第4个和第5个像素之间存在一个边缘,因为二者之间发生了强烈的灰度跳变。然而,实际的边缘检测往往并不简单,需要设定相应的阈值进行区分。一阶微分边缘算子是一种经典的边缘检测方法,又称为梯度边缘算子,其利用图像在边缘处的阶跃性(即图像梯度在边缘取得极大值)进行边缘检测。边缘检测算子的评判标准如下所述。
● 高检测率:边缘检测算子应该只对边缘进行响应,检测算子不应漏检边缘,也不应将非边缘标记为边缘。
● 精确定位:检测到的边缘与实际边缘之间的距离要尽可能小。
● 明确响应:对每一条边缘只有一次响应,得到一个点。
当前,Canny边缘检测被认为是性能较优的一阶微分算子检测算法,其在一阶微分算子的基础上增加了非最大值抑制和双阈值两项改进。其中,利用非最大值抑制不仅可以有效抑制多响应边缘,而且还能提高边缘定位精度;另外利用双阈值则可有效减少边缘漏检率。Canny边缘检测主要分四步进行,分别为去除噪声、计算梯度与方向角、非最大值抑制和滞后阈值化。
在去除噪声并获取梯度、方向角的基础上,需要进行非最大值抑制:图像梯度幅值矩阵中的元素值越大,说明图像中该点的梯度值越大,但并不代表这个点就是边缘(这仅是属于图像增强的过程)。在Canny算法中,非极大值抑制是进行边缘检测的重要步骤,通俗意义上是指寻找像素点局部最大值,将非极大值点所对应的灰度值置零,从而剔除大部分非边缘点。此外,由于噪声影响,本应连续的边缘很容易出现断裂。针对此,滞后阈值化设定两个阈值:一个为高阈值Th,一个为低阈值Tl。如果任何像素边缘算子的影响超过高阈值,则将其标记为边缘;响应超过低阈值(高低阈值之间)的像素如与已经标记为边缘的像素4-邻接或8-邻接,则同样将其标记为边缘。
4.语义分割
语义分割是像素级别的分类,即将同一类的像素划分为一类。如图3-5所示的照片,属于路上汽车的像素分成一类,属于周边房屋的像素则分成另一类,此外背景道路、行人等相关的像素应分为一类。需要指出的是语义分割不同于实例分割,例如,如果一张照片中有多个人,语义分割只需将所有人的像素归为一类,而实例分割则需将不同人的像素归为不同类。换言之,实例分割比语义分割更进一步。
图3-5 语义分割示例
最简单的语义分割技术是基于硬编码规则或属性的区域划分和标签分配,其中规则可以根据像素的属性(例如灰度级强度)进行构建。一种常用的方法是拆分(Split)和合并(Merge)算法,其递归地将图像分割成子区域直到可以分配标签,然后将相邻的子区域与相同的标签组合进行合并。这种方法的不足之处是规则为硬编码。此外,仅用灰色级别信息来表示复杂的类别(如人)是一件极其困难的事情。因此,需要特征提取和优化技术来正确地学习复杂类别的表示。
针对语义分割,深度学习通过简化通道执行语义分割,显著提升了分割结果。目前,用于语义分割最简单和最流行的架构之一是完全卷积网络(Fully Convolutional Network, FCN)。FCN首先通过一系列卷积将输入图像下采样到更小的尺寸(同时获得更多通道),这组卷积通常称为编码器;然后通过双线性插值或一系列转置卷积对编码输出进行上采样,这组转置卷积通常称为解码器。通过FCN可以将不同类型的语义分割转化为对应的分类模型,再通过全连接网络实现语义分割的目的。
5.图像滤波
由于成像系统、传输介质和记录设备等的不完善,数字图像在其形成、传输过程中往往会受到多种噪声的污染,此外图像处理的某些环节同样可能在结果图像中引入噪声。这些噪声在图像上表现为引起较强视觉效果的孤立像素点或像素块,形成对观测信息的不利干扰。对于数字图像信号而言,噪声表现为或大或小的极值,其通过加减作用于图像像素的真实灰度值上,对图像造成亮、暗点干扰,降低图像质量,影响图像分割、特征提取、图像识别等后续处理。为此,需要构造图像滤波器,以期在有效去除噪声的同时保护图像目标的形状、大小及几何和拓扑结构特征。
非线性滤波器是实现图像滤波的一类常用方法。一般而言,当信号频谱与噪声频谱混叠时或者信号中含有非叠加性噪声时(如非高斯噪声),传统的线性滤波技术(如傅里叶变换)在滤除噪声的同时,总会以某种方式模糊图像细节(如边缘),导致图像线性特征的定位精度及特征的可抽取性降低。相比而言,非线性滤波器是基于对输入信号的非线性映射,能够在将特定噪声近似地映射为零的同时保留信号的重要特征,因而在一定程度上克服了线性滤波器的不足之处。
中值滤波是基于次序统计完成信号恢复的一种典型非线性滤波器,最初用于时间序列分析,后来被用于图像处理,并在去噪复原中取得了较好的效果。其基本原理是把图像或序列中心点位置的值用区域中值替代,具有运算简单、速度快、去噪效果好等优点。中值滤波效果如图3-6所示,其中左侧为原始图像,右侧为滤波结果。然而,一方面中值滤波不具有平均作用,在滤除某些噪声时(如高斯噪声)会严重损失信号高频信息,使图像边缘等细节变得模糊;另一方面中值滤波的滤波效果往往受到噪声强度和滤波窗口大小、形状等因素的制约。因此,为了使中值滤波器具有更好的细节保护特性及适应能力,研究人员提出了许多中值滤波改进算法。一种改进是标准中值滤波,其基本思想是将滤波窗口内的最大值和最小值均视为噪声,用滤波窗口内的中值代替窗口中心像素点的灰度,实现噪声抑制。
图3-6 中值滤波示例
视觉感知的一个重要应用是移动目标检测,如图3-7所示,智能交通系统利用视觉技术感知移动对象并执行导航。此类系统基于两项重要任务:其一,执行预处理,将传感器收集到的数据转换为更可用的信息;其二,执行特征检测,以便从数据中提取视觉特征,如角、边等。在此基础上,可以进一步实现更加复杂的机器视觉功能,如目标检测、分类、跟踪、导航等。
图3-7 移动目标识别示例
得益于深度学习技术的快速发展,基于计算机视觉的目标检测算法不断涌现,并取得了突破性成果。目前,基于深度学习的目标检测算法分成两类:两阶段(Two-Stage)目标检测算法和一阶段(One-Stage)目标检测算法。两阶段目标检测算法(如R-CNN、Faster R-CNN、R-FCN等)需要生成一系列可能包含目标物体的候选边界框,然后再对样本进行分类。一阶段目标检测算法不需要生成候选框,而是直接利用卷积神经网络提取特征输出物体的类别和位置,从而将检测任务变为回归任务,代表性算法有Yolo、SSD和Retina-Net等。下面以Yolo算法 [1] 为例,介绍目标检测过程。
在介绍Yolo算法之前,首先介绍滑动窗口技术,以便更好地理解Yolo算法。采用滑动窗口的目标检测算法是将检测问题转化为图像分类问题,即采用不同大小和比例(宽高比)的窗口在整张图片上以一定步长进行滑动,然后对窗口区域进行图像分类,实现对整张图片的检测,如图3-8所示。然而,此类方法的一个致命缺点是无法预先知道目标的大小,因而需要设置不同尺寸和比例的滑动窗口并选取合适的步长,导致计算量非常大。解决思路之一是减少需要分类的子区域,这就是R-CNN的一个改进策略,其采用“选择性搜索”(Selective Search)方法发现最可能包含目标的子区域(Region Proposal),即通过采用启发式方法过滤掉大量子区域,从而提升效率。
图3-8 基于滑动窗口的目标检测方法
结合卷积运算特点,下面介绍一种更高效的滑动窗口算法,即全卷积方法—用卷积层代替全连接层,如图3-9所示。输入图片大小是16×16,经过一系列卷积操作,提取到2×2的特征图。其中,2×2特征图中的每个元素都与原图一一对应,如图3-9中灰色的格子对应灰色的区域,这便相当于在原图上做大小为14×14的窗口滑动且步长为2,共产生4个子区域。最终输出的通道数为4,可以视作4个类别的预测概率值,这样一次卷积运算就可实现对所有子区域的分类预测。上述方法利用了图片空间位置信息的不变性,尽管卷积过程中图片大小减少,但是位置对应关系保持不变。这一思想同样被R-CNN借鉴,优化为Fast R-CNN算法。
图3-9 基于CNN的滑动窗口算法示意
上述思想尽管可以减少计算量,但只针对一个固定大小与步长的窗口。为了进一步降低计算量,Yolo算法不再利用滑动窗口,而是直接将原始图片分割成互不重合的小方块。具体而言,首先通过卷积特征图,使得特征图中的每个元素对应原始图像中的一个小方块,然后利用特征元素预测中心点在相应小方格内的目标,这便是Yolo算法的核心思想。
当前,智能服务机器人正成为行业的风口浪尖,从清扫机器人开始,家庭陪伴机器人、送餐机器人等陆续进入公众视线。其中,自主定位导航技术作为此类机器人的关键支撑技术,越来越受到重视。同时,作为自主定位导航技术的重要突破口,同步定位与地图构建(Simultaneous Localization and Mapping, SLAM)技术 [2] 成为关注焦点。依据感知设备的不同,SLAM技术可以分为激光SLAM、视觉SLAM等。其中,激光SLAM由于起步较早,目前已较为成熟并得到广泛应用。与之相比,视觉SLAM具有设备成本低、感知信息丰富等优势,更有利于场景重建,因而成为近年来的研究热点。
1.视觉SLAM
视觉SLAM主要可以分为单目、双目(多目)、RGBD三类,此外还有基于鱼眼、全景等特殊相机的SLAM技术。单目相机SLAM简称MonoSLAM,仅需一台相机便可完成SLAM。其优点是传感器简单且成本低廉,主要不足是无法得到准确的深度信息。一方面,由于绝对深度未知,单目SLAM不能得到机器人运动轨迹及地图的真实大小。例如,如果把轨迹和房间同时放大两倍,单目相机会得到相同的感知数据。另一方面,单目相机无法依靠一张图像获得其与物体的相对距离。为了进行相对距离(即深度)的估计,单目SLAM需要依靠运动中的三角测量。换言之,只有相机运动之后,单目SLAM才能感知像素的位置,进而完成定位和地图构建。
相比单目SLAM,双目/多目SLAM在运动或静止时都可以进行深度估计。然而,双目或多目相机的配置与标定都较为复杂,其深度量程也会受到双目/多目基线与分辨率的限制。此外,基于双目图像计算像素距离对算力需求较高。
RGBD相机最大的特点是能够通过红外结构光或信号飞行时间,直接测出图像中各像素与相机之间的距离。因此,与传统相机相比,RGBD相机不仅能够提供更加丰富的信息,而且无须额外进行深度计算。
一般而言,视觉SLAM系统通过连续的相机帧,跟踪设置关键点并基于三角算法定位其三维位置,进而使用相关信息推测相机自身的姿态,绘制与自身位置相关的环境地图,为导航提供支撑。下面重点介绍视觉SLAM技术框架,如图3-10所示。
图3-10 视觉SLAM技术框架
传感器数据: 在视觉SLAM中主要为相机图像信息的读取和预处理。此外,对于部分机器人,可能涉及惯性传感器等信息的读取和同步。
视觉里程计: 视觉里程计(Visual Odometry, VO)又称前端,主要任务是通过相邻帧间的图像估计相机运动和恢复场景的空间结构。之所以被称为里程计是因为其只计算相邻时刻的运动,而与之前的信息没有关联。通过融合相邻时刻的运动信息,便可构成相机运动轨迹;进一步地,根据每一时刻的相机位置计算各像素所对应的空间点位置,从而得到地图。
后端优化: 后端优化主要处理SLAM过程中的噪声问题。具体地,前端为后端提供待优化的数据及相应的初始值,后端则负责整体的优化过程。在视觉SLAM中,前端更多涉及图像特征提取与匹配,后端主要是滤波和非线性优化等。
回环检测: 回环检测是指机器人识别曾到达场景的能力。如果检测成功,则可显著减小累积误差。回环检测实质上是一种检测观测数据相似性的算法,例如词袋模型(Bag-of-Word,BoW)。词袋模型通过聚类图像中的视觉特征建立词典,进而基于词典寻找每一图像所包含的“单词”。
地图构建: 地图构建是根据估计所得轨迹建立满足任务要求对应的地图。机器人学中常用的地图表示方法有栅格地图、特征点地图、直接表征法及拓扑地图,下面分别进行介绍。
● 栅格地图 (Grid Map)是最常见的一类环境描述方式。如图3-11所示,栅格地图就是将环境划分成一系列栅格,其中每一栅格给定一个可能值,表示其被占据的概率。这种地图看起来和人们通常认知的地图几乎没有区别,最早由NASA在1989年提出并应用于火星探测车。栅格地图的本质是一张位图图片,其中每个“像素”表示实际环境中存在障碍物的概率分布。一般而言,采用激光雷达、超声波雷达、深度摄像机等具备直接测量距离能力的传感器进行SLAM时,适合使用这一种地图表示方法。
图3-11 栅格地图示例
● 特征点地图 是利用几何特征(如点、线、面)表示环境,是视觉SLAM技术中较为常用的一种地图表示方法,如图3-12所示。显然,相比栅格地图,这种地图看起来不够直观。特征点地图一般基于GPS、UWB、摄像头等感知设备和稀疏方式的视觉SLAM算法产生,优点是数据存储量和运算量较小,多见于较早的SLAM算法中。
● 直接表征法 省去了特征或栅格表示这一中间环节,而是直接用传感器读取的数据来构造机器人的位置空间,如图3-13所示为直接记录所得的屋内吊顶画面地图。这种方法与卫星地图相似,直接将传感器原始数据通过简单处理拼接得到地图,相对来说更加直观。
图3-12 特征点地图
图3-13 直接表征法
● 拓扑地图 是一种相对抽象的地图形式,其将室内环境表示为节点和相关连接线的拓扑结构图,其中节点表示环境中的重要位置点(门、拐角、电梯、楼梯等),边表示节点间的连接关系(走廊等)。这种方法只记录所在环境拓扑连接关系,一般是利用相关算法在前几种地图的基础上提取得到。例如,扫地机器人进行房间清扫时,便会建立如图3-14所示的拓扑地图。
图3-14 拓扑地图法
在机器人技术中,SLAM地图构建通常指建立与环境几何一致的地图。一般的拓扑地图只反映了环境中各点的连接关系,并未构建几何一致的地图,因此不能用于SLAM。直接表征法信息冗余最大,对于数据存储能力要求高,而且机器人从中提取有用信息的过程复杂,因此在实际应用中也很少使用。特征点地图是另一种极端,虽然数据量少,但是往往不能反映所在环境的部分必要信息,如障碍物位置等;视觉SLAM技术多采用此类地图解决机器人定位问题,但是如果需要支持自主避障和路径规划,则需额外配置距离传感器。栅格地图恰好介于特征点地图和直接表征法之间:一方面,其蕴含了空间环境中的很多特征,便于机器人进行路径规划;另一方面,其不直接记录原始数据,实现了空间和时间消耗的折中优化。因此,栅格地图是目前机器人领域广泛应用的地图存储方式。
2.路径规划
一般而言,连续域范围内的路径规划(如机器人、飞行器等的动态路径规划)主要包括环境建模、路径搜索、路径平滑三个阶段。
环境建模: 环境建模是路径规划的重要步骤,目的是建立一个便于计算机进行路径规划所使用的环境模型,即将实际的物理空间抽象成算法能处理的抽象空间,实现相互之间的映射。
路径搜索: 路径搜索阶段是在环境模型的基础上应用相应算法寻找一条行走路径,使预设性能函数取得最优值。
路径平滑: 算法搜索得到的路径并不一定是运动体可以行进的可行路径,需要进一步处理与平滑以便得到实际可行的路径。特别地,对于离散域范围内的路径规划问题,或者在环境建模或路径搜索前已做好路径可行性分析的问题,路径平滑环节可以省去。
如图3-15所示,左图为环境建模结果,线框表示机器人轮廓,方块表示障碍物及障碍物附近的碰撞区域;右图中黑色线条表示规划得到的路径。
图3-15 路径规划示例图
3.点云拼接
在物联网的场景视觉感知中,通常需要对不同角度、不同位置的感知视图进行融合,以得到更加全面准确的点云地图,即点云拼接。
基于特征点的点云拼接一般包含两个步骤:其一,在两个点云之间建立点的对应关系;其二,根据点的对应关系计算出点云间的变换关系,如图3-16所示。在第一步,需要设计特征点描述子用于描述并匹配两组点云中的特征点,一般为格局特征点及其周围的空间坐标,或者是曲率空间分布等几何特征。此类方法需要在特征点周围选取一个局部空间(LRF),然而局部空间选取往往较难,因此一般选择使用具有旋转不变性的描述子以避免LRF选取。目前,主流的方法是使用深度学习得到描述子,例如3D Match [3] 首先将特征点周围的点云进行体素化,然后使用基于对比损失函数的3DCNN得到描述子。由于体素化通常会导致点云质量损失,因此进一步提出优化网络,例如PPFNet [4] 使用PointNet框架直接从原始点云中学习特征。基于特征点的点云拼接方法的主要问题是需要特征点周围的点云具有独特几何结构;此外,由于噪声中可能出现误匹配点,所以需要使用具有鲁棒性的配准算法解决,但此类算法通常不能很好地融入学习网络中。
图3-16 点云拼接步骤图
4.三维渲染
图像渲染是将三维的光能传递处理转换为一个二维图像的过程,如图3-17所示。图像的显示设备多为二维光栅化显示器和点阵化打印机,需要将三维实体场景进行光栅化和点阵化表示—即图像渲染。光栅显示器可以看作是一个像素矩阵,在光栅显示器上显示的任何一个图形,实际上都是一些具有一种或多种颜色和灰度像素的集合。
图3-17 三维渲染一般流程
在图像渲染前,需要备好三维几何模型信息、三维动画定义信息和材质信息。其中,三维几何模型通过三维扫描、三维交互几何建模和三维模型库中获取;三维动画定义通过运动设计、运动捕捉、运动计算和动态变形获取:材质信息从扫描的照片、绘制的图画和计算得到的图像中获取。图像渲染的几何阶段主要包括顶点着色器、曲面细分着色器、几何着色器、窗口裁剪、屏幕映射,光栅化阶段主要包括三角形设置、三角形遍历、片元着色器、逐片着色器。图像渲染结束后,会把图像信息输出到图像文件或视频文件,或者是显示设备的帧缓存器中。图3-18所示为渲染前和渲染后的室内结构,呈现出完全不同的效果。
图3-18 图像渲染效果示意
视频目标跟踪是指随着时间推移在视频流中检测和定位移动目标的过程,是一个古老而困难的计算机视觉问题,如图3-19所示。目前,存在各种类型的技术试图解决这一问题,其多数依赖运动模型和外观模型。
图3-19 视频流目标跟踪示意
一方面,一个跟踪器应该具有理解和建模目标运动的能力。为此,需要设计运动模型用于捕捉物体的动态行为,进而预测物体在未来帧中的可能位置,从而减少搜索空间。另一方面,跟踪器需要了解所跟踪物体的外观,进而学会如何从背景中辨别物体。一般来说,目标跟踪过程包含四个阶段。
目标初始化: 即通过在目标周围绘制一个边框来定义目标的初始状态。一般在视频的初始帧中绘制目标的边界框,跟踪器据此估计目标在视频剩余帧中的位置。
外观建模: 即利用学习技术学习目标的视觉外观。在这一阶段,需要建模并了解物体在运动时的视觉特征,包括在各种视点、尺度、光照的情况下。
运动估计: 即学习并预测后续帧中目标最有可能出现的区域。
目标定位: 运动估计给出了目标可能出现的区域,需要进一步使用视觉模型扫描相关区域以便锁定目标的确切位置。
目前,主流的目标跟踪算法可分为单目标和多目标。其中,单目标跟踪是指对环境中的某一目标进行跟踪,即使环境中有多个目标仍然只跟踪该目标,所要跟踪的目标由第一帧的初始化确定;多目标跟踪是指对环境中存在的所有目标进行跟踪,甚至包括视频中间新出现的目标。
目标跟踪算法的另一种分类方式为离线跟踪和在线跟踪。前者是指跟踪已记录视频流中的物体,可以利用未来帧进行结果优化,例如通过分析录制好的对手球队比赛视频,制定比赛战术;后者是面向实时视频流的即时预测,不能使用未来帧进行结果改善。
OpenCV的跟踪API集成了很多传统跟踪算法(非深度学习)。相对而言,多数跟踪器的准确度并不突出,但是通常适用于资源有限的环境(如嵌入式系统)。在实践中,基于深度学习的跟踪器在准确度方面远远优于传统跟踪器。例如,GOTURN [5] 是一种基于卷积神经网络的离线学习跟踪器,能够用来跟踪多数目标,甚至是不属于训练集的目标,如图3-20所示。目前,GOTURN已经集成到OpenCV跟踪API中,其在GPU服务器上运行速度非常快。
图3-20 基于深度网络的新目标跟踪示意
动作识别(Action Recognition)是视频理解领域的一个重要问题,亦是物联网环境中常见的应用之一。随着深度学习的不断发展,这一问题被逐步解决,目前已经取得了较好的结果。简单而言,动作识别是指对给定的视频片段按照目标动作进行分类,例如打球、跑步等,如图3-21所示。
图3-21 视频动作识别示意
相比图像分类,视频动作识别的区别主要体现在两个方面:其一视频具有时序维度,其二视频长度不一。此外,开放物联网环境下获取的视频中往往存在多尺度、多目标、多视角以及摄像机移动等问题。
在深度学习之前,iDT(improved Dense Trajectory)算法 [6] 是最经典的一种视频动作识别方法。原始DT算法的基本思想是利用光流场获得视频序列中的轨迹,再沿着轨迹提取HOF、HOG、MBH、Trajectory 4种特征;之后利用Fisher向量进行特征编码,再基于编码结果构造SVM分类器。相比而言,iDT算法的主要改进是利用前后两帧视频之间的光流以及SURF关键点进行匹配,从而消除或减弱摄像机移动带来的影响。
基于深度学习解决动作识别问题的一个主流方法是Two-Stream CNN [7] 。顾名思义,Two-Stream CNN分为两个部分,一部分处理RGB图像,一部分处理光流图像。具体而言,由于视频可以分为空间和时间两个部分,其中空间部分中每一帧代表的是空间信息,如目标、场景等;时间部分是帧间的运动,如摄像机的运动或者目标物体的运动等。因此,Two-Stream CNN中的两个部分分别用于处理时间和空间两个维度,如图3-22所示。
图3-22 Two-Stream CNN网络结构示意