计算机视觉和图像处理到底怎么给图像分类

深度学习(8)
时间:2015年11月。
声明:版权所有,转载请注明出处,谢谢
1. 图像分类问题
这是人每天自然而然会做的事情,普通到大部分时候,我们都感知不到我们在完成一个个这样的任务。早晨起床洗漱,你要看看洗漱台一堆东西中哪个是杯子,哪个是你的牙刷;吃早餐的时候你要分辨食物和碗碟…
抽象一下,对于一张输入的图片,要判定它属于给定的一些标签/类别中的哪一个。看似很简单的一个问题,这么多年却一直是计算机视觉的一个核心问题,应用场景也很多。它的重要性还体现在,其实其他的一些计算机视觉的问题(比如说物体定位和识别、图像内容分割等)都可以基于它去完成。
咱们举个例子从的角度描述一下这个问题^_^
计算机拿到一张图片(如下图所示),然后需要给出它对应{猫,狗,帽子,杯子}4类的概率。人类是灰常牛逼的生物,我们一瞥就知道这货是猫。然而对计算机而言,他们是没办法像人一样『看』到整张图片的。对它而言,这是一个3维的大矩阵,包含248*400个像素点,每个像素点又有红绿蓝(RGB)3个颜色通道的值,每个值在0(黑)-255(白)之间,计算机就需要根据这248*400*3=297600个数值去判定这货是『猫』
1.1 图像识别的难点
图像识别看似很直接。但实际上包含很多挑战,人类可是经过数亿年的进化才获得如此强大的大脑,对于各种物体有着精准的视觉理解力。总体而言,我们想『教』会计算机去认识一类图,会有下面这样一些困难:
视角不同,每个事物旋转或者侧视最后的构图都完全不同尺寸大小不统一,相同内容的图片也可大可小变形,很多东西处于特殊的情形下,会有特殊的摆放和形状光影等干扰/幻象背景干扰同类内的差异(比如椅子有靠椅/吧椅/餐椅/躺椅…)
1.2 识别的途径
首先,大家想想就知道,这个并不像『对一个数组排序』或者『求有向图的最短路径』,我们没办法提前制定一个流程和规则去解决。定义『猫』这种动物本身就是一件很难的事情了,更不要说去定义一只猫在图像上的固定表现形式。所以我们寄希望于机器学习,使用『Data-driven
approach/数据驱动法』来做做尝试。简单说来,就是对于每个类别,我们都找一定量的图片数据,『喂』给计算机,让它自己去『学习和总结』每一类的图片的特点。对了,这个过程和小盆友学习新鲜事物是一样一样的。『喂』给计算机学习的图片数据就和下图的猫/狗/杯子/帽子一样:
1.3 机器学习解决图像分类的流程/Pipeline
整体的流程和普通机器学习完全一致,简单说来,也就下面三步:
输入:我们的给定K个类别的N张图片,作为计算机学习的训练集学习:让计算机逐张图片地『观察』和『学习』评估:就像我们上学学了东西要考试检测一样,我们也得考考计算机学得如何,于是我们给定一些计算机不知道类别的图片让它判别,然后再比对我们已知的正确答案。
2. 最近邻分类器(Nearest Neighbor Classifier)
先从简单的方法开始说,先提一提最近邻分类器/Nearest Neighbor Classifier,不过事先申明,它和中的卷积神经网/Convolutional
Neural Networks其实一点关系都没有,我们只是从基础到前沿一点一点推进,最近邻是图像识别一个相对简单和基础的实现方式。
2.1 CIFAR-10
是一个非常常用的图像分类数据集。数据集包含6像素的小图片,每张图片都有一个类别标注(总共有10类),分成了50000张的训练集和10000张的集。如下是一些图片示例:
上图中左边是十个类别和对应的一些示例图片,右边是给定一张图片后,根据像素距离计算出来的,最近的10张图片。
2.2 基于最近邻的简单图像类别判定
假如现在用CIFAR-10数据集做训练集,判断一张未知的图片属于CIFAR-10中的哪一类,应该怎么做呢。一个很直观的想法就是,既然我们现在有每个像素点的值,那我们就根据输入图片的这些值,计算和训练集中的图片距离,找最近的图片的类别,作为它的类别,不就行了吗。
恩,想法很直接,这就是『最近邻』的思想。偷偷说一句,这种直接的做法在图像识别中,其实效果并不是特别好。比如上图是按照这个思想找的最近邻,其实只有3个图片的最近邻是正确的类目。
即使这样,作为最基础的方法,还是得掌握,我们来简单实现一下吧。我们需要一个图像距离评定准则,比如最简单的方式就是,比对两个图像像素向量之间的l1距离(也叫曼哈顿距离/cityblock距离),公式如下:
d1(I1,I2)=∑p∣∣Ip1-Ip2∣∣
其实就是计算了所有像素点之间的差值,然后做了加法,直观的理解如下图:
我们先把数据集读进内存:
import sys
import numpy as np
def load_CIFAR_batch(filename):
cifar-10数据集是分batch存储的,这是载入单个batch
@参数 filename: cifar文件名
@r返回值: X, Y: cifar batch中的 data 和 labels
with open(filename, 'r') as f:
datadict=pickle.load(f)
X=datadict['data']
Y=datadict['labels']
X=X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype(&float&)
Y=np.array(Y)
return X, Y
def load_CIFAR10(ROOT):
读取载入整个 CIFAR-10 数据集
@参数 ROOT: 根目录名
@return: X_train, Y_train: 训练集 data 和 labels
X_test, Y_test: 测试集 data 和 labels
for b in range(1,6):
f=os.path.join(ROOT, &data_batch_%d& % (b, ))
X, Y=load_CIFAR_batch(f)
xs.append(X)
ys.append(Y)
X_train=np.concatenate(xs)
Y_train=np.concatenate(ys)
X_test, Y_test=load_CIFAR_batch(os.path.join(ROOT, &test_batch&))
return X_train, Y_train, X_test, Y_test
X_train, Y_train, X_test, Y_test = load_CIFAR10('data/cifar10/')
Xtr_rows = X_train.reshape(X_train.shape[0], 32 * 32 * 3)
Xte_rows = X_test.reshape(X_test.shape[0], 32 * 32 * 3) 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575812345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
下面我们实现最近邻的思路:
class NearestNeighbor:
def __init__(self):
def train(self, X, y):
这个地方的训练其实就是把所有的已有图片读取进来 -_-||
self.Xtr = X
self.ytr = y
def predict(self, X):
所谓的预测过程其实就是扫描所有训练集中的图片,计算距离,取最小的距离对应图片的类目
num_test = X.shape[0]
Ypred = np.zeros(num_test, dtype = self.ytr.dtype)
for i in xrange(num_test):
distances = np.sum(np.abs(self.Xtr - X[i,:]), axis = 1)
min_index = np.argmin(distances)
Ypred[i] = self.ytr[min_index]
return Ypred
nn = NearestNeighbor()
nn.train(Xtr_rows, Y_train)
Yte_predict = nn.predict(Xte_rows)
print 'accuracy: %f' % ( np.mean(Yte_predict == Y_test) )1234567891011121314151617181920212223242526272829303132333412345678910111213141516171819202122232425262728293031323334
最近邻的思想在CIFAR上得到的准确度为38.6%,我们知道10各类别,我们随机猜测的话准确率差不多是1/10=10%,所以说还是有识别效果的,但是显然这距离人的识别准确率(94%)实在是低太多了,不那么实用。
2.3 关于最近邻的距离准则
我们这里用的距离准则是l1距离,实际上除掉l1距离,我们还有很多其他的距离准则。
比如说l2距离(也就是大家熟知的欧氏距离)的计算准则如下:
d2(I1,I2)=∑p(Ip1-Ip2)2------------√
比如余弦距离计算准则如下:
1-I1?I2||I1||?||I2||
更多的距离准则可以参见.
3. K最近邻分类器(K Nearest Neighbor Classifier)
这是对最近邻的思想的一个调整。其实我们在使用最近邻分类器分类,扫描CIFAR训练集的时候,会发现,有时候不一定距离最近的和当前图片是同类,但是最近的一些里有很多和当前图片是同类。所以我们自然而然想到,把最近邻扩展为最近的N个临近点,然后统计一下这些点的类目分布,取最多的那个类目作为自己的类别。
恩,这就是KNN的思想。
KNN其实是一种特别常用的分类算法。但是有个问题,我们的K值应该取多少呢。换句话说,我们找多少邻居来投票,比较靠谱呢?
3.1 交叉验证与参数选择
在现在的场景下,假如我们确定使用KNN来完成图片类别识别问题。我们发现有一些参数是肯定会影响最后的识别结果的,比如:
距离的选择(l1,l2,cos等等)近邻个数K的取值。
每组参数下其实都能产生一个新的model,所以这可以视为一个模型选择/model selection问题。而对于模型选择问题,最常用的办法就是在集上实验。
数据总量就那么多,如果我们在test data上做模型参数选择,又用它做效果评估,显然不是那么合理(因为我们的模型参数很有可能是在test data上过拟合的,不能很公正地评估结果)。所以我们通常会把训练数据分为两个部分,一大部分作为训练用,另外一部分就是所谓的cross validation数据集,用来进行模型参数选择的。比如说我们有50000训练图片,我们可以把它分为49000的训练集和1000的交叉验证集。
Xval_rows = Xtr_rows[:1000, :]
Yval = Ytr[:1000]
Xtr_rows = Xtr_rows[1000:, :]
Ytr = Ytr[1000:]
validation_accuracies = []
for k in [1, 3, 5, 7, 10, 20, 50, 100]:
nn = NearestNeighbor()
nn.train(Xtr_rows, Ytr)
Yval_predict = nn.predict(Xval_rows, k = k)
acc = np.mean(Yval_predict == Yval)
print 'accuracy: %f' % (acc,)
validation_accuracies.append((k, acc))12345678910111213141516171819201234567891011121314151617181920
这里提一个在很多地方会看到的概念,叫做k-fold cross-validation,意思其实就是把原始数据分成k份,轮流使用其中k-1份作为训练数据,而剩余的1份作为交叉验证数据(因此其实对于k-fold cross-validation我们会得到k个accuracy)。以下是5-fold cross-validation的一个示例:
以下是我们使用5-fold cross-validation,取不同的k值时,得到的accuracy曲线(补充一下,因为是5-fold cross-validation,所以在每个k值上有5个取值,我们取其均值作为此时的准确度)
可以看出大概在k=7左右有最佳的准确度。
3.2 最近邻方法的优缺点
K最近邻的优点大家都看出来了,思路非常简单清晰,而且完全不需要训练…不过也正因为如此,最后的predict过程非常耗时,因为要和全部训练集中的图片比对一遍。
实际应用中,我们其实更加关心实施predict所消耗的时间,如果有一个图像识别app返回结果要半小时一小时,你一定第一时间把它卸了。我们反倒不那么在乎训练时长,训练时间稍微长一点没关系,只要最后应用的时候识别速度快效果好,就很赞。后面会提到的深度神经网络就是这样,深度神经网络解决图像问题时训练是一个相对耗时间的过程,但是识别的过程非常快。
另外,不得不多说一句的是,优化计算K最近邻时间问题,实际上依旧到现在都是一个非常热门的问题。Approximate Nearest Neighbor (ANN)算法是牺牲掉一小部分的准确度,而提高很大程度的速度,能比较快地找到近似的K最近邻,现在已经有很多这样的库,比如说.
最后,我们用一张图来说明一下,用图片像素级别的距离来实现图像类别识别,有其不足之处,我们用一个叫做的技术把CIFAR-10的所有图片按两个维度平铺出来,靠得越近的图片表示其像素级别的距离越接近。然而我们瞄一眼,发现,其实靠得最近的并不一定是同类别的。
其实观察一下,你就会发现,像素级别接近的图片,在整张图的颜色分布上,有很大的共性,然而在图像内容上,有时候也只能无奈地呵呵嗒,毕竟颜色分布相同的不同物体也是非常多的。
参考资料与原文
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11487次
排名:千里之外
转载:33篇
(11)(3)(4)(1)(3)(5)(13)(1)出自 MBA智库百科()
  计算机视觉,也称机器视觉。它是利用一个代替人眼的图像传感器获取物体的图像,将图像转换成数字图像,并利用人的判别准则去理解和识别图像,达到分析图像和作出结论的目的。该技术是模拟识别、心理物理学、图像处理、计算机科学及神经生物学等多领域的综合学科。计算机视觉技术用摄像机模拟人眼,用计算机模拟大脑,用计算机程序和算法来模拟人对事物的认识和思考,替代人类完成程序为其设定的工作。该技术由多个相关的组成,主要包括光源提供系统、图像提取系统、计算机数据运算系统等。原理是:首先通过摄像机获得所需要的图像信息,然后利用信号转换将获得的图像信息转变为数字图像以便计算机正确识别。
  计算机视觉起源于20世纪50年代的统计,开始的研究主要基于二维技术,用于二维图像的识别与分析。6o年代,Roberts通过计算机程序从数字图像中提取出诸如立方体、楔形体、棱柱体等多面体的三维结构,并对物体形状及物体的空间关系进行描述。到了7O年代,已经出现了一些视觉应用系统。7O年代中期,(MIT)人工智fi~(AI)实验室正式开设“机器视觉”课程。80年代开始,计算机视觉技术得到了迅猛发展。Marr从心理物理学、神经生理学、临床神经病学出发,对人的视觉理论进行了系统的研究,提出了第一个较为完善的视觉系统框架。之后,计算机视觉领域展开了基于感知特征群集进行三维目标识别的研究。目前,关于计算机视觉的研究主要集中于其应用,其应用前景相当的广阔。
  计算机视觉信息的处理技术主要依赖于图像处理方法,经过处理后输出图像的质量得到相当程度的改善,既改善了图像的视觉效果,又便于计算机对图像进行分析、处理和识别。
  1.图像分割
  图像分割是将图像分成若干部分,每一部分对应于某一物体表面,在进行分割时,每一部分的灰度或纹理符合某一种均匀测度度量。其本质是将像素进行分类,分类的依据是像素的灰度值、颜色、频谱特性、空间特性或纹理特性等。图像分割主要有两种方法:一是鉴于度量空间的灰度阈值分割法,另一种是空间域区域增长分割方法。
  2.图像增强
  图像的增强用于调整图像的对比度,突出图像中的重要细节,改善视觉质量。通常采用灰度直方图修改技术进行图像增强。图像的灰度直方图是表示一幅图像灰度分布情况的统计特性图表,与对比度紧密相连。
  3.图像平滑
  图像的平滑处理技术即图像的去噪声处理,主要是为了去除实际成像过程中因成像设备和环境所造成的图像失真,提取有用信息,去除噪声,恢复原始图像是图像处理中的一个重要内容。
  4.图像编码和传输
  数字图像的数据量是相当庞大的,高信道速率意味着高投资,也意味着普及难度增加。因此,传输过程中,对图像数据进行压缩显得非常重要。图像数据的压缩主要通过图像数据的编码和变换压缩完成。
  5.边缘锐化
  图像边缘锐化处理主要是加强图像中的轮廓边缘和细节,形成完整的物体边界,达到将物体从图像中分离出来或将表示同一物体表面,它是早期视觉理论和算法中的基本问题,也是中期和后期视觉成败的重要因素之一。
  6.图像识别
  图像的识别过程实际上可以看作是一个标记过程,即利用识别算法来辨别景物中已分割好的各个物体,给这些物体赋予特定的标记,它是机器视觉系统必须完成的一个任务。目前用于的方法主要分为和结构方法。
  计算机视觉的应用主要包括对照片、视频资料如航空照片、卫星照片、视频片段等的解释、精确制导、移动机器人视觉导航、医学辅助诊断、工业机器人的手眼系统、地图绘制、物体三维形状分析与识别及智能人机接口等。
  早期进行的目的之一就是要通过采用提高照片的质量,辅助进行航空照片和卫星照片的读取判别与分类。由于需要判读的照片数量很多,于是希望有自动的视觉系统进行判读解释,在这样的背景下产生了许多航空照片和卫星照片判读系统与方法。自动判读的进一步应用就是直接确定目标的性质,进行实时的自动分类,并与制导系统相结合。在导弹系统中常常将惯性制导与图像制导结合,利用图像进行精确的末制导。
  工业机器人的手眼系统是计算机视觉应用最为成功的领域之一。由于工业现场的诸多因素是可控的,使得问题大为简化,有利于构成实际的系统。与工业机器人不同,对于移动机器人而言,由于它具有行为能力,于是就必须解决行为规划问题,即对环境的了解。随着移动式机器人的发展,越来越多地要求提供视觉能力,包括道路跟踪、回避障碍、特定目标识别等。目前移动机器人视觉系统研究仍处于实验阶段,大多采用遥控和远视方法。
  在医学上采用的图像处理技术大致包括压缩、存储、传输和自动/辅助分类判读。与计算机视觉相关的工作包括分类、判读和快速三维结构的重建等方面。在地图绘制上利用航测加上立体视觉中恢复三维形状的方法绘制地图,大大提高了地图绘制的效率。同时,通用物体三维形状分析与识别一直是计算机视觉的重要研究目标,并在景物的特征提取、表示、知识的存储、检索以及匹配识别等方面都取得了一定的进展,构成了一些用于三维景物分析的系统。
