计算机视觉(图像)技术

这些年计算机视觉识别和搜索这个领域非常热闹,后期出现了很多的创业公司,大公司也在这方面也花了很多力气在做。做视觉搜索,其实是深度学习(或人工智能)领域最重要的研究课题之一,在现实生活中有着非常广泛的应用。

通常,视觉搜索包含了两步任务:首先,待搜索物体的检测与定位;其次,从库(知识图谱、图片库、信息库等)中搜索该物体,或查询相关联的场景。比如从简单的以图搜图、车牌识别,到人脸识别、植物或宠物的识别,人体或车辆的跟踪,无人机、无人汽车的自动驾驶,智能机器人等领域,都离不开计算机视觉搜索技术,这也是此次谷歌开源基于 TensorFlow 的物体检测代码的意义所在。

谷歌此次开源版本中已经实现的 Faster R-CNN、R-FCN、SSD 检测算法之外,还有不少其他检测算法,如除 SSD 外,另一款端到端的检测算法:YOLO(You Only Look Once),精度可能略逊于 Faster R-CNN(非绝对,不同的数据、网络设计会导致差异),但检测速度较快。后续的 YOLO 9000(YOLO 升级版),论文提到能够检测识别超过 9000 类的物体,而且检测更加快速、准确。

计算机能够比以往更快更精准的识别图片,但它们需要大量数据。所以ImageNet 和 Pascal VOC 经过多年积累建立了包含几百万张图片的庞大且免费的数据集,用描述图片内容的关键词为图片做好了标签,包括猫、山、披萨和体育活动等。这些开源数据集是使用机器学习进行图像识别的基础。

ImageNet 每年一度的图像识别挑战赛众所周知,ImageNet 由斯坦福大学和普林斯顿大学的计算机科学家在2009年发起,当时有 80,000 张打好标签的图片,到今天这个数据已经增加到 140 万张,这些数据可以随时被用来进行机器训练。

Pascal VOC 由英国的几所大学支持,他们的图片数量较少,但每张图片有着更加丰富的释文。这提升了机器学习的准确度和应用范围,加快了整个过程,因为它可以省略掉一些繁重的子任务。

如今,谷歌、Facebook 等科技巨头、创业公司、高校等都在使用这些开源图片集来喂养他们的机器学习,但科技巨头还享受另外一项优势,谷歌和 Facebook 可以从 Google Photos 社交网络上获取数百万张用户已经标记好的图片。你之前有没有考虑过,为何谷歌和 Facebook 会让你免费上传如此多图片?原因就在于这些图片可以将他们的深度学习网络训练的更加准确。

一、举例说明:

亚马逊出品的Firefly当时引起了很大的轰动虽然这个产品也很难说是不是成功但是当时确实是很大胆的一个举动。

百度也有图像搜索和图像识别微软也有。

Google很早也有了Google Goggles这个产品虽然技术跟现在有很大的差别。

Pinterest在去年也有这样的功能问世就是在它自己的分享照片上可以去搜相似的照片或者是相似的产品。

阿里巴巴的一个图片搜索——拍立淘强调的是用自己手机去拍照片去搜索网上相同或者相似的商品。

二、如果想构建一个图像搜索引擎,那如何对图像进行搜索呢?

一种方式是依赖于与图像相关联的标签、关键字和文字描述,这种称为标签搜索,或者叫以文搜图。

另一种方式是通过量化图像并提取一组数字来表示图像的颜色、纹理或者形状,然后通过对比图像之间相似度来搜索图像,这种成为范例搜索,或者叫以图搜图。

最后一种是结合前面两种方式,既依赖与图像相关的文字信息,也同时量化图像本身,称为混合搜索。

图像搜索引擎有3种类型:标签搜索、范例搜索和混合搜索  

标签搜索

在谷歌或百度输入关键字并点击搜索按钮,这是我们熟悉的文本搜索方式,而图像的标签搜索与文本搜索很相似。图像的标签搜索引擎很少关注图像本身,而依赖于文字线索。这些线索可以有各种来源,但主要方法是:

手动注释:在这种情况下,管理员或者用户提供图像内容的标签和关键字;

上下文提示:通常,上下文提示仅适用于网页。与手动注释我们必须人工提取标签不同,上下文提示会自动检查图像周围的文字内容或图片标签。这种方法的缺点是我们要假设图像的内容与网页上的文本有关。这可能适用于诸如百度百科这样的网站,其页面上的图像与文章的内容高度相关;

范例搜索:

这些类型的图像搜索引擎尝试量化图像本身,称为基于内容的图像检索(CBIR)系统。一个简单的例子是通过图像中像素强度的平均值,标准偏差和偏度来表征图像的颜色。(如果只是构建一个简单的图像搜索引擎,在许多情况下,这种方法实际效果很好)

