计算机视觉入门:从图像分类到KNN算法

释放双眼,带上耳机,听听看~!
本文从零基础开始介绍计算机视觉的基本概念,包括图像分类、目标检测以及KNN算法的实现。适合对人工智能和计算机视觉感兴趣的读者。

本文正在参加「金石计划」

引言

计算机视觉入门:从图像分类到KNN算法

相信点进这篇文章的朋友一定对计算机视觉有一定的兴趣,也听说过一些术语或者之前了解过一些。但作者希望完全零基础的人也可以通过这系列文章入门,所以我们会从头讲起。

笔者水平有限,如有错漏敬请批评指正。

计算机视觉是干什么的?

计算机视觉是人工智能 (AI) 的一个领域,是指让计算机和系统能够从图像、视频和其他视觉输入中获取有意义的信息,并根据该信息采取行动或提供建议。 如果说人工智能赋予计算机思考的能力,那么计算机视觉就是赋予发现、观察和理解的能力。

常见的计算机视觉任务有图像分类目标检测语义分割等。

图像分类就是观察图像并进行分类。 更确切地说,它能够准确地预测指定图像属于哪个特定类别。 例如,社交媒体公司可能希望利用该技术自动识别和隔离用户上传的容易引起反感的图像。

目标检测通俗来说就是找出一张图片中我们感兴趣的目标(物体),确定他类别并进行框选。由于同类物品可能由于时间和空间位置展现出不同的形态、外观,加之成像时光影和遮挡关系的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题之一。如下图所示。

计算机视觉入门:从图像分类到KNN算法

语义分割是也是一种典型的计算机视觉问题,通俗来说就是将图片转换为具有突出显示的感兴趣区域的掩模。语义分割的任务是将属于同一目标的图像部分聚集在一起,即识别图像中存在的内容以及位置(通过查找属于它的所有像素)。

计算机视觉入门:从图像分类到KNN算法

上述任务是怎么实现的呢?因为是面向零基础的朋友,我们接下来浅谈一些机器学习基础知识。

KNN

考虑传统算法中我们怎么对一个图片上的物品进行分类?似乎很难,不过我们可以先考虑一个简化的问题——

问题一 固定字体的数字识别

计算机视觉入门:从图像分类到KNN算法
问题定义如下:你有若干张 n×mntimes m 个像素的图片,每个像素仅有黑和白两种可能。每个图片上有一个数字,数字的字体已知,要求识别图片代表的数字。我们可以将其处理成一个 n×mntimes m 的矩形,矩阵的每个元素非 001100 代表白色。如下代码块所示:

0000000000
0001111000
0011111100
0110000110
0110000110
0110000110
0110000110
0110000110
0110000110
0110000110
0011111100
0001111000
0000000000

这个问题看上去就像是我们刚刚开始学习第一门语言时练习语法的课后习题。我们只需要生成对应字体的 0099 十个数字,然后与当前正在识别的图片逐个像素进行比较即可。

顺着这个思路思考,将这个问题变得再难一点——

问题二 手写数字识别

在上面那个问题的基础上,现在我们得到的图片上的数字是人手写得到的。

按照同样的想法,我们应该收集大量手写数字的矩阵然后进行逐个像素比较……当然不行!同一个人连续写两次同一个数字都有可能有极大的差别。但是同一个数字总还是有很多相似之处的。

我们依然将需要被识别的图片与收集到的手写数字的矩阵进行比较,但是这次不再追求完全相同。统计两个图片不同像素的数量,并将这个数量定义为距离。正在被识别的图片上的数字很可能与跟他距离最小的图片上的数字相同!

这就是 1NN,即最近邻算法 。

计算机视觉入门:从图像分类到KNN算法

只用最相似的 1 张图片的上写的数字来作为测试图像的预测结果,有时候会因为参照不够多而效果不好,我们可以找到距离测试图像最近的 KK 张照片,把这 KK 张图片中出现次数最多的数字作为测试图像的预测结果。这就是 KNN 算法(k-Nearest Neighbor)

线性回归

KNN 模型中训练过程中没有使用任何参数,只是单纯的把训练数据存储起来。

与之相对的是参数模型,参数模型往往会在训练完成后得到一组参数,之后就可以完全扔掉训练数据,预测的时候只需和这组参数做某种运算,即可根据运算结果做出判断。接下来我们对参数模型中最基础的算法之一线性回归加以介绍,这也是神经网络算法的基础。

还是以手写数字识别为栗子,我们的十种可能的预测结果(又称标签)作为评委,对每张待预测图片进行打分。每个评委对不同位置的像素偏好程度不同,第 ii 个评委心中有一个大小为 nnmm 列(与图片大小相对应)的矩阵 WiW_i作为特征的系数,图像矩阵与 WiW_i 对应位置相乘并求和后,再加上一个常数 BiB_i 即为评委 ii 给该图片的分数。给分最高的评委即为该图片所属的标签。

WiW_i 和 BiB_i 是可改变的。目标就是通过改变这些参数,使得计算出来的分类分值情况和训练集中图像数据的真实类别标签相符。这个系数矩阵 WiW_iBiB_i 该怎么确定呢?

评价标准

当一个模型总是能进行正确的预测,我们觉得它是好的。为了能比较两个系数集合的优劣,让我们对模型建立量化评价标准,即损失函数。

我们定义损失函数(Loss Function)(有时也叫代价函数 Cost Function 或目标函数 Objective)来衡量对预估结果的「不满意程度」。当评分函数输出结果与真实结果之间差异越大,损失函数越大,反之越小。
损失函数定义为

L=1N∑j=1Nl(f(xj,W),yj)L=frac{1}{N}sum_{j=1}^N{l(f(x_j,W),y_j)}

其中:

  1. NN 是我们参与测试的图片的数量;
  2. xjx_j 是第 jj 张图片的特征矩阵,在刚才的手写数字识别中就是每个像素的 0/10/1
  3. WWWiW_iBiB_i 的集合;
  4. f(xj,W)f(x_j,W) 是第 jj 张图片用系数集合 WW 进行预测出的结果;
  5. yjy_j 是第 jj 张图片的标签,即图片上写着的数字;
  6. l(f(xj,W),yj)l(f(x_j,W),y_j) 是第 jj 张图片预测结果与实际结果的距离,常用 SVM 损失或者 Softmax损失再加上正则损失(对某些 WW 的偏好)来计算。

我们希望能在权重空间中找到合适的方向,使得沿其调整能降低损失函数的损失值,在实际应用中我们常使用梯度下降法。

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

ChatGPT和AI佛:探索开放AI的文本生成模型

2023-12-16 18:30:14

AI教程

如何在Gradio中分享、托管和嵌入演示

2023-12-16 18:45:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索