陈旭,吕小俊.浅谈计算机视觉的发展及应用(J).科技信息.2013,16
本条目对我有帮助2
&&如果您认为本条目还有待完善,需要补充新内容或修改错误内容,请。
本条目相关文档
& 6页& 39页& 39页& 39页& 3页& 1页& 2页& 2页& 2页& 1页
本条目由以下用户参与贡献
(window.slotbydup=window.slotbydup || []).push({
id: '224685',
container: s,
size: '728,90',
display: 'inlay-fix'
评论(共0条)提示:评论内容为网友针对条目"计算机视觉"展开的讨论,与本站观点立场无关。
发表评论请文明上网,理性发言并遵守有关规定。
以上内容根据网友推荐自动排序生成计算机视觉(图像)技术 - 简书
计算机视觉(图像)技术
字数 13572
这些年计算机视觉识别和搜索这个领域非常热闹,后期出现了很多的创业公司,大公司也在这方面也花了很多力气在做。做视觉搜索,其实是深度学习(或人工智能)领域最重要的研究课题之一,在现实生活中有着非常广泛的应用。通常,视觉搜索包含了两步任务:首先,待搜索物体的检测与定位;其次,从库(知识图谱、图片库、信息库等)中搜索该物体,或查询相关联的场景。比如从简单的以图搜图、车牌识别,到人脸识别、植物或宠物的识别,人体或车辆的跟踪,无人机、无人汽车的自动驾驶,智能机器人等领域,都离不开计算机视觉搜索技术,这也是此次谷歌开源基于 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.版权保护:通过图像识别技术,发现同源图片的整体或局部在哪些地方出现,包括线上和线下,保护图片所有者的版权。十一、未来图像搜索发展的趋势:图像搜索和识别技术的未来:数据、用户、模型、系统,结合在一起使用;因为绝对不是某一个算法能解决的,也不是仅凭深度学习就可以解决的,更不是说一个搜索系统、识别系统就可以解决的。
绰号:“猎豹”,酷爱写作,闯过商界玩过投资 ,丰富的互联网实战经验及痴迷商业与投资,深入研究过云计算、大数据、SAAS、人工智能、机器人;精通中西文化与商业,擅长数据分析与行业研究,及企业运营管理,}

我要回帖

更多关于 计算机视觉 图像识别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信