对于给定的图像数据集,将数据集中的所有图像都计算出特征值,并将其存储在磁盘上。当我们量化图像时,我们描述图像并提取图像特征。这些图像特征是图像的抽象,并用于表征图像内容,从图像集合中提取特征的过程称为索引。

假定现在我们从数据集中的每一个图像中都提取出了特征,如何进行搜索呢?第一步是为我们的系统提供一个查询图像,这是我们在数据集中寻找的一个范例。查询图像以与索引图像完全相同的方式提取特征。然后我们使用距离函数(如欧式距离)将我们的查询特征与索引数据集中的特征进行比对。然后根据相似性(欧几里德距离越小意味着越相似)的结果进行排序并显示出来。

混合方式:

假如我们正在为Twitter建立一个图像搜索引擎。Twitter允许在推文中使用图片。同时,Twitter也允许你给自己的推文提供标签。我们可以使用推文标签来建立图像的标签搜索,然后分析和量化图像本身特征,建立范例搜索。这样做的方式就是构建一个混合图像搜索引擎,其中包括文本关键字以及从图像中提取的特征。

最好的例子就是谷歌的图像搜索。谷歌的图像搜索是实际通过分析图像本身特征来进行搜索,但是谷歌首先是一个文本搜索引擎,因此它也允许你通过标签进行搜索。

三、文本搜索又可以细分为三种

  第一种用人来对文本做标记

最早期上个世纪七八十年代时是很小的图片集 是通过人来添加图像的文本标签然后通过文本来搜索就够了。之后就发展到了2004年前后的社交媒体时代那个时候像Flicker上图片的Tag虽然也是人加的但是通过草根人群加的量就变得非常地大。通过这个也能做比较不错的图片搜索。再往后的标注就不是人给自己的图片加标签了而是通过设计一些标注的平台——比较有名的是Google收购的Image Labeler——以游戏的方式对图片进行标注。这些标注当然可以用来做图像的搜索这就是通过人工加文本标注的方式进行图像的搜索。

第二种通过网页的文本对图片进行索引

目前的互联网通用图片搜索引擎基本上都是基于这一套技术。通过网页的文本来对图片进行索引当然这里面也涉及到很多的细节包括怎样从网页上提取有效的文字以及2008年之后也有很多图像分析的内容引进到基于网页的图片搜索里来。也就是说虽然图像是网页中的图片但是也会对其进行内容分析——不管是打标签还是特征抽取等——来改进文本搜索存在的一些缺陷提升搜索的精准性。

第三种自动标注

大量的学术论文是这个方向上的一种叫concept detection或者叫tagging。规模上小到几十个、几百个大到上千个、上万个的标签。

四、这一类严格来讲又可细分为几类:

Predefined categories。比如预先定好只分一千类然后就去训练一个分类器把这个图片标好。不限定标签的范围或者说标签的范围非常大然后去学习图片和标签的一个共同的描述方式从而可以实现近似于free text的文本标注。

Implicit tagging即隐式的自动标注。搜索引擎在运行的过程中用户在搜索时会点击搜索结果这个时候搜索的词和搜索的结果就通过被点击这个动作建立起了一个关联这种方式也可以认为是一种标注。虽然它有一些噪声但是实际上也是非常有效的并且也可以用一些方法降低其噪声甚至在相似图像之间传递标签从而扩大标签的覆盖率。这种标注对基于网页的图像搜索引擎对搜索质量的提升起到了非常关键的作用。

五、图像搜索——从火热到没落再到兴起

最早在二十世纪九十年代时那个时候叫做CBIR(Content-Based Image Retrieval)即基于内容的图像检索。但是那时基本上只能在几千、几万幅图上进行检索而且检索的效果很难保证。当时有一个一直流行到现在的词叫做“语义鸿沟”这也是当时我们经常用来质疑基于图像的搜索或CBIR到底靠不靠谱。

图像搜索的没落直到2008年左右才有所起色当时出现了一家叫TinEye的公司提供这样一种网络服务你提交一个图片后它可以帮你找互联网上跟此图非常相似的图片。当你的图像再往大到千万、亿级甚至到十亿、千亿级别的时候就没有办法了。所以此时就要把图片进行索引,索引在文本搜索里面是通过倒排的方法来做这个是非常容易实现的。但是图像不一样图像的描述是它的特征而这个特征是一个向量。

那如何用高维的特征去建索引的方法:

Partition tree是用各种各样tree的方法把数据进行分割、分块使得查找起来比较方便。

Hashing关于图像搜索的Paper基本上都是在做Hashing。

Neighborhood Graph用邻接图的方法来建索引的方法。

Invert Index把所有的图像特征转化成视觉词然后用倒排的方法来做。

这几个方法之间基本上都是可以互相转化的当然转化时有时是有信息损失的。如果做大规模的、数据量非常大的图像搜索我个人认为用倒排的方法来做比较合适。

