深度学习与计算机视觉系列(2)_图像分类与KNN

作者: 寒小阳
时间:2015年11月。
出处:http://blog.csdn.net/han_xiaoyang/article/details/49949535
声明:版权所有,转载请注明出处,谢谢

1. 图像分类问题

这是人每天自然而然会做的事情,普通到大部分时候,我们都感知不到我们在完成一个个这样的任务。早晨起床洗漱,你要看看洗漱台一堆东西中哪个是杯子,哪个是你的牙刷;吃早餐的时候你要分辨食物和碗碟…
抽象一下,对于一张输入的图片,要判定它属于给定的一些标签/类别中的哪一个。看似很简单的一个问题,这么多年却一直是计算机视觉的一个核心问题,应用场景也很多。它的重要性还体现在,其实其他的一些计算机视觉的问题(比如说物体定位和识别、图像内容分割等)都可以基于它去完成。

咱们举个例子从机器学习的角度描述一下这个问题^_^

计算机拿到一张图片(如下图所示),然后需要给出它对应{猫,狗,帽子,杯子}4类的概率。人类是灰常牛逼的生物,我们一瞥就知道这货是猫。然而对计算机而言,他们是没办法像人一样『看』到整张图片的。对它而言,这是一个3维的大矩阵,包含248*400个像素点,每个像素点又有红绿蓝(RGB)3个颜色通道的值,每个值在0(黑)-255(白)之间,计算机就需要根据这248*400*3=297600个数值去判定这货是『猫』

猫图像=>矩阵

1.1 图像识别的难点

图像识别看似很直接。但实际上包含很多挑战,人类可是经过数亿年的进化才获得如此强大的大脑,对于各种物体有着精准的视觉理解力。总体而言,我们想『教』会计算机去认识一类图,会有下面这样一些困难:

  • 视角不同,每个事物旋转或者侧视最后的构图都完全不同
  • 尺寸大小不统一,相同内容的图片也可大可小
  • 变形,很多东西处于特殊的情形下,会有特殊的摆放和形状
  • 光影等干扰/幻象
  • 背景干扰
  • 同类内的差异(比如椅子有靠椅/吧椅/餐椅/躺椅…)

图像面临的挑战

1.2 识别的途径

首先,大家想想就知道,这个算法并不像『对一个数组排序』或者『求有向图的最短路径』,我们没办法提前制定一个流程和规则去解决。定义『猫』这种动物本身就是一件很难的事情了,更不要说去定义一只猫在图像上的固定表现形式。所以我们寄希望于机器学习,使用『Data-driven approach/数据驱动法』来做做尝试。简单说来,就是对于每个类别,我们都找一定量的图片数据,『喂』给计算机,让它自己去『学习和总结』每一类的图片的特点。对了,这个过程和小盆友学习新鲜事物是一样一样的。『喂』给计算机学习的图片数据就和下图的猫/狗/杯子/帽子一样:

Data-driven approach

1.3 机器学习解决图像分类的流程/Pipeline

整体的流程和普通机器学习完全一致,简单说来,也就下面三步:

  • 输入:我们的给定K个类别的N张图片,作为计算机学习的训练集
  • 学习:让计算机逐张图片地『观察』和『学习』
  • 评估:就像我们上学学了东西要考试检测一样,我们也得考考计算机学得如何,于是我们给定一些计算机不知道类别的图片让它判别,然后再比对我们已知的正确答案。

2. 最近邻分类器(Nearest Neighbor Classifier)

先从简单的方法开始说,先提一提最近邻分类器/Nearest Neighbor Classifier,不过事先申明,它和深度学习中的卷积神经网/Convolutional Neural Networks其实一点关系都没有,我们只是从基础到前沿一点一点推进,最近邻是图像识别一个相对简单和基础的实现方式。

2.1 CIFAR-10

CIFAR-10是一个非常常用的图像分类数据集。数据集包含60000张32*32像素的小图片,每张图片都有一个类别标注(总共有10类),分成了50000张的训练集和10000张的测试集。如下是一些图片示例:

CIFAR-10例子

上图中左边是十个类别和对应的一些示例图片,右边是给定一张图片后,根据像素距离计算出来的,最近的10张图片。

2.2 基于最近邻的简单图像类别判定

假如现在用CIFAR-10数据集做训练集,判断一张未知的图片属于CIFAR-10中的哪一类,应该怎么做呢。一个很直观的想法就是,既然我们现在有每个像素点的值,那我们就根据输入图片的这些值,计算和训练集中的图片距离,找最近的图片的类别,作为它的类别,不就行了吗。

恩,想法很直接,这就是『最近邻』的思想。偷偷说一句,这种直接的做法在图像识别中,其实效果并不是特别好。比如上图是按照这个思想找的最近邻,其实只有3个图片的最近邻是正确的类目。

即使这样,作为最基础的方法,还是得掌握,我们来简单实现一下吧。我们需要一个图像距离评定准则,比如最简单的方式就是,比对两个图像像素向量之间的l1距离(也叫曼哈顿距离/cityblock距离),公式如下:

d1(I1,I2)=p
  • 29
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。而图像分类计算机视觉中的一个重要任务,它的目标是将输入的图像分到不同的预定义类别中。 在OpenCV 2.4中,实现图像分类可以使用多种方法。其中一种常用的方法是特征提取和分类器训练。 特征提取是将输入图像转换为具有有意义信息的向量或特征描述子的过程。在OpenCV中,可以使用SIFT、SURF、HOG等算法提取图像特征。这些特征通常是图像中的纹理、边缘、角点等局部特征。 接下来,在分类器的训练阶段,使用特征向量和标记好的训练数据来学习分类模型。常用的分类器包括SVM(支持向量机)、KNN(K最近邻)、决策树等。在OpenCV中,可以使用cv::SVM、cv::KNearest、cv::DecisionTree等类进行分类器的训练和测试。 在测试阶段中,将输入图像提取的特征向量输入到分类器中进行预测。分类器将返回一个标签,表示图像属于某个类别的概率。 除了传统的特征提取和分类器训练方法,也可以使用深度学习方法进行图像分类。OpenCV支持使用深度学习框架如Tensorflow、Caffe等在图像分类任务中进行模型的训练和测试。 总结起来,OpenCV 2.4中的图像分类可以通过特征提取和分类器训练实现,也可以使用深度学习方法。通过适当选择特征提取算法和分类器,可以实现准确且高效的图像分类任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值