返回首页

AI人工智能技术是通过怎样的方式实现人脸识别和

来源:www.fanlv.net  时间:2022-05-23 21:14   点击:99  编辑:左宁   手机版

用通俗的话总的来说,就是利用大数据抽取规律,再利用规律去预测(回归)、分类、聚类未知的输入,得到输出(结果)。

单说图片识别:

这里面的大数据就是已知的输入(图片)和已知的结果(图片的标签),抽取规律也就是相应的算法(卷及神经网络),预测、分类、聚类就是得到图片的结果(图片识别)。

可以分为以下几步:

第一步:数据的预处理。

图片是由一个一个的像素组成的,就拿入门的案例说吧,MNIST数据集,是一个手写数字的数据集,每一张图片都是由28×28个像素点形成的。

就像这样:

总共有60000张这样的图片,而图片的标签(也就是结果)也是已知的(0~9),那么设输入为x输出为y,

计算机是无法读懂图片的,所以我们要将图片转换成计算机所能认识的东东。

矩阵:

x就是一个28×28的矩阵每一个点表示图片中相应位置的灰度。有的神经网络为了更简化的计算,将28×28 的矩阵,转换为一个1×784的向量(一维矩阵)。这里的x是28×28×1,这个1表示的是单通道,也就是只有一种颜色。如果是彩色图片的话,那么就应该是28×28×3,这个3表示的是RGB三个颜色通道。

y就是一个数字,0~9。

有些算法还会降x,y进行归一化,也就是转换为0~1之间的矩阵、数字。

第二步:抽取特征。

卷积(特征提取)的具体计算方法:

其中input为输入,filter叫做卷积核(暂且理解为滤波器),output叫做特征图,特征图的个数和filter的个数是相同的(filter W0、filter W1)。既然是矩阵,那么可以设中间的参数是W,于是就有Wx+b = output。这里的W是我们最终要训练出来的。

计算方法:

w0与x蓝色区域做内积(对应位置相乘后相加):

f1第1层 = 0×1+ 0×1+ 0×1 + 0×-1+ 1×-1+ 1×0 + 0×-1+1×1+1×0 = 0

f1第2层 = 0×-1+0×-1+0×1 +0×-1+0×1+1×0 +0×-1+2×1+2×0 = 2

f1第3层 = 0×1+0×0+0×-1+ 0×0+2×0+2×0+ 0×1+0×-1+0×-1+ = 0

那么根据神经网络得分函数:f(x,w) = wx+b

这里的b =1

那么输出的得分值就为f1+f2+f3+b = 0+2+0+1 =3

最右边绿色的矩阵第1行,第1列,就是3

将卷积核在输入矩阵滑动,

同理可以计算

这里的输出叫做特征图。

这里就可以看出,经过卷积核Filter(滤波器),将图片浓缩了,浓缩之后,再进行一次非线性的处理,用一些非线性的函数将线性结果非线性化(叫做激活函数),这层叫作卷积层。

这里只是一层,大型数据集(输入很多的情况)一层是不够的,需要很多层,输入-卷积-输出-卷积-输出........。

比如VGG-16,就有16个卷积层。

进一步浓缩叫做池化层。

同样有一个filter,将特征图进行MAX(取最大值)或者MEAN(取均值),进一步浓缩特征。

浓缩完特征之后,接着后面的层叫做全连接层。

就是将权重参数W(矩阵),分别乘以池化完成的结果,得到最终的分类结果比如前边所说的0~9的手写字体,要分10个类别,如果池化完成的结果是1×64,那么全连接层就应该是64×10,最终得到1×10的矩阵,就是分类0~9的结果。

以上最重要的就是要求W,也就是最前边说的,根据大数据找规律。

第三步:参数更新

那么还有问题,W是多少谁知道?

没人知道,这里是根据计算机一步一步的试出来的,