深度学习用在图片搜索当中:

深度学习出来之后可以让我们去按照自己所想要达到的目标去学习一个神经网络通过这个神经网络去抽取图像的特征。实际上搜索跟识别是密不可分的尤其是在做大规模图像搜索时识别、检测必不可少。识别有时也是要通过搜索来完成的,例如如果你类别非常多的时候往往要通过搜索的方法来实现而不是通过模型的方法来做识别。所以搜索和识别在大数据时代的界限变得越来越模糊了它们之间互相需要互相利用。

六、为什么使用OpenCV+Python实现图像搜索引擎呢?

首先,OpenCV是一个开源的计算机视觉处理库,在计算机视觉图像处理模式识别中有广泛的应用。接口安全易用,而且跨平台做的相当不错,是一个不可多得的计算机图像及视觉处理库。

其次,Python的语法更加易用,贴近自然语言,极为灵活。虽然计算效率并不高,但快速开发上它远胜于C++或其他语言,引入pysco能够优化python代码中的循环,一定程度上缩小与C/C++在计算上的差距。而且图像处理中需要大量的矩阵计算,引入numpy做矩阵运算能够降低编程的冗杂度,更多地把精力放在匹配的逻辑上,而非计算的细枝末节。

 图片搜索引擎算法及框架设计:

基本步骤

采用颜色空间特征提取器和构图空间特征提取器提取图像特征

图像索引表构建驱动程序生成待搜索图像库的图像特征索引表

图像搜索引擎驱动程序执行搜索命令,生成原图图像特征并传入图片搜索匹配器。

图片搜索匹配内核执行搜索匹配任务。返回前limit个最佳匹配图像。

所需模块

numpy。科学计算和矩阵运算利器。

cv2。OpenCV的python模块接入。

re。正则化模块。解析csv中的图像构图特征和色彩特征集。

csv。高效地读入csv文件。

glob。正则获取文件夹中文件路径。

argparse。设置命令行参数。

封装类及驱动程序

颜色空间特征提取器ColorDescriptor。

类成员bins。记录HSV色彩空间生成的色相、饱和度及明度分布直方图的最佳bins分配。bins分配过多则可能导致程序效率低下,匹配难度和匹配要求过分苛严;bins分配过少则会导致匹配精度不足,不能表证图像特征。

成员函数getHistogram(self, image, mask, isCenter)。生成图像的色彩特征分布直方图。image为待处理图像,mask为图像处理区域的掩模,isCenter判断是否为图像中心,从而有效地对色彩特征向量做加权处理。权重weight取5.0。采用OpenCV的calcHist()方法获得直方图,normalize()方法归一化。

成员函数describe(self, image)。将图像从BGR色彩空间转为HSV色彩空间(此处应注意OpenCV读入图像的色彩空间为BGR而非RGB)。生成左上、右上、左下、右下、中心部分的掩模。中心部分掩模的形状为椭圆形。这样能够有效区分中心部分和边缘部分,从而在getHistogram()方法中对不同部位的色彩特征做加权处理

构图空间特征提取器StructureDescriptor。

类成员dimension。将所有图片归一化(降低采样)为dimension所规定的尺寸。由此才能够用于统一的匹配和构图空间特征的生成。

成员函数describe(self, image)。将图像从BGR色彩空间转为HSV色彩空间(此处应注意OpenCV读入图像的色彩空间为BGR而非RGB)。返回HSV色彩空间的矩阵,等待在搜索引擎核心中的下一步处理。

图片搜索匹配内核Searcher。

类成员colorIndexPath和structureIndexPath。记录色彩空间特征索引表路径和结构特征索引表路径。

成员函数solveColorDistance(self, features, queryFeatures, eps = 1e-5)。求features和queryFeatures特征向量的二范数。eps是为了避免除零错误

成员函数solveStructureDistance(self, structures, queryStructures, eps = 1e-5)。同样是求特征向量的二范数。eps是为了避免除零错误。需作统一化处理,color和structure特征向量距离相对比例适中,不可过分偏颇。

成员函数searchByColor(self, queryFeatures)。使用csv模块的reader方法读入索引表数据。采用re的split方法解析数据格式。用字典searchResults存储query图像与库中图像的距离,键为图库内图像名imageName,值为距离distance。

成员函数transformRawQuery(self, rawQueryStructures)。将未处理的query图像矩阵转为用于匹配的特征向量形式

成员函数searchByStructure(self, rawQueryStructures)。类似4。

成员函数search(self, queryFeatures, rawQueryStructures, limit = 3)。将searchByColor方法和searchByStructure的结果汇总,获得总匹配分值,分值越低代表综合距离越小,匹配程度越高。返回前limit个最佳匹配图像。

图像索引表构建驱动index.py。

