机器心脏编辑:朱思英、张思源为持续3个月的上海BOT大数据应用大会圆满正式,其中“计算机视觉识别”子问题吸引了来自世界各地的100支队伍,赛后为了促进计算机视觉技术和创新应用交流与合作,BOT大会组委会联合机器的心、清水D-LAB和
内容目录:
Ⅰ 赛题解读
Ⅱ 冠军团队指导教授王金桥:大数据时代的视觉智能
Ⅲ 大唯团队陶进:小样本图像检测深度学习算法研究
Ⅳ DeeeeeeeeeepNet 团队陈朝才:深度学习在目标检测领域的应用
Ⅴ 现场精彩问答
Ⅰ 赛题解读
赛题好变态,这样的赛题是怎么来的?
BOT 大赛组委会赛题组组长尹相志:计算机视觉识别赛题的设计解读
本次计算机识别初赛赛题的主题:基于机器视觉的认知情境理解 (CCRCV 2016, Congnitive Context Reasoning for Computer Vision)
赛题里的每一个子赛题的设计其实都代表了我们在机器视觉领域里的一次尝试或者实验。目前的机器视觉已经进入到深度学习阶段,那么机器视觉在当下人工智能的实现过程中,有哪些需要过的「坎」?大赛组委会特意把这些坎找出来,融入到赛题的设计中。组委会希望通过这样的方式,让参赛的团队联手对付这些难坎并期待有新的突破。即使只有一点小小的推进,对于整个人工智能来说都是很重要的突破。
具体到我们这次大赛的试题,我们的赛题来源于对现在机器视觉盲点的思考。虽然随着深度学习技术的发展,单纯的图像识别对于计算机来说已不是一件难事,甚至可以做得比人类更好,但前提是必须要给机器足够的训练图片。然而这个训练与人类的认知过程是背道而驰的,人类的小孩不会需要上万张图片才能够理解什么是狗,而且当他看到其他品种的狗,也许初期会叫错,但是慢慢会理解狗这个物种的抽象特征,进而理解狗——这一「概念」。因此未来不管是看到吉娃娃或是藏獒,都能认出这是「狗」。这正是现在机器视觉的盲点,人类可以对图片进行理解,透过小数据去进行泛化的推论,而目前机器视觉则专注于如何从大量数据中抽取图像特征,因此庞大的图片标注以及计算力的考量成为现在计算机视觉识别商业应用落地的最大障碍。本次计算机视觉识别初赛与复赛分别从不同角度来考量这个问题。
1. 初赛题目设计
大数据和神经网络之下的机器视觉图像分类,在分类的实现方式上已经有了非常大的改进并且在识别的准确率上有很大的突破,但是我们认为目前的分类做法只是让机器「识别」待分类对象,并不是「懂得」分类对象。即便今天机器认出了长颈鹿,但是长得像长颈鹿的其他对象并不在它的认知范围内。所以对于这个「坎」,我们希望图像分类的做法能够让机器真正懂得分类对象,而不只是识别,比如看到了一个长颈鹿的皮毛或者是斑点就认为这是长颈鹿。
「我们在这次大赛的命题上,从一开始就有很清楚的规划,我们希望参赛队能做出的分类是基于认知场景的,是对待分类对象的真正认知和理解,而不只是单纯的识别,这是我们在这次大赛赛题设计中的一个关键考虑点。」
如何透过认知解决无法穷举的变体,用一个实体去推演其所有的衍生物。
我们今天看到一个「实实在在」的动物,我要知道哪些布娃娃,哪些雕塑,哪些绘画,哪些抽象的形态都是来自于它,这个题目要求参赛选手要建立客观存在的实体和与之相关的抽象形态之的连接,是一个理解并推论的过程。
初赛有 7 个隐藏题目,这 7 个隐藏题目来自于我们机器视觉的实验。
第一个隐藏题目是扮演装扮,在这张图片里大家可以看出来,这是一只扮成长颈鹿的狗。所以机器需要有里跟外的概念,谁是本体,谁是附属,有了这样一个概念才有办法继续进行后面的处理。
第二个隐藏题目是图片里有两种动物,我们一开始就没有跟他们说一张图里只有一种动物,我们有的在图片里面放两只,而且有的是抱在怀里,几乎是看不到的,两只的话就可以得到比较高的分数。
第三个隐藏题目是特殊品种,这个长得像拖把的其实是一只天竺鼠,我们也是后来在收集图片时才知道原来有这种物种。在狗的图片集里我们把全世界最丑的狗也都放进去了,甚至丑的都不具狗形了。其实这些都是个体的变异,怎样去从这些个体的变异中识别出其中的差别是我们这个题目的考察点。
第四个隐藏题目是微小线索,我个人一直很好奇机器学习到底会怎样去看待那些肉眼几乎找不到动物在哪里的图片。我们人觉察到的微小线索跟机器的认知可能会有所不同,因为人不是从像素层去看动物特征的,而机器可以做到。这其实是一个很难的题目,不知道大家能不能看出,这张图片中有只猫,机器识别出来的概率有 15.7%,稍微差一点。由此看出,当图片的背景变得复杂,卷积层网络从底层抽取特征的时候会提取过度复杂的特征,而真正有用的与动物相关的特征所占有的比例太小,都会使机器降低辨识出动物的可能性。
大家能看出来这张图片里面有动物什么吗?很奇怪,我拿给十个人看,有九个人看不出来,剩下一个人告诉我说有鳄鱼。这是人跟机器的最大差别,人类的视觉成像会有错觉影响,事实上在这张图片里很难找到好大一只,右边有只长颈鹿,但是人可能就看不到。周围环境的背景色跟它太像了,所以机器学习到的视觉特征很容易与其他树叶交叠所学习到的特征产生误判,这也是比较容出错的地方。
第五个隐藏题目是高度抽象图片的识别,这个题目也是大家觉得很可怕的,因为我们高度抽象的图片选取了几种不同类型的图片,包括非洲十万年前石壁上的原始壁画,这是我们煞费苦心收集的而且还特别对应到本次考题范围的动物中。另外,我们选取的剪纸和对联也是高度抽象化的东西。
第六个是堆叠。我们在设计考题时,想到既然卷积神经网络是从像素层级去提取特征,那如果要给卷积神经网络一个最大的考验该如何下手设计题目呢?我们的设想是,如果有一系列的东西,从像素层级来看都是一模一样的单元构建出来的,那么卷积神经网络在处理时是不是就没有像素层级的特征了?那有这样的物体吗?答案是乐高积木或者是游戏我的世界。一个同样的单元做出来的图片,不会有像素级的特征。我们可以看到,机器在这里面的表现也是稍微差一点点。
第七个是生成模型的图片识别。第 7 个隐藏赛题的出题概念是源于什么呢?中国有一个很古老的寓言是矛与盾,当一支最强的矛遇上一支最强的盾谁会赢?我们使用了强大的图片生成模型来对抗选手们的图像理解模型。在决赛里我们准备了许多风格迁移的图片。也就是,通过风格迁移的方式,我们将图片中的风格融合到既有的动物图片里去,这种融合可以做到无缝融合,对人来说分辨这样的图片也很勉强,但仍可以看出来原来的痕迹,对机器呢?在这些风格迁移图片里,我们不但做了图片风格不是很强烈的图片的迁移,还做了几个风格极为强烈的日本现代艺术家的作品的风格迁移图片,包括草间弥生和蜷川实花,他们的风格在人看来极为明显。当这样的迁移风格的照片出现的时候,所有的像素细节都被替换掉了,机器能够判断出来的可能性微乎其微,也因此出现了这次大赛第一次发生的状况。
这张图片答对率是 0,没有任何参赛选手的识别模型能识别出来,这张是融合了草间弥生作品的迁移图片,图中有两种动物,一个是猫,一个是天竺鼠,当草间弥生的风格迁移到这张原图的时候就会生成下图这样的图片,对我们人来说依旧能认得出来,但对机器则是遇到一个难题。我认为对于机器的视觉模型来说,最难的不是其他,就是来自图像生成模型。我们知道现在有很多如 GAN(generative adversarial networks) 这样的生成对抗模型,怎么样通过对抗的方式来让模型不断的进步,这也是未来视觉里很有趣的一个主题。
「初赛的一个整体思路,其实是帮助我们去理解现代的机器视觉能做到什么,不能做到什么,限制在哪里。我们只有认清楚了这些限制,才有可能让大家变得更好。」
2. 复赛题目设计
复赛主题侧重对机器视觉实际应用层面的考察 (初赛主要是基本理论的理解)。
有很多问题是抽象的,没有一个绝对的操作型的定义。也就是说,没有任何人可以告诉你什么是标准答案,这在人的世界里是很常见的,因为很多事情,一百个人有一百种看法,那么在这样的问题里机器如何去得到一个相对精准的判别呢?这是挑战之一,另外一个很重要的挑战是行车记录仪赛题中需要选手们预测行车标志,但其中有几个标志在我们提供的训练集照片里一张都没有出现过。这时候又该怎么办?
行车纪录器图像评估驾车操作场景
在这个赛题里面,我们希望要看到的是,当你去做端对端的学习时,你需要把整个复杂场景的转换逻辑或者是整个思路全部都依次排列在里面,你的模型得是一个泛用性的模型,否则你没有办法去处理这样的问题。
如果能够把问题做一个适度的化简拆解,这个问题就没有那么难。例如让许多选手们觉得困难的如何判断压线与逆向的问题,不直接让机器从整张照片去理解有没有压线,而是先解决车跟线之间的关系,再从车跟线的关系往外延伸。这个赛题里面主要是看大家能不能撇开对深度学习端到端实现的过度追求,有一些追求固然很好。但对于解决真实世界问题的时候,它不应该变成你的枷锁。
接下来这个是最大的难题,行车标志,我们当初附上了一张行车标志全图给选手,为什么给了一份标志全图?因为在所有图像里行车标志是不会变的,都有固定的外形。唯一有影响的是你的视角,还有就是呈现的远近。在这里可以用两个策略来解决,第一个策略,用深度学习方法来做,应该可以把这些图做一些 3D 的旋转、变形、色调的数据增强,从而来解决这一类的问题。第二可以不用深度学习,用传统的机器视觉中的模版比对可能效果会更好一些。
「我一直觉得新旧方法都有它的各自优缺点,怎么把新的去做新的擅长的,旧的去做旧的擅长的,数据量不够的情况下,新的方法可以通过数据增强来解决,或者可以请旧的方法来帮忙。我认为把这些方法做一些融合,这是有助于机器更好的来理解这个任务的一个重要方法。」
卖场货架自动计算产品货架占有率
货架这个题目是我们花费最多心思的,除了拍照片之外,我们拍回来的 1600 张照片,将近 12 个人去标了 2 两个多礼拜。这个题目的最大难点,其实在于要在给出的 1000 张训练集照片中,去识别 240 种的商品。我们当时在设计这道题的时候还考虑题目会不会过难,因此给选手许多参考性的材料,包括将多边形转换为 Mask 以及提供裁切过后的商品碎片。当我们给出裁剪干净的商品之后,能够对这些图片做数据增强的方法就有很多了。
「我们在这里其实考的是怎么样通过小样本进行学习,因为我们认为现在深度学习最大的问题还是在于样本数。」
3. 决赛题目设计
中文视觉智能问答
选手在做这道题的时候不可以用电脑屏幕把任何一个照片投出来,一投出来就算丧失资格。因此是在完全不知道图片内容的情况下,去回答这些中文的视觉智能问答,这也是我们希望未来可以继续的一个比较有意思的研究,希望有更多技术强大的团队们可以一起在这个领域钻研。未来的这种智能的对答,以前都是只注重在所谓的语料生成的方式来找到一些似人类的像鹦鹉学舌一样的回答。但是我认为通过图像的理解来产生一个有意义的回答,这是一个更有趣的东西,这是我们的第一次尝试,我也希望可以把它慢慢的扩充,包括一些有场景式的问答,也许下一次就是一个菜单,或者是一张地图。
Ⅱ冠军团队指导教授王金桥:大数据时代的视觉智能
1. 研究背景:视频语义理解
预计在 2020 年,互联网数据里大概 90.6% 的数据都是以视频的方式进行呈现。第二就是在物流空间,监控视频每年也以 20% 的速度在增长,在这种海量数据爆炸性增长下进行数据分析,为实现我们的需求带来了很大的挑战。
当前主要经历了三个阶段,从最初城市里任何视频监控都没有到平安城市,安装了一些普通模拟的摄像头,有了数字化的数据,到现在我们基于大量数据以及大量积累的算法,慢慢的可以把这些数据变成知识数据,进入到智慧计算的阶段。
从认知的角度来讲,人工智能可以说是摄像头的大脑。从人工智能发展的角度来讲,经历了从看得见到看得清的过程,我们首先通过安装各种各样的摄像头,现在每个县,每个村都安装了摄像头。另外就是看得清,原来我们在 80 年代的时候,最初来做这种图像识别的时候,当时机器只有 586、486 这种设置,非常复杂,数据非常少,原来的摄像头数据每个图像是 320、240 的分辨率。在这个分辨率下很难提出我们要识别的是内容,以及使用我们人眼的看法。现在随着计算能力的提高以及 GPU 的出现,整个视频发展到了一个大数据深度学习的时代,使大家通过一些专家系统,能够使我们从视频数据中得到更有价值,更加智能的一些分析。
从技术发展的角度来看,当前的发展经历了从规则式到大数据时代的,经过了目标检测、车牌识别、人脸识别、文本识别到视频检索,通过模拟其他的特征,都是通过人工设计的特征,符合边缘的某些特性或者是支持向量阶的方式,来得到一个基本的算法,能满足一些规则的应用。这里面最成功的是车牌识别以及一些文本的检测,手写的识别和人脸检测。
慢慢我们的数据量在不断增加,我们慢慢的支持向量级,整个在小数据的时代,基本上是知识向量统治机器学习的时代。而现在随着 GPU 的出现,数据的海量增加,现在达到了一个全数据驱动与深度架构、智能分析算法三者深度结合的时代,是一个大数据的深度学习。包括现在各种成千上万的分类识别,目前都是基于这种大数据的智能视频分析深度学习框架。
2. 研究项目节选
智能物件识别的检测
这个网络设计得非常复杂,包括卷积层、反卷积层、STN 的校正网络、空间变换校正网络、空间上下文描述的学习网络以及空间变换的随机扰动、随机定位,对不同尺度敏感的自动回归以及最后的 NMS 做的这种精细的目标分类和空间关系建模。它是一种由粗到细的一个精细的检测分类融合的框架。目前我们主要是针对生鲜领域,包括苹果、梨、蔬菜,以及各种牛奶,如光明的、蒙牛的。目前已经实现了 50 个大类,200 个子类精细的识别和检测。目前在食物产品中基本上达到 90%,主要目标遮盖小于三分之一,基本上就可以精确检测到。
图像语义分割
这是一个像素级的语义分割,包括人的场景,主要是做机器人的,就是服务型机器人,常见的床、桌子、椅子、茶杯、手机、水杯、电视、冰箱这种 3C 类的,还有服务类的,比如吃饭,家庭常见的这些目标,让机器人来辅助人完成它所寻找的这个目标的功能。最后是基于服装的解析,就是我们把人分成 22 个部分,包括他的头发长短、性别、年龄,有没有拎包,他拉没拉箱子,长裤短裤,长裙短裙。这是我们当前的一个效果,这是 22 类人的解析,我们可以把人大概在 10 到 20 个小米之内分割成 22 个区域,主要是面向公安的一些拍照购物搜索做一些应用。网络视频的录像当中是没有标签的,我们通过这些录像的区域之间的关系来判断这个视频的镜头和场景的分割,给它做一些视频镜头和场景之间的标签,以及做一些图像的区域和图像集,以及图像整体的一些水平,这个我们主要是用图模型。这是我们从 2004 年做到现在,做了十几年的一个工作,这个工作目前在很多场景下应用。这是基于图的视频图像标注,基本上是我们组一个标志性的工作。
哈希的大规模图像检索
这是一个哈希的大规模图像检索,就是把一个图像通过各种变换,我们一个哈希检索做法是在 2014 年发表 fab,影响非常大,我们把这个代码已经开源了,已经被很多公司和企业应用,可以实现这种快速的三维重建以及快速的目标检索,基本上可以实现在一秒内亿级数据的海量查询。
3. 研究经验分享
基于图像视频的处理工作,是一个科学和工程深度结合的一个事情。它的数据就是你必须要对这个方法理解得非常深刻,你才能够针对这个方法去选取适合方法的数据,就是你的方法是解决哪个问题的,你根据这个问题去发现什么样的数据更适合它,你当前的这个方法对那些数据不适合。另外就是数据的清洗非常重要,你在准备数据的时候,这个需要大量经验的积累,因为它也是一个实验性的科学,就是说你在数据标注的时候,这个框是不是要标得特别紧凑,比如说你这个目标遮挡三分之一还是露出来一点,都是需要经验积累的。所以说包括这次 BOT 比赛他们数据标注里不是特别有经验,我们都会对数据进行一个清洗。数据清洗对最后算法性能的影响大概在 10% 到 20%。
从框架选取的角度来说,以不同的应用选取不同的框架。比如说你要用人脸的,ConvNet 的卷积方式更适合,你要想做简单的分类,或者是做一些跨平台的融合,TensorFlow 是大家关注最多的,而且我们现在每个框架基本上都用。另外 MX Net 本身的 Bug 比较多,大多数都是中国人,模型释放的比较少,如果你自己选择转模型就会有大量的损失。所以我建议你以 TensorFlow 为主,或者你做 OCR 或者是语音相关的,你要做时序相关的,一般这种 Touch 的也很多,就看你的应用方向,还有你最后的发布平台。
Ⅲ大唯团队陶进:小样本图像检测深度学习算法研究
1. 图像检测需要做一件什么样的事情
图像检测顾名思义,就是模拟人看图片,能够判断图中有什么物体以及这些物体在什么位置。简单来说,给一张有飞机的图片,图像检测需要做的事情是,首先要找出飞机所在的位置,然后对这些所在的位置进行判断里面的物体是什么。传统上做图像检测会把它分三步来做:
第一步是区域选择,这是为了支持目标位置的定位。
第二步是特征提取,当你把目标的位置定位之后,就可以进行图像特征提取,往往这一阶段对整个检测环境起到非常关键的作用。在特征提取时,边界信息的提取很重要,也是容易忽略掉的信息。
第三步是分类器分类,当我们获取到了整个特征的时候,最后一步会给分类器进行分类的操作。
2. 复赛赛题解析
超市商品分割分类的问题上,整个过程种最关键的难点是我们的训练样本量非常少,需要分类的种类非常多。我们把下面的数据统计出来,三大类里面,主办方给了我们 363 张图片,其中只有 336 张图片包含了有改进的图片框,后面依此类推。我们要识别 239 个主类,分别对应每个类别我们需要时间的数目。最后是我们做检测的人非常熟悉的一个词,Bounding Box 就是检测框,给了我们 1319 个。
总而言之,我们怎么在这么少的数据量之下识别这么多的种类?可能很多人一开始就会说,我把所有的检测框架跑一遍,去比对哪个效果最好。可是我想给到大家的一个小小的建议是,在跑框架之前,其实我们是可以对最需要的数据预测一个最直观的分析。我们可以看到,这两张图片上面最大的特征其实是一个集群的物体,就是说某一个泡面旁边种类的泡面和他是一个类型的,我们就通过去找相应的资料处理这个问题。在我们阅读查找文献的时候,SSD 也就是一个检测框架,论文作者提出这个框架的时候,他是基于另一个检测框架选取特征,对小物体和集群物体无法很好识别的问题做了改进。
第二个是我们查到陈新鹏同学在自己的博文上展示了 SSD 模型在面对小规模数据集上的良好效果,他把这个 SSD 模型应用在了自然场景的文本检测上。实际上我们一个单词,或者一个成语也是相当于有点集群的概念在里面。这样的话,就相当于我们可以省掉很多的时间去试一些我们不需要试的框架。但是还有一点是说,数据量实在真的非常少,我们可能还是会想到要做数据增广,依然还是那个建议,你是根据你的数据性质进行适当有效的数据增广。
我们这边看超市物品的时候,我们可以想像,超市的物品出现在不同货架的不同位置上,所以我们从位置的角度去实现增广是一个合理的方式。同时超市倾向于将同一类别的物体摆放在一起供顾客选择。也就是我们左边的图片,后面的会集中摆在一起,泡面会不太常见的出现在一个超市上下货架的两层。所以我们最后依据这样两个假设,我们看到这个其实也验证了我们中国的一个习惯,就是同一类别的物体基本上都放在同一货架上。我们最后采用的增广的方式,就是把一张训练图片进行上下左右三分之一切割,取其中三分之二上的图片,这样一张训练集被变成五张。唯一需要注意的是,分割之后检测目标要进行相应的量化。
ⅣDeeeeeeeeeepNet 团队陈朝才:深度学习在目标检测领域的应用
1. 检测的应用
第一个是做人脸检测,这个做完检测之后还会有很多应用,比如人脸识别会先去检测这个人脸,还有人脸的特征点定位。就是检测到人脸之后,再去点击鼻子,做一些美化或者是其他的特效,还有旁边行人的检测。下面是车行的检测,这个在交通当中应用是很多的。比如说首先需要检测到这些车,再去对这些车进行分类,看看这些车是什么车。
2. 常用检测框架
这些检测的方法我大体上分为三类:一是 Cascade CNN,这是一个 CNN 的结构;二是 RCNN 相关的,这里面我列了几种,当然还有特别多的优化这里没有放出来。包括 RCNN,然后 FastRCNN、FasterRCNN 和 R-FCN、PVANet。三是 YOLO、SSD。
Cascade CNN
首先说一下 Cascade CNN,我们做目标检测的时候有一种非常暴力的方法就是用一个框去辨别这个图像,做一些分类。比如第一个框我框出来了,用一个分类器去分类,比如我这里检测是人脸,我就去做分类,看看这个框里面是不是人脸,我去扫一遍的话,扫到一个区域是人脸。如果我分类的概率大于某一个阈值的话,输出这个地方是人脸,这是一种非常暴力的方法。针对这个方法我们有很多的改进,比如说这里会有很多框,几万个框计算代价太高了,我会先初步的做一个筛选,比如先用一些大的框去扫,扫到某一个区域可能有人脸,我再对这个区域进行检测。这样的话,我通过一个极连的步骤,可以大大的减少计算的时间。更详细的方法在下面,大家有兴趣可以去看一下,它主要是针对暴力扫的话,这种极连不断的去减少这种计算复杂度的方法。(附该结构的 Github 代码地址 )
RCNN
RCNN 是目标检测里面的一个开放性的模块,其他的主要思想也和刚才的类似。刚才在扫这个区域的过程当中有三步:第一步去决定一些框,第二步要对这个框进行分类,第三步要根据我刚才得到的这些框好输出最后的结果。这三步 CRNN 里面做了相应的改进。第一步刚才我们的框是暴力的,RCNN 里面会有一个 Region Proposal 的方法,先看哪些地方有物体,先把这些框作为候选的区域,大概只有 2000 个,比刚才要小特别多。得到这些候选框之后,第二步我们要对这个框进行分类,都有一个卷积神经网络,这个卷积神经网络针对这个框,比如我们常用的是 24×24 的,通过卷积神经网络最后的全链接,一般是 4.96,得到一个 4096 位的特征。得到这个特征之后,我们有些常见的特征,对每一类进行训练一个分类器,我们就可以判断出来,比如提取这一项之后进行分类是机器还是人。这个改进了刚才的三步:第一步就是我们用 Region Proposal 的方法替代暴力扫的方法;第二步就是用 CNN 的特征做分类,不是用传统的一些特征;第三步是用一个 SVM 的分类对候选区域进行分类。这里面还有一个改进,就是我这个候选区域框的位置可能不对,这个人就提出来一个框的回归方法,就去纠正这个 Proposal 的位置,这样的话也带来一个检测效果的提升。(附该结构的 Github 代码地址:)
实际上在这里还有一个改进就是,比如说在这个 CNN 的部分,我们一般是用这个模型直接去提这个 4096 位的特征。这样的话就会导致一个问题,就是说你的模型是在这个上面训练的,但是应用在这个检测的里面,可能我的数据跟你原始数据的分布是有一定差异的,它会把这个模型拿过来,在我的检测数据上面进行一些微调。微调的意思就是说,比如这里分类一般是 1000 类,我把这 1000 类,这个检测只有 21 类的话,把这个全链接层换掉,把这个网络拿到我的数据下面训练一下,会带来很大的分类效果的提升。最后综合这三步,RCNN 相对于传统的目标检测的方法效率、速度和精度上都有了特别大的提升。下面的工作基本上都是针对这三步分别进行改进。
FastRCNN
FastRCNN 部分,刚才在目标检测的后两步,要针对每个区域先提取特征,然后再分类,FastRCNN 就是想把这两步融合起来作为一步。这里就提出来 ROI 的方法,其实就是刚才的这个候选时序。第二步就是设计了这一部分,实现了一个 End to End 的训练。这个当中一个核心的 ROI 有一个解释,这张图片通过我的一些卷积层,比如任何一个网络,我会得到一个 Feature Map,这是 N×W,相当于一般的卷积神经网络最后的卷积层。针对我下面这个候选区域,我会把我的候选区域分为一些块,比如说常用的我会分成 7×7 的一共 49 个,分成 49 个之后,我会把这个区域映射到对应的 Feature Map 这个区域当中。这里有一个特殊的方法,一般的神经网络有四个值我取一个最大的。这里是针对这个区域,比如左上角的区域是取一个值,针对大的或者小的输入,都会生成一个特征向量,这样的话就会解决这个问题,虽然我的候选区域大小不同,但是我最后得到的特征维数是一样的,这样的话就可以做一个批处理。最后通过这里有一个分类的损失和合规的损失,就可以分配到这个序列。(附该结构的 Github 代码地址:)
FasterRCNN
FastRCNN 解决了刚才这三步当中的一步,还有一个部分没有解决,要去提这个候选框,这个是非常耗时的。FasterRCNN 就解决这个问题,看能不能通过深度学习直接提出这些候选框。这里有一个非常好的设计是 Anchors,比如刚才我通过一张图得到一个 Feature Map 之后,比如这个是 H×W 的话,那么我对于这个 Feature Map 上面,我认为这个点会默认的存在一些光。在 FasterRCNN 当中,我把这个原图做了一个可视化,比如我默认这个点大概存在 9 个不同的框,这个框我设计完之后就可以直接从图片里得到这些框,也会针对每一个框输出。比如你默认设置一个 K 框的话,会默认得到一个分类的框,还有一个是坐标 4。这里只是分类物体,就相当于解决了刚才的提取框,哪些为了可能存在物体。通过 Region Proposal Network,用一个简单的网络可以达到每秒 14 帧的处理速度。当然这里面有很多训练的细节,大家如果感兴趣的话可以看一看。
我这里给了一个 FasterRCNN 一个整体的结构。比如这里是图片的话,这里是我们常用的卷积网络,在这里得到我的 Feature Map,就是这个地方。通过这个 Feature Map 有两个分支,通过这个 Feature Map 可以提刚才的候选区域,通过候选区域又映射回刚才得到的这个特征,Feature Map 就相当于提取了某一个候选区域的特征,这里再加一些全链接层或者卷积层,直接得到它的结构。我们可以看到,整个就是一个端对端的训练。这里是 FasterRCNN 的一个介绍。(附该结构的 Github 代码地址:)
RFCN
下面是 RFCN 的结构。RFCN 解决了什么问题呢?在刚才的这个图当中,如果这里得到了 2000 个的候选区域,每一个区域都要进行分类,这一部分要运算 2000 次,这个特别是在残差网络,在运行过程当中,会把最后的做分类,这样的话预算代价特别高,RFCN 的提出就是为了解决这个问题。这里也是设计了一种特殊的呼应的方法,就是刚才通过这张图得到了我的特征图之后,向大家强制输出跟我的类别相关的一个特征图的数目,比如我一般是 256 个,我把这里强制输出是乘以类别数的 Feature Map。这里有什么好处呢?这个好处就是,我针对每一个类别,比如我输出的是九个 Feature Map,,这里是特征图,这是对应到特征图的区域,把这个分为九块。做铺列的时候,针对第一个 Feature Map 图只举左上的一小块进行铺列,得到第一个图,第二个得到第二个图,九个特征图最后得到九个小块。这个是跟刚才 FasterRCNN 里面是一样的,我这里也给了一个 RFCN 整体的架构,这一部分跟刚才不一样,我如果得到特征图之后,这里是一个新加的卷积层,这里是让大家强制输出成和我类别数相关的一个卷积层,就是 Feature Map 的数目,这边是一个分类,这边是采用刚才这种铺列的方法,最后也得到了检测的结果。这里是一个效果对比图,FasterRCNN 的话速度是 420 毫秒一张图,通过这个简化之后,RFCN 是 170 毫秒一张图,相当于提升了三倍的速度。对应的准确率比 FasterRCNN 要高。(附该结构的 Github 代码地址: )
PVANET
这一部分介绍的是 PVANET。我们常用的这一部分,通过图像得到这个特征图的时候,我们一般常用的是这些网络,这个提特征值的时候有没有更好的网络设计?PVANET 对这一部分做了三步改进:第一步使用了 CReLU 的激活方法,一般的卷积层比如有 200 个,会输出 256 个 Feature Map,这相当于有一大部分是冗余的,这个 CReLU 就可以让输出的数量变少,比如 256 个 Feature Map 变成 128 个,这样的话就可以减少预算量。第二步是引入 Inception 网络,Inception 模块是有多个不同大小的卷积组合,得到下一层的 Feature Map。这样有一个好处就是说,相当于做了一个特征的融合,就是说我得到的特征是有不同的特征,不同大小的卷积得到的特征。第三步是把卷积神经网络不同层的输出进行结合,这里有一个什么好处呢?比如说一个网络有五层的话,第五层可能是结构化信息非常高的。这样的话,可能对一些小的物体,这些小的物体到高层的话损失特别大。这里就把低层的 Feature Map 和高层的 Feature Map 进行融合,得到了最后的这个,这一层包含的信息比传统的信息更多。而且更重要的是,这里通过一些设计,让卷积层 Feature Map 的数量变少,达到了很大速度的提升。下面这个图可以看出来,PVANET 可以达到 46 毫秒一张图,比刚才的 RFCN 还要快,刚才的 RFCN 是 133 毫秒,这样就可以达到一个实时的效果,大约 120 帧 1 秒的速度,而且是不同的融合方法,最后检测的准确率是非常高的。(附该结构的 Github 代码地址: )
YOLO
YOLO 的出发点是什么呢?在刚才这个检测流程当中,我通过这里得到一个 Feature Map 之后,先要在这个 Feature Map 上面得到一些候选区域,又要针对这些候选区域,再从这个 Feature Map 上面提一遍特征。这里会造成对每一个候选区域要做两次预算,这里等于是不需要的。下面的方式就是直接从图片得到最后分类检测的框。YOLO 就是把一张图分为很多的区域,对于一张图有一个狗,怎么对应呢?我的中心框如果对着这里,这里就负责解决这个问题,这里得到最后的结果。这个自行车对应到这个点,轿车对应到这个点,最后直接通过这个网络得到一个输出。这里要注意的是,这个输出可以看到是 7×7×30 的矩阵。首先要判断是什么物体,在这个检测当中是 20 倍,在这里有 20 维去表示是什么物体。还有 8 维,要对这个框的位置进行修正,这 8 维是负责对这个框的区域进行修正。
下面是它的整个网络的设计图,这里一共有 24 层的卷积,这里直接通过图片,448×448,最后得到 7×7×30。通过这 30 维,就直接可以算出一个 49 个格子当中,每个格子可能包含什么物体,在什么位置。这样的话,我一次运算就得到了最后的检测结果。这里训练还有一些细节,就比如说这个网络的初始化,会先把一些卷积层在更大的范围内预训练一下,采用 RCNN 的方法,最后再拿到检测训练。这个后面还做一些改进,大家有兴趣的话也可以关注一下。(附该结构的 Github 代码地址: )
SSD
下面是 SSD 的结构,SSD 是这个比赛当中用的很多的一种方法。它解决的是什么问题呢?刚才 YOLO 看上去是非常暴力的,一个图片直接分为 49 个格子。这样的话,如果是这种小的物体的话,可能检测效果会更好。SSD 做了这个改进,比如说看这个网络当中,这里前面是一个 16 层的,到这里如果是 300×300 的话会输出一个 38×38×512,针对这 38× 38 我们会在每一个点上预设一些默认的框,这个地方和前面 FasterRCNN 的 Anchors 有点像,YOLO 只在这个地方输入了一个。SSD 是在网络当中不同的层都有输出。这样的话,其实也相当于一些特征的磨合。当然这个 SSD 在实际的训练当中还有非常多的训练的策略,比如说一个图片是 300×300,之前要做一些图像的增强,可以剪切一些区域去做训练,如果大家对这个感兴趣的话可以看一下这个论文。这里是 SSD 的一个检测效果。我们刚才把这个网络定位一致的话,都用 VGG16 的话 FPS 是 7。这个 SSD 做检测的时候有一个地方,这里是一个 Match 的检测,每次可以处理 8 张图片同时做检测,如果大家去测这个速度的话可能会有损失。(附该结构的 Github 代码地址: )
3. 所述框架总结
Deep Learning 的运用 CNN 的方法去提取物体的特征,比传统手动设置的特征更好,这样带来检测的准确度更高。我们引入了回归的方法,对于检测的位置做一些修正,这样的话检测的位置是更准的。刚才我介绍的这几个框架都是端对端的,这样的话,可以让我的检测速度非常快,而且可以用到 GPU 加度。
1.文章《stn是什么意思》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《stn是什么意思》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好