先随机的给出一组W,算出结果Y1,利用已知的x当做输入,用已知的y与y1坐差值,那么Y1-y就会有一个差值,就是预测值和真实值的差值。称作损失函数,有些叫做代价函数。当代价函数最小的时候,预测值Y1和真实值y的差距越来越小,当差距在我们可以接受的范围内,那么就可以认为,由权重参数W生成的Y1可以对输入x进行预测和分类。

那么如何让损失函数最小呢?这里并不是求导后求极值点,而是对损失函数求导数,调整W,使得差值沿着导数的方向前进,最终达到极小值点。

这时候得到的W就是我们最终要的结果了。

第四步:利用参数

既然得到了W,我们就可以利用这个W,将一个未知结果的x输入,从而得到通过W计算出的y,这个y就是图片识别的结果。

现在有很多的开源深度学习框架,是各大著名公司封装好的函数(已经造好的轮子),

以下是一个卷积神经网络识别MNIST的小例子(基于google深度学习框架TensorFlow):

只是经过了21次的参数更新,最终的识别准确率在99%以上。

输出结果:

Extracting MNIST_data/train-images-idx3-ubyte.gz

Extracting MNIST_data/train-labels-idx1-ubyte.gz

Extracting MNIST_data/t10k-images-idx3-ubyte.gz

Extracting MNIST_data/t10k-labels-idx1-ubyte.gz

第0次迭代,测试集准确率是0.7688

第1次迭代,测试集准确率是0.7831

第2次迭代,测试集准确率是0.8829

第3次迭代,测试集准确率是0.8883

第4次迭代,测试集准确率是0.889

第5次迭代,测试集准确率是0.8919

第6次迭代,测试集准确率是0.8908

第7次迭代,测试集准确率是0.893

第8次迭代,测试集准确率是0.894

第9次迭代,测试集准确率是0.8949

第10次迭代,测试集准确率是0.8927

第11次迭代,测试集准确率是0.8935

第12次迭代,测试集准确率是0.8948

第13次迭代,测试集准确率是0.9873

第14次迭代,测试集准确率是0.9881

第15次迭代,测试集准确率是0.9864

第16次迭代,测试集准确率是0.9885

第17次迭代,测试集准确率是0.9906

第18次迭代,测试集准确率是0.9876

第19次迭代,测试集准确率是0.9884

第20次迭代,测试集准确率是0.9902

人工智能技术中,人脸识别和图片识别,都是利用DCNN(深层卷积神经网络)提取图片特征,然后在图片特征上进行一定的操作。

特征提取这里的特征,可以理解成通过一定的计算公式将三维矩阵存储的图片转换为一定纬度可以方便计算的矩阵(最简单例子,一个向量),其实,可以看做数据降维啦,图片那么大的分辨率,如果基于图片计算,太耗费计算量和存储量。

特征提取:图片>网络>一个向量

人脸识别:人脸识别是一对一比对或者一对多比对,假设,你需要对person A进行人脸识别,那么前提,你的图片数据库里有A的图片,然后利用卷积神经网络,提取person A的图片的特征,将这个图片的特征和图片数据库中所有图片提取的特征进行比较,距离最相近的图片判定为同一个人,那么数据库中最相近的那个人对应的属性不就是我们想要得到的么?

人脸识别:提取图片特征;和数据库中图片特征进行比较;距离最近的判定为同一个人;识别人的属性

图片识别:最简单的分类问题吧,首先,这个,你需要知道图片识别出来存在多少种可能性,也就是图片共有多少个类别; 然后,通过网络对图片提取特征,通过网络预测图片属于每一种类别的可能性(softmax了解一下),然后,定义可能性最大的那个类别为预测类别。

图片识别:利用网络预测图片属于每一个类别的可能性,可能性最大的那个为预测类别当然啦,这上面说的网络都是指训练好的网络,具体如何训练的,这里讲起来有些麻烦,我的文章里大多在介绍人工智能领域一些方向的前沿算法,有兴趣可以欢迎交流学习。

顶一下
(0)
0%
踩一下
(0)
0%