引入color_descriptor和structure_descriptor。用于解析图片库图像,获得色彩空间特征向量和构图空间特征向量。

用argparse设置命令行参数。参数包括图片库路径、色彩空间特征索引表路径、构图空间特征索引表路径。

用glob获得图片库路径。

生成索引表文本并写入csv文件。

可采用如下命令行形式启动驱动程序。

dataset为图片库路径。color_index.csv为色彩空间特征索引表路径。structure_index.csv为构图空间特征索引表路径。

图像搜索引擎驱动searchEngine.py。

引入color_descriptor和structure_descriptor。用于解析待匹配(搜索)的图像,获得色彩空间特征向量和构图空间特征向量。

用argparse设置命令行参数。参数包括图片库路径、色彩空间特征索引表路径、构图空间特征索引表路径、待搜索图片路径。

生成索引表文本并写入csv文件。

可采用如下命令行形式启动驱动程序。

dataset为图片库路径。color_index.csv为色彩空间特征索引表路径。structure_index.csv为构图空间特征索引表路径,query/pyramid.jpg为待搜索图片路径。

七、图像搜索系统的四个基本要求

在索引建立的过程首先我们要到互联网上去找到这些图发现它以后还要选择它。因为互联网上的图很多不可能把所有的图都放在索引里面去,这时候就涉及到应该把什么图放进去才能满足用户的搜索需求。这个要求是说选择出来的图片应该能满足当前时间点上大部分人搜索的需求就可以了,这实际上会转换成为一个机器学习的问题来解决。

选择好后就要进行理解和索引要知道这个图片里有什么内容。如果基于网页就要从网页上抽信息,如果是完全基于图像就要抽取图像的特征进行理解并建索引。建立索引以后再把这些索引推到搜索服务的机器上去,比如一个互联网图片搜索引擎这个时候可能要几千台机器才能hold住这个图片库的索引。

视觉搜索关键要求:

第一个是相关性:这是一个最基本的要求。当给了一幅图像进去出来的东西要跟给出的图像要是相关的。如何定义“相关”一般对于图片搜索而言基本上是认为“跟它一样”或者是“相像”。例如产品同款产品不管颜色是否一样但它是相同的东西这就叫做相关性。相关性一般来说是做搜索的人最关心的一个问题;

第二个是覆盖率:这就跟产品非常相关。不是我只能搜衣服不能搜其他的商品或者我只能搜商品又不能搜别的东西。否则用户的体验就很不好,甚至是在电商的搜索引擎里面如果用户输入了一个非商品我们该怎么反馈给用户这都是涉及到覆盖率的问题。

第三个是伸缩性:①是否能够高效快速地处理大量的商品和商品的变化即是否能够非常快速地将大量商品放到索引里面去而且索引能够很方便地更新,也就是对于商品建造索引过程而言的一个伸缩性。②能否响应大量用户的搜索请求,即当有大量的用户同时访问搜索服务时要能够快速地响应所有的请求。

第四是用户体验:比较偏交互式用户界面设计方面;

八、商品图片搜索相关关键技术

首先要知道一个图片的大致类型。例如如果是一个商品需要知道它到底是上衣——是男士的上衣还是女士的上衣还是鞋子等。这样来避免搜索出的结果完全不靠谱,这个我们一般把它叫做分类或识别

主体的检测:主体的检测方法在计算机视觉领域也有很多快速的方法基本上是先要找Proposal Window然后对其进行分类。这个场景通常要求速度非常快一个搜索请求进来后所有的操作——包括上述分类、主体检测以及后面的一些步骤到最终的返回结果——都是要在几百毫秒之内返回给用户的。因此我们的Proposal Window就不能那么多,否则计算量就相当的大,所以这就会涉及到后续Proposal Window的refinement这样一个步骤。

图像特征来描述:基本方法还是是利用深度学习这个工具,force神经网络收敛到一个地方使得特征输出能够反映出这个商品的特性例如些种类、风格、图案、颜色等。

覆盖率分为三个角度来讲:

索引的覆盖率。这是我们一般提到覆盖率时所指的含义。简单说就是索引里多少货商品当然是越多越好种类越全越好这个比较容易理解。

特征的覆盖率。特征的覆盖率是指商品的描述能够覆盖各个种类不是只能做鞋子或只能做服装而不能做别的东西甚至非商品是不是能做。为了描述的精准、描述能力的优化实际上不同的类型一般用不同的特征来描述。

搜索的覆盖率。这个覆盖率是电商场景下所独有的,因为电商只有商品图像的索引没有别的索引;那么用户如果输入的不是电商产品的图片该怎么办?比如用户在街上看到一条很可爱的狗并拍照后在平台上搜索该怎么处理呢?这个时候我们可以把狗识别出来然后返回给用户一些狗相关的产品这是一种解决方案。如果是风景、食品的话也可以对风景进行识别对食品里面的热量进行识别然后把这些信息返回给用户。

