摘要:随着摄像机在智能车辆中的普遍应用,视觉位置识别已经成为智能车辆定位中的一个主要问题。传统的解决方案是使用手工制作的位置图像进行视觉描述来匹配位置,但是这种描述方法对于极端的变异性却效果不大,尤其是季节变换的时候。本文提出了一种基于卷积神经网络( cnn )的新方法,通过将图像放入预先训练的网络模型中自动获取图像描述符,并通过汇集、融合和二值化操作对其进行优化,然后根据位置序列的汉明距离给出位置识别的相似结果。在实验部分,我们将我们的方法与一些最先进的算法fabmap,able-m和seqslam进行比较,以说明其优势。实验结果表明,基于cnn的方法在代表性的公共数据集上的性能优于其他方法。
ⅰ.介绍
在不断变化的环境中长期导航[2]是当今机器人技术面临的主要挑战之一,因此视觉定位的主要问题之一是在长期和大规模环境中进行位置识别。然而,这是一项艰巨的挑战,因为一些地方不得不应对在不同周、不同月和不同的季节,甚至是一天中不同时间的重大变化。这些条件变化是由外部环境引起的,如光照、天气和季节。诸如快速外观映射(fab-map)[1]等方法已被证明可以映射大型、具有挑战性的环境。最近,名为seqslam [ 3 ]和able - m [ 4 ]的算法定义了匹配序列图像的方法,以提高一些条件变化的鲁棒性。这些位置识别技术依赖于手工制作的功能,例如sift或ldb [4],非常不适合处理剧烈的视觉变化,例如从白天到夜晚,从一个季节到另一个季节,或从晴朗天气到雨。 图1给出了不同季节的例子。
图1.视觉位置识别系统必须能够( a )成功地匹配同一位置的感知上非常不同的图像,同时( b )也拒绝不同位置的相似图像对之间的不正确匹配。
最近深度学习技术和卷积神经网络的发展为理解位置识别问题提供了另一种方法。alexnet [ 5 ]显示,从cnns中提取的特征经过充分有效的训练,在分类任务上比手工制作的特征获得更好的结果。[ 7 ]提出了一个有效的深度学习框架来生成用于快速图像检索的二进制哈希代码。考虑到位置识别[8]与图像检索相似,我们有理由期望利用基于cnn的特征的力量来设计位置识别问题的解决方案。然而,在视觉定位中,除了对目标识别[9]的一些研究外,深度学习并没有得到充分的应用。在本论文中,我们提出了一种简单而有效的方法,利用改进的cnn模型提取图像描述符,增强图像序列的匹配以进行视觉位置识别。所提出的方法如图2所示,并将在后面的章节中详细介绍。我们的方法具有以下特点:
首先,我们提出了一个基于vgg16-places365[10]改进的cnn架构。我们的模型适用于通过添加,删除和融合图层来提取图像特征的要求。
其次,我们将cnn层获得的特征转换为二进制表示,从而降低计算复杂度。其中一个主要的好处是他们可以使用汉明距离匹配位置。
第三,我们提出了一种算法,根据seqslam和able - m的一些思路,基于一系列图像来计算匹配最佳候选位置。
论文的其余部分如下所示。我们在第ⅱ节中简要回顾了位置识别算法和cnn模型的相关工作;我们方法的细节将在第iii节中介绍;第ⅳ节给出了三个数据集的实验结果,比较了所提出方法的性能;最后,我们在第v节中总结了本文,并讨论了未来的工作。
ii.相关工作
a.卷积神经网络(cnn)
卷积神经网络可以从训练数据库中学习图像特征。在过去的五年里,随着cnns在计算机视觉领域变得越来越重要,人们已经做出了许多尝试来改进alexnet [ 5 ]的原始架构,以获得更高的准确性,比如vgg 11、googlenet 6、resnet 10等。考虑到位置识别与图像检索相似,而且它是独立的,k. lin等人[ 7 ]提出了一个有效的深度学习框架来生成用于快速图像检索的二进制哈希代码。
场景识别是另一个与视觉位置识别非常相似的领域,尽管这是深度学习中的一项分类任务。位置[10]包含超过1000万个包含365个独特场景类别的图像,是用于训练场景识别cnn模型的数据集。基于places数据集和最先进的cnns,许多研究人员培训了一些cnns模型,并将其展示给其他研究人员使用。位置识别可以被看作是图像相似性匹配的一项任务,一些研究人员通过预先训练的cnns模型来实现。从深度学习的进步中得到启发,我们提出了一个问题,我们可以利用深度cnn来实现视觉位置识别吗?
b.视觉位置识别
与其他传感器相比,视觉传感器具有价格低廉、体积小等优点,正成为当今最受欢迎的机器人传感器。循环闭包检测的一种流行方法是基于快速外观的映射(fab-map)[1]。所提出的fab-map使用单个关键点描述符,即尺度不变特征变换(sift),以及用于界标描述的离线词袋描述符(bow)和用于预测循环闭包候选的贝叶斯过滤器。然而,fab-map有一些不足之处,需要提前离线训练,并且在环境变化剧烈的场景中具有较差的稳健性。
如今,视觉定位面临的主要挑战是在长期大规模环境中的位置识别。为了在长期环境中提高拓扑定位的效率,许多其他技术被提了出来。在这方面,一个成功的方法是seqslam,它在相同的路线下被评估为具有挑战性的条件。它引入了使用序列图像而不是单个图像来确定位置的思想,以改善长期方案的性能。
使用序列而不是单一图像利用了移动相机获取的视觉数据的时间一致性,从而减少了自我相似环境识别中的误报数量,并提高了对局部场景变化的容忍度。这个思想被able-m [4]算法使用,它基本上减少了处理后的图像,并将全局二进制描述符与汉明距离的快速计算进行了比较。
深度学习技术和卷积神经网络的最新发展为理解位置识别问题提供了一种替代方法。z. chen, 等人[8]结合cnns提取的有效特征,提出了一种基于overfeat的视觉场所识别方法;x. gao等人提出了一种新颖的方法,该方法采用改进的堆叠去噪自动编码器(sda)来解决视觉slam系统的闭环检测问题;d. bai等人[13]给出了一种融合alexnet和seqslam来检测循环闭包的方法。最近的建议启发了我们目前的工作,旨在提供一种基于改进和简化的cnn特征的更稳健和有效的位置识别算法。
iii.我们的方法
在这一部分,我们描述了我们提出的方法的主要特征:cnn模型、提取图像描述符和相似性匹配。图2显示出了所提出的框架。
a.cnn模型
在第ⅱ节a部分中,我们讨论了今年麻省理工学院计算机科学和人工智能实验室提出的places数据集,实验室现在正根据数据集举办2017年地方挑战赛[15]。他们希望更多的研究人员使用他们的数据集来训练cnn用于场景识别任务,并提供基于cnn模型的places365-cnn,例如alexnet,vgg,googlenet,resnet在他们的数据集上训练。根据论文的实验结果,我们选择vgg16-places365作为位置识别的基本模型,在多个数据集上具有最佳性能。
从lenet-5 [16]开始,卷积神经网络通常具有标准的结构堆叠卷积层(可选地,随后是批量归一化和最大池化)之后是一个或多个完全连接的层。vgg 16 - place 335与vgg具有相同的结构,它具有16个重量层,包括13个卷积层和3个完全连接的层。places数据集包含超过1000万个包含365个唯一场景类别的图像,因此最后一个完全连接的图层的尺寸应修改为365。这13个卷积层被划分为5个部分,其中一个部分的每一层都有相同的数据维度。每个部分后面都有一个最大汇集层,该层通过2 x2像素窗口执行,跨距为2。卷积层的堆叠之后是三个完全连接的( fc )层:前两个层各有4096个信道,第三个层执行365路位置分类,因此包含365个信道(每类一个)。除了这些层之外,最后一层是soft-max层,并且所有隐藏层都配备有整流(relu)非线性。表1给出了vgg16-places365网络的权重层和池化层的输出尺寸。
图2.视觉位置识别方法的全局系统架构。(从nordland数据集的两个原因捕获图像,我们将序列定义为i和j。最后,图片是相似度矩阵的可视化。)
通过深层架构,cnn能够在不同的抽象层次上学习高级语义特性。有了深度架构,cnn能够在不同抽象级别学习高级语义特征。然而,图像的空间信息通过完全连接的层丢失,这在视觉位置识别等应用中可能是不理想的。在[ 8 ] [ 13 ]的实验结果表明,在卷积层产生的基于cnn的深层特征,在环路闭合检测中比全连接层特征获得更好的性能。根据这些,我们选择vgg16-places365的三个层'conv3_3','conv4_3'和'conv5_3'来提取我们任务的图像特征。此外,我们对cnn模型进行了大量修改,包括添加几个池层和删除完全连接的层,以减少特征尺寸并节省图像处理时间。然后,在将三层的特征调整为一维后,我们使用连接[ 17 ]的操作来融合它们。我们做了很多实验来调整增加的池化层的网络参数,您可以在第ⅳ节中看到实验细节。最终的模型结构如图3所示。
b.用于位置识别的特征描述符
视觉特征是影响图像匹配准确性的最重要因素之一。我们的方法使用从上面给出的cnn模型中提取的cnn特征,而不是传统手工制作的特征来计算图像之间的相似性。浮点是我们最终从模块中获取的cnn功能的类型。我们将该特征命名为fcnn,其尺寸为1×100352。降低图像匹配的计算成本的实用方法是将特征向量转换为二进制代码,这可以使用汉明距离快速比较。我们首先将其每个元素标准化为8位整数(0~255),然后得到整数特征如(2)所示。然后,可以很容易地转换为二进制特征。
c.二值化的有效匹配
使用二进制描述符匹配汉明距离比使用l2范数匹配描述符更快更有效,并且在此用于计算图像之间的距离。在很多研究中,我们注意到他们通过匹配单个图像来计算两帧的相似度。如果我们将两个图像的特征描述符定义为和,我们可以计算它们的汉明距离hmdij来表示相似性。计算过程如(3)所示。
因为在长期和大规模的环境中表现更好,所以像[ 3 ] [ 4 ]等作品中介绍的那样,位置被认为是图像序列而不是单个图像。在我们的方法中,我们将slength定义为匹配当前帧的图像序列长度。因此,第i帧的图像序列由范围(i - slength+1,i)中的连续图像组成,并且我们将,,...,连接为用于匹配的最终特征fi。在这种情况下,我们可以使用(4)的序列信息来获得图像之间的距离。该距离是不同地方的相似度得分,我们将其保持在相似度矩阵(m)中。如果我们发现两帧之间的距离小于给定的阈值,那么这些位置就会被成功识别。
表一. vgg16 - place335网络各层的输出尺寸
图3.基于vg16 - place 335的cnn模型用于视觉位置识别。(所有完全连接的层都被移除,三个名为pool 3 _ fuse、pool 4 _ fuse、pool 5 _ fuse的池层分别被添加到conv 3 _ 3、conv 4 _ 3和conv 5 _ 3的背面。三个轮询层的输出被融合为最终的cnn特征。)
iv.绩效评估
在本节中,演示了一组离线实验来评估我们方法的性能。我们的实现是一个基于caffe [18]的python程序,它是一个开源的深度学习框架。我们首先介绍数据集和评估指标,然后与公共数据集上的几种著名算法的性能进行比较。
a.数据集和评估指标
用于实验的第一个数据集是fab-map最初使用的city center [1]数据集。它是一个基本的数据集,广泛应用于闭环检测和位置识别研究实验,因此我们使用它来调整和优化网络模型。然后我们使用nordland[2]数据集进行了测试,这些数据集是使用单目摄像机在长期条件下记录的。根据cnn模型的参数设置,我们将在每张图像进入网络之前对其进行224×224的新尺寸预处理。最常用的位置识别算法评估方法是绘制precision-recall(pr)曲线,该曲线提供了算法性能的更多信息。其主要要素定义如下:精度定义为检测总数的真正位置数;recall被定义为真实地点的数量与地面真实地点的数量之比。(5)显示了计算过程。我们通过扫描不同的距离阈值θ来获得pr曲线,如(6)所示。
b.城市中心数据集中的结果
第一个数据集,城市中心[1],在康明斯和纽曼市中心附近的公共道路上收集。它包含1237对大小为640×480的图像,由两个摄像头(左和右)在机器人上拍摄,机器人以每1.5米一个图像的频率穿过环境。这些图像包括动态物体,此外,它是在有阳光的大风天收集的,这使得丰富的树叶和阴影特征不稳定,如图4 ( b )和4 ( c )所示。提供了数据集gps信息和地面实况。机器人绕一个环路行进两次,总路径长度为2 km,当机器人绕第二个环路运行时,我们可以在这些位置实现位置识别,标记为红色曲线,如图4(a)所示。
图4.城市中心数据集。( ( a )是gps信息的可视化,红色曲线是机器人运行的第二个环,我们应该在这些位置进行位置识别。( b )和( c )是该数据集的两对代表性图片。)
由于网络的输入只能是一个图像,我们只将左摄像头的图像作为我们的测试集。我们还在机器人退出循环后修改了一些地面实况值,因为当双目机器人在相同位置向后移动时,一个摄像机的图像完全不同。在这种情况下,不可能实现位置识别。
首先,我们在vgg16-places365的每一层上做一些实验,pr曲线如图5(a)所示。如预期的,结果证明提取卷积特征获得了最佳效果,并且每一层的性能都优于fabmap算法的开放工具箱open fabmap [ 20 ]。图5的其他部分分别给出了添加的汇集层的实验结果,“pool3_fuse”,“pool4_fuse”和“pool5_fuse”。通过调整这些层的类型,max或ave,以及滤波器的尺寸,2×2、4×4、7×7、8×8或14×14,我们在综合考虑实时性和准确性的情况下获得了每一层的最佳参数设置。当特征维数小于某个值时,算法的效果急剧恶化,当滤波器的大小变大时,最大滤波器优于平均滤波器。pool5_fuse图层使用大小为2×2的平均过滤器,pool3_fuse图层和pool4_fuse图层都使用大小为4×4的最大过滤器。此外,我们给出了通过这些设置的多层特征融合方法获得的实验结果,它们也在图5中示出。很容易看出融合方法比单层获得了更好的结果,我们认为原因是多层的特征融合包含更多的空间信息。我们将此作为最终的cnn模型,如最后的第3接a部分所述。
c.nordland数据集的结果
nordland 数据集 [ 2 ]记录了挪威北部728公里的火车旅程,在四个不同的季节,火车前方的同一视角。因此,数据集可以被认为包含一个循环,并遍历四次。如图6所示,风景已经发生了巨大的变化,从冬天的积雪覆盖到春天和夏天的新鲜植被和绿色植被,再到秋天的彩色树叶。大多数旅程都是通过自然风光,但火车也经过市区,偶尔停留在火车站或信号站。这可能是目前用于长期视觉位置识别评估的最长和最具挑战性的数据集。在处理之后,数据被确定为25fps并且大小为1920×1080,并且图像序列被同步,即,在相同时间点数据处的每个序列表示相同的位置。
图5.城市中心数据集的实验结果。(关于vgg16-places365的不同层的曲线显示在(a)中。(b),(c),(d)显示了添加的具有不同设置的池层的结果)
在我们的方法中,我们关注匹配图像序列的问题,而不是识别位置的单一图像。在nordland数据集中,我们首先通过比较春季和秋季之间的序列来进行不同长度图像序列的实验。该方法可以在长期和大规模的视觉位置识别中获得更好的结果,如图7所示。注意图片中的pr曲线,我们可以发现,随着slength的增加,算法的效果越来越好,这证明了我们想法的正确性。但是当slength大于200时,算法的效果开始受到限制。我们分析当slength足够长以包含一些无法匹配的特定位置时会发生这种情况,可以将其视为噪声。考虑到准确性和复杂性,25 fps数据的最佳序列长度配置为200。因此,我们在其他实验中使用slength= 200。然后,我们将我们的方法的性能与主要的最新工作进行比较,包括fab-map,seqslam和able-m算法。由于openfabmap [20],openseqslam [2]和openable [21]的作者开发的源代码,实现了评估。如果我们不指定任何参数,我们将使用开源代码中的默认设置。
图6.每个季节的nordland 数据集的示例图像。
图7.不同slength的pr曲线。
图8. nordland数据集的实验结果。
现在,我们处理了六种组合的结果,春天对比夏天,春天对比秋天,春天对比冬天,夏天对比秋天,夏天对比冬天,秋天对比冬天,对应的序列。这些评估由图8中所示的pr曲线描述,其中我们可以观察到不同季节对位置识别性能的影响。值得注意的是,没有匹配图像序列的openfabmap已经取得了比其他方法更差的结果。除了位置识别,准确率为100 %的recall也是一个很好的性能指标。以100%的精度,我们的方法比其他方法实现了更好的recall。应该注意到,受开始时序列的影响并不完整,基于序列的方法实现100%recall是一个限制。在相同条件下,冬季实验表现较差,因为积雪增加了识别难度。
d.讨论
从以上三部分的实验中,我们可以看到,与传统的使用手工特征描述图像的方法相比,我们基于cnn的方法在位置识别任务中具有很大的优势。我们给出如下原因:
(1)通过cnn对大量数据进行学习的图像描述符可以更准确地描述图像之间的差异,
(2)通过融合三个最佳cnn层保留更多图像空间信息的特征,
(3)基于图像序列的识别消除了噪声场所的影响。
此外,在上述实验中,我们的方法在某些地方没有取得好的识别结果。例如,在连续多帧图像中,大部分区域被移动的物体覆盖,或者被天空和地面积雪占据。目前,所有识别算法的性能都很差,这是长期和大规模环境下视觉位置识别最难解决的问题。
v.结论
在这项工作中,我们提出了一个简单有效的基于vgg的cnn框架来提取用于位置识别的图像描述符。我们在卷积层“conv3_3”,“conv4_3”和“conv5_3”后面添加了三个具有合适滤波器的池化层,并将它们的输出融合为描述符组合二值化。此外,用于描述地点的最终二进制字符串是从图像序列而不是单个图像中提取的,并且通过汉明距离进行匹配以进行识别。本文的想法来自我们之前关于大规模交通场景的工作[19]。我们的方法已经证明,它可以通过与其他最先进的方法(如fabmap,able-m或seqslam)在季节、环境或视点发生极端变化的具有代表性的公共数据集上进行比较,成功地实现长期和大规模的视觉位置识别。
电话机器人的应用领域有哪些,它能带来哪些帮助
TCL避免与三星在韩市场竞争,正寻求AI领域合作
容量Flash器件编程设计,体验极速高效的全新烧录感受!
StellarisWare软件的特点介绍
MATLAB课程之第六章v2 走进算法之门(1)
基于CNN的方法在代表性的公共数据集上的性能优于其他方法
亚马逊计划将Fire HD平板电脑改造成Echo Show智能音箱
桁架机器人的优势特点及应用领域
液位开关传感器在制药行业中的相关应用技术方案
TG2000 TEK TG2000 TEK-TG2000 信
人工智能各大领域应用的技术原理详细介绍
如何使用LM317作为开关来打开和关闭电源负载
浅析异构网络安全解决方案及关键技术
采用双旋翼设计的无人机进行货物配送
this可以出现在类方法中吗
歌尔股份全新“声、光、电”技术与解决方案亮相CES 2024
OPPOR17怎么样 新爆款诞生
C51单片机延时时间的计算方法解析
Zynq-7000 SoC 启动镜像布局
你知道嵌入式linux系统下简单守护进程(daemon)的编写?