揭开图像分类的神秘面纱
哪吒的“虾兵蟹将识别眼”是怎么炼成的呢?
其实就是借助了人工智能中的图像分类技术,即根据每一张图片的不同特点,判断图片的类别。但是想要炼制这个法宝,需要经过图像信息输入、特征选择与表示、分类函数设计、模型训练与评估四大步骤。
图像信息输入
人类有视觉系统,可以轻松获取图片信息,但计算机是如何感知图片内容、获取信息的呢?
如图2-4所示,当我们把图像放大到一定程度之后,可以看到图像由一个个大小相同的正方形格子组成,每个格子的颜色不尽相同,这些格子被称作像素。我们平时在计算机中看到的图像就是由一个个像素组成的。我们常说的图像分辨率592×394,指的就是图像从左至右有592个像素,从上至下有394个像素。
图2-4 计算机中的图像
针对如图2-5所示的灰度图像,通常使用0~255的数字来记录每一个像素的明暗变化。其中0表示最暗的黑色,随着数值的增大,像素变得更加明亮,255表示最亮的白色。
图2-5 灰度图像
对于如图2-4所示的彩色图像,每个像素由灰度图像的1个值变成了3个值,这3个取值范围为0~255的值分别代表红(R)、绿(G)、蓝(B)三种基本颜色的明暗程度,通过这三种颜色的组合,就可以得到我们平时看到的彩色像素,进而得到彩色的图像。这也是我们把彩色图像叫作RGB图像的原因。通过这些像素值,计算机就能获取图片上所表示的信息内容。
特征选择与表示
为了分辨虾兵和蟹将,我们需要观察它们各自的特点,虽然它们都是十足目动物,但虾兵体呈长圆筒状,蟹将体呈扁圆状,因此,我们可以选择利用其体态形状,即身体的长度和宽度,来分辨虾兵蟹将。这种对事物的某些方面的特点进行刻画的数字或者属性,称为特征。
假设经过实际的测量得到了虾兵蟹将的特征:身体的长度和宽度。那么,在数学中应该如何表达呢?可以使用x1来表示身体的长度,x2来表示身体的宽度。为了方便,我们一般写成(x1,x2)的形式,这种形式的一组数据在数学中称为向量,也是二维空间中的一个点,即在二维坐标轴中,x轴取值为x1、y轴取值为x2的点。
在数学中,向量就是多个数字按序排成一行,比如(2,8,4)。其中数字的个数称为向量的维数,如向量(2,8,4)的维数是3,我们也称它为三维向量,它是x、y、z轴分别取值为2、8、4的三维空间中的一个点。
我们把描述一个事物的特征数值组织在一起,形成特征向量。一般地,一个n维特征向量可以表示为x={x1, x2, …, xn},即n维空间中的一个点。利用这种方法,就可以将每一张虾兵蟹将的照片转化为有意义的特征向量,即n维空间中的一个点,从而将图片分类的问题转化为数学几何中对点进行分类的问题。
分类函数设计
接下来,我们需要设计一个分类函数,也就是执行分类任务的决策器。该分类函数要将以上特征向量(即n维空间中的点)分成两类,把每一张图片的特征向量(x={x1, x2, …, xn})映射到该图片所属的类别(是虾兵还是蟹将)。我们先假设该函数为f(x)。在虾兵蟹将分类问题中,我们用y来表示虾兵蟹将的类别,y的取值为0和1,分别代表虾兵和蟹将。设f(x)是n元一次方程,也称为线性判别函数,公式为:
f(x1, x2, …, xn)=w1x1+w2x2+…+wnxn+b
在n维空间里,可以将该函数理解为一个超平面,它可以将空间里代表虾兵和蟹将的点分隔在平面的两侧。我们的目的就是找到一个f(x),通过赋予w1、w2、…wn以及b合理的取值,使得预测结果值趋近于0(虾兵)或者1(蟹将),最终准确地将虾兵和蟹将分开。那么,这一过程中最重要的工作就是确定w1、w2、…wn以及b的取值。虾兵和蟹将的分类示意图如图2-6所示。
图2-6 虾蟹分类示意图
模型训练与评估
那么如何选择合适的参数值,将虾兵和蟹将准确地分开呢?
其实,这些参数的取值类似于人脑的处事原则、判断标准。每个人不是天生就会识文辨字,需要有一个学习的过程,人工智能亦是如此。我们一般称这个过程为训练。在人类从未见过虾兵蟹将的时候,我们并不知道虾兵蟹将是什么样子。而当有人不断教我们这是虾兵、这是蟹将,我们重复地接受了许多虾兵蟹将的信息后,神经系统就会自动提炼虾兵和蟹将的特征,我们再遇到虾兵和蟹将的时候就能很轻松地辨认出来。甚至当我们遇到一个之前从未见过的波纹龙虾时,仍然可以辨认出这是一只虾。这就是人类学习的过程,通过不断地积累和学习,从对虾兵蟹将一无所知到可以轻松地辨认,甚至可以识别出从未见过的品种。
在炼制“虾兵蟹将识别眼”的时候,我们首先要搜集大量的虾兵蟹将照片,将其输入“虾兵蟹将识别眼”(即人工智能模型)中,让它逐渐地学习和记忆,并采用识别准确率、正确样本召回率等指标来评价“虾兵蟹将识别眼”的可靠性,若它能非常精准地识别出一张新图片是虾兵还是蟹将,法宝就炼制成功了!
知识点
准确率(Precision)=正确识别的虾兵蟹将数/虾兵蟹将总数×100%
召回率(Recall)=正确识别为虾兵的数量/虾兵原本的数量×100%
F1值=(准确率×召回率)/(准确率+召回率)