伸缩性的实现方式主要有两种:

第一种是通过系统的方法,也就是通过大量的机器来实现。索引技术有了系统的方法来实现因此对索引的要求其实没有那么高,有很多方法都可以完全满足搜索系统的构建需求。正如讲搜索引擎架构时所述索引会分到很多机器上去,那么只要做到每一台机器上的数据搜索效率足够高的话那么这个系统就可以完成大规模的搜索任务。

第二种是通过算法,对于算法而言就集中在一台机器上怎么样做到高效。

九、图像识别技术:

图像识别技术是数字图像处理模式识别技术相结合的产物。数字图象处理是利用计算机或其他数字设备对图像信息进行各种加工和处理,以满足目标识别需求的基础行为。模式识别研究如何用机器来实现人对事物的学习、识别和判断能力,因而是以满足目标识别的判断行为。

为了模拟人类图像识别活动,人们提出了不同的图像识别模型。例如,模版匹配模型。这种模型认为,识别图像中的某个物体,必须在过去的经验中有有这个图像对对物体的记忆模式,又叫模板,当前的刺激如果能与大脑中的模板相匹配,这个物体就被识别了。

图像识别的基本过程是抽取代表未知样本模式的本质表达形式(如各种特征)和预先存储在机器中的标准模式表达形式的集合(称为字典)逐一匹配,用一定的准则进行判别,在机器存储的标准模式表达形式的集合中,找到最接近输入样本子模式的表达形式,该表达模式对应的类别就是识别结果。因此,图像识别技术是一种从大量信息和数据出发,在已有经验和认识的基础上,利用计算机和数学推理的方法自动完成图像中物体的识别和评价的过程。

图像识别过程包括图像采集(特征分析)、图像预处理、特征提取、模式匹配4个环节。

首先,通过高清摄像机、扫描仪或其他图像采集仪器采集图像的原始信息。传统的全局特征表示方法,如颜色、形状、纹理等特征,简单直观,但易受光照、裁剪、旋转、噪声等因素的影响,目前基本只作为辅助手段。

图像预处理的作用可以总结为:采用某种手段将图像信息归一化,以便于后续处理工作。图像特征提取部分的作用是提取出最能表征一个物体的特征信息,并将其转变成特征向量或矩阵的形式。模式匹配是指系统用待测图像的特征与特征库中的信息进行比对,通过选择合适的分类器达到识别的目的。

1.图像预处理

图像预处理技术就是对图像进行正式处理前所做的一系列操作。图像预处理技术分为两大方面,即图像增强和图像复原技术。图像增强技术在图像预处理中占有较大的比重,是图像预处理所必需的步骤,它与图像复原技术的不同之处在于图像复原是以恢复图像原来的本质为目的的。

一般来说,图像增强技术有两种方法:空间域和频率域法。空间域法则主要是直接在空间域内对图像进行运算处理,分为两个方面:点运算和领域运算(局部运算)。其中,点运算包括图像灰度变换、直方图均衡化和局部统计法等几种方法;

领域运算包括图像平滑和图像锐化等几个方面。频率域法则只在图像的某种变换域里对图像的变换值进行运算,如我们对图像进行傅立叶变换,然后在变换域里对图像的频谱进行某种计算,最后把计算后的图像逆变换到空间域。频率域法通常分为高、低通滤波、频率带通和带阻滤波等。图像复原技术就是利用图像的先验知识来改变一副被退化的图像的过程。图像复原技术需要我们建立图像模型,然后逆向反解这个退化过程,最后获得退化前的最优图像。

2.变换域处理

图像变换域处理是以空间频率(波数)为自变量描述图像的特征的,可以将一幅图像元值在空间上的变化分解为具有不同振幅、空间频率和相位的简振函数的线性叠加,图像中各种空间频率成分和分布称为空间频谱。这种对图像的空间频率特征进行分解、处理和分析称为空间频率域处理或波数域处理。在众多的图像变换技术中,常用的有离散余弦变换、沃什尔变换、傅立叶变换、Gabor变换和小波变换等。

(1)离散余弦变换DCT变换矩阵的基向量由于近似于托伯利兹向量,常常被认为是对语言和图像信号进行变换的最佳变换,虽然在压缩效率上略逊于具有最好压缩能力的K-L变换,但其可做到的高效处理型是K-L变换无法比拟的,并成为H.261、JPEG和MPEG等国际标准的主要环节。被广泛应用于图像编码方面。

(2)沃什尔变换是一种正交变换,能将相邻取样点的相关性消除掉,使信号能量集中在变换矩阵的左上角,其它部分出现很多零值;或在误差允许范围内,允许省略掉小值,这样可以达到数据压缩的目的。沃什尔变换在图像传输、雷达、通信和生物医学等领域曾得到广泛应用。

(3)傅立叶变换是一种常用的正交变换,其最主要的数学理论基础就是傅立叶级数,由著名数学家Fourier在1822年提出,其主要思想是将周期函数展开成正弦级数。傅立叶变换的提出奠定了图像的理论基础,其通过在时空域和频率域来回切换图像,对图像的信息特征进行提取和分析,简化了计算工作量,被喻为描述图像信息的第二种语言,广泛应用于图像变换、图像编码与压缩、图像分割和图像重建中。

(4)Gabor变换属于加窗傅立叶变换,是短时Fourier变换中当窗函数取为高斯函数时的一种特殊情况。由于傅立叶变换存在一定的局限性,所以Gabor1946年提出了加窗傅立叶变换。加窗傅立叶变换方法的一个典型就是低通滤波器。Gabor 函数可以在频域不同尺度和不同方向上提取相关特征。

(5)小波变换受到傅立叶变换的启发,Morlet于1984年提出了小波分析的概念。1986年著名数学家Meyer和Mallat合作构建了图像小波函数的统一方法——多尺度分析。目前在图像去噪应用方面,小波变换理论取得非常好的效果。

频率域去噪主要是由于有的图像在空间域处理的效果并不理想,因此想到转换到频率域进行处理,即用一组正交的函数系去逼近要处理的目标函数,从而进一步得到相应级数的系数。频率域处理主要用于与图像空间频率有关的处理中,如图像恢复、图像重建、辐射变换、边缘增强、图像平滑、噪声压制、频谱分析和纹理分析等处理和分析中。

3.特征提取

特征提取计算机所视觉和图像处理中的一个概念,它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续曲线或者连续的区域。

(1)特征选择

原始数量的特征很大,或者说原始样本处于一个高维空间中,从一组特征挑选出一些最有效的特征以达到降低特征空间维数的目的,这个过程就叫做特征选择。也就是说,将对类别可分离性无贡献或者贡献不大的特征简单地忽略掉。特征选择是图像识别中的一个关键问题。

(2)特征变换

通过映射或变换的方法可以将高维空间中的特征描述用低维空间的特征来描述,这个过程就叫做特征变换。通过特征变换获得的特征是原始特征集的某种组合,新的特征中包含了原有全体特征的信息。主成份分析法是最常用的特征变换方法。

特征的选择与提取是非常重要的,特征选择是模式识别中的一个关键问题。由于在很多实际问题中常常不容易找到那些最重要的特征,或受条件限制不能对它们进行测量,这就使特征选择与提取的任务复杂化而成为构造模式识别系统中最困难的任务之一。

特征选择与提取的基本任务是如何从许多特征中找出那些最有效的特征。解决特征选择与特征提取问题,最核心的内容就是如何对现有特征进行评估,以及如何通过现有特征产生更好的特征。常见的图像特征提取与描述方法如颜色特征、纹理特征和几何形状特征提取与描述方法。

特征提取算法:

斑点特征检测,代表性算法有:LOG(高斯拉普拉斯算子检测)、DOH(利用图像点的二阶微分Hessian矩阵及其行列式);

角点特征检测,代表性算法有:Harris角点检测、Shi-Tomasi角点检测、FAST角点检测 等;

SIFT(尺度不变特征转化)特征检测,是具有划时代意义的特征检测算法。由于其具有非常不错的仿射不变性,旋转不变性,对于光线、噪点、视角变化等的容忍度也较高,在图像搜索匹配领域应用非常广泛,后续也出现了很多基于 SIFT 的改良算法。

SURF(加速鲁棒特征)特征检测,是 SIFT 的高效变种,简化了 SIFT 特征提取的算法,运算效率更高,基本可实现实时处理。

ORB 特征检测,主要在 FAST 特征点检测算法与 BRIEF 特征描述方法的基础上,做了一些优化和改进,是 SIFT、SURF(两者都受专利保护)之外一个很好的选择。

KAZE/AKAZE(KAZE的加速版)特征检测,比 SIFT 有着更优异的性能和更稳定的表现,是继 SIFT 之后一个较大的突破,也是目前我在系统中优先采用的图像特征提取算法。

另外,还有基于 BRISK/SBRISK(二进制鲁棒尺度不变关键点)、FREAK(快速视网膜关键点)等算法的特征提取检测

4.模式识别

根据有无标准样本,模式识别可分为监督学习和非监督学习。模式识别分类或描述通常是基于已经得到分类或描述的模式集合而进行的,人们称这个模式集合为训练集,由此产生的学习策略称为监督学习。学习也可以是非监督学习,在此意义下产生的系统不需要提供模式类的先验知识,而是基于模式的统计规律或模式的相似性学习判断模式的类别。

(1)数据采集

数据采集是指利用各种传感器把被研究对象的各种信息转换为计算机可以接收的数值或符号(串)集合。习惯上称这种数值或符号(串)所组成的空间为模式空间。这一步的关键是传感器的选取。

一般获取的数据类型如下:

物理参量和逻辑值:体温、化验数据、参量正常与否的描述。

一维波形:脑电图、心电图、季节振动波形、语音信号等。

二维图像:文字、指纹、地图、照片等。

(2)预处理

为了从这些数字或符号(串)中抽取出对识别有效的信息,必须进行预处理,目的是为了消除输入数据或信息中的噪声,排除不相干的信号,只留下与被研究对象的性质和采用的识别方法密切相关的特征(如表征物体的形状、周长、面积等)。

举例来说,在进行指纹识别时,指纹扫描设备每次输出的指纹图像会随着图像的对比度、亮度或背景等的不同而不同,有时可能还会产生变形,而人们感兴趣的仅仅是图像中的指纹线、指纹分叉点和端点等,而不需要指纹的其他部分和背景。因此,需要采用合理的滤波算法,如基于块方图的方向滤波和二值滤波等,过滤掉指纹图像中这些不必要的部分。

(3)特征提取

对原始数据进行交换,从许多特征中寻找出最有效的特征,得到最能反应分类本质的特征,将维数较高的测量空间(原始数据组成的空间)转变为维数较低的特征空间(分类识别赖以进行的空间),以降低后续处理过程的难度。人类很容易获取的特征,对于机器来说就很难获取了,这就是模式识别中的特征选择与提取的问题。特征选择与提取是模式识别的一个关键问题。

一般情况下,候选特征种类越多,得到的结果应该越好。但是,由此可能会引发维数灾害,即特征维数过高,计算机难以求解。如何确定合适的特征空间是设计模式识别系统一个十分重要的问题。

对特征空间进行优化有两种基本方法:

第一种是特征选择,如果所选用的特征空间能使同类物体分布具有紧致性,为分类器设计成功提供良好的基础;反之,如果不同类别的样品在该特征空间中混杂在一起,再好的设计方法也无法提高分类器的准确性;

另一种是特征的组合优化,通过一种映射变换改造原特征空间,构造一个新的精简的特征空间。

(4)分类决策

基于模式特征空间,就可以进行模式识别的最后一部分:分类决策。该阶段最后输出的可能是对象所属的类型,也可能是模型数椐库中与对象最相似的模式编号。己知若干个样品的类别及特征,例如,手写阿拉伯数字的判别是具有10类的分类问题,机器首先要知道每个手写数字的形状特征,对同一个数字,不同的人有不同的写法,甚至同一个人对同一个数字也行多种写法,就必须让机器知道它属于哪一类。因此,对分类问题需要建立样品库。根椐这些样品库建立判别分类函数,这—过程是由机器来实现的,称为学习过程。然后对一个未知的新对象分析它的特征,决定它属于哪一类,这是一种监督分类的方法。

具体步骤是建立特征空间中的训练集,已知训练集里每个点的所属类别,从这些条件出发,寻求某种判别函数或判别准则,设计判决函数模型,然后根据训练集中的样品确定模型中的参数,便可将这模型用于判别,利用判别函数或判别准则去判别每个未知类别的点应该属于哪一个类。在模式识别学科中,.一般把这个过程称为训练与学习的过程。

分类的规则是依据训练样品提供信息确定的。分类器设计在训练过程中完成,利用一批训练样品,包括各种类別的样品,由这些样品大致勾画出各类事物在特征空间分布的规律性,为确定使用什么样的数学公式及这些公式中的参数提供了信息。

一般来说,决定使用什么类型的分类函数是人决定的。分类器参数的选择或者在学习过程中得到的结果取决于设计者选择什么样的准则函数。不同准则函数的最优解对应不同的学习结果,得到性能不同的分类器。数学式子中的参数则往往通过学习来确定,在学习过程中,如果发现当前采用的分类函数会造成分类错误,那么利用错误提供应如何纠正的信息,就可以使分类函数朝正确的方向前进,这就形成了一种迭代的过程。如果分类函数及其参数使出错的情况越来越少,就可以说是逐渐收敛,学习过程就收到了效果,设计也就可以结束。

针对不问的应用目的,模式识別系统4部分的内容有很大的差异,特別楚在数据预处理和分类决策这两部分。为了提高识別结果的可靠性,往往需要加入知识库(规则)以对可能产生的错误进行修正,或通过引入限制条件大大缩小待识别模式在模型库中的搜索空间,以减少匹配计算量。

都说深度学习的兴起和大数据息息相关,那么是不是数据集越大,训练出的图像识别算法准确率就越高呢?

过去 10 年,计算机视觉技术取得了很大的成功,其中大部分可以归功于深度学习模型的应用。此外自 2012 年以来,这类系统的表现能力有了很大的进步,原因包括:

1)复杂度更高的深度模型;

2)计算性能的提升;

3)大规模标签数据的出现。

每年,我们都能看到计算性能和模型复杂度的提升,从 2012 年 7 层的 AlexNet,发展到 2015 年 101 层的 ResNet。然而,可用数据集的规模却没有成比例地扩大。101 层的 ResNet 在训练时仍然用着和 AlexNet 一样的数据集:ImageNet 中的 10 万张图。过去 5 年间,GPU 计算力和模型复杂度都在持续增长,但训练数据集的规模没有任何变化;

比如2017年探索“大量数据”与深度学习之间的关系:

1)使用当前的算法,如果提供越来越多带噪声标签的图片,视觉表现是否仍然可以得到优化;

2)对于标准的视觉任务,例如分类、对象探测,以及图像分割,数据和性能之间的关系是什么;

3)利用大规模学习技术,开发能胜任计算机视觉领域各类任务的最先进的模型。

当然,问题的关键在于要从何处找到比 ImageNet 大 300 倍的数据集。

Google 一直努力构建这样的数据集,以优化计算机视觉算法。在 Geoff Hinton、Francois Chollet 等人的努力下,Google 内部构建了一个包含 3 亿张图片的数据集,将其中的图片标记为 18291 个类,并将其命名为 JFT-300M。图片标记所用的算法混合了复杂的原始网络信号,以及网页和用户反馈之间的关联。通过这种方法,这 3 亿张图片获得了超过 10 亿个标签(一张图片可以有多个标签)。在这 10 亿个标签中,约 3.75 亿个通过算法被选出,使所选择图片的标签精确度最大化。然而,这些标签中依然存在噪声:被选出图片的标签约有 20% 是噪声。

最后训练得到意料之外的结果:

更好的表征学习(Representation Learning)能带来帮助。

大规模数据有助于表征学习,从而优化我们所研究的所有视觉任务的性能。建立用于预训练的大规模数据集很重要。这还说明无监督表征学习,以及半监督表征学习方法有良好的前景。看起来,数据规模继续压制了标签中存在的噪声。

随着训练数据数量级的增加,任务性能呈线性上升。视觉任务性能和表现学习训练数据量(取对数)之间的关系。即使训练图片规模达到 3 亿张,也没有观察到性能上升出现停滞。

模型容量非常关键,如果希望完整利用 3 亿张图的数据集,就需要更大容量(更深)的模型。例如,对于 ResNet-50,COCO 对象探测得分的上升很有限,只有 1.87%,而使用 ResNet-152,这一得分上升达到 3%。此外,构建包含 300M 图片的数据集并不是最终目标。应当探索,凭借更庞大的数据集(包含超过 10 亿图片),模型是否还能继续优化。

十、视觉搜索及图像识别应用的领域:

1、电子商务结合,搜索同款或相似款的衣物、包包;

2、社交网络结合,实现更好的图像理解与互动;

3、自媒体结合,更方便的寻找图像、视频的素材;

4、知识产权结合,可以更准确的追溯图像来源与版权信息;

5、医疗健康结合,可以更准确的做病理研究;

6、工业生成结合,实现更可靠的瑕疵物件筛选;

7、网络安全结合,实现更好的对图像、视频内容的自动过滤审核;

8、安保监控结合,可以实现更准确的跟踪定位;

9、智能机器人相结合,可以实现更好的机器人物体识别和场景定位...

图像搜索结合用户使用场景,能够在复杂背景条件下准确地识别和提取图片中的主体信息,并使用当前人工智能领域较为先进的深度学习技术对获取到的图片信息进行语义分析,现在图像搜索的应用范围已经越来越广,例如:

1、手机拍照购物:在书店、超市、电器卖场随手拍摄一个商品,即可查到该商品在网上商城的价格。移动拍照购物搜索,只需通过手机拍摄相应物品的照片就可进行购物搜索,这样的搜索工具使网络购物变得更加直观、便捷。

2、购物网站相似在具体商品页面下部,自动列出相似款商品。让使用者快速搜到相似的图片,节省时间,提高效率。

3.目录销售用户在享受购物目录翻阅的便捷和惬意过程中,用手机拍下感兴趣的图片,即刻被引导到商家的网站,激活线上行为。为用户提供了方便的购买途径。

4.手机导览增值服务着重为观众提供作品背后的信息体验,用户手机拍下感兴趣的展品,相关的深度信息立刻在手机中显示。

5.版权保护通过图像识别技术,发现同源图片的整体或局部在哪些地方出现,包括线上和线下,保护图片所有者的版权。

十一、未来图像搜索发展的趋势:

图像搜索和识别技术的未来:数据、用户、模型、系统,结合在一起使用;因为绝对不是某一个算法能解决的,也不是仅凭深度学习就可以解决的,更不是说一个搜索系统、识别系统就可以解决的。

推荐阅读更多精彩内容