【一看就会】【人工智能第二篇】从人脸识别开始理解卷积神经网络

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这是人工智能第二篇哦
在上一章中,我们了解了感知机的原理,在这一章,我们进一步,讲解神经网络中最耳熟能详的一类——卷积神经网络。

卷积神经网络主要用于图像识别,例如人脸识别。
本文从人脸识别讲起,将卷积神经网络的逻辑给大家理清。
以下内容不涉及代码,也尽量不涉及公式,只为让大家较为简单的理解卷积神经网络的工作原理。


一、部分基础知识

先补充一部分的基础知识,主要是卷积神经网络的构成,不需要记,等跟着文章理解了卷积神经网络内容后再来看这个:

卷积神经网络 (CNN)
├── 输入层
│ └── 图像数据(宽 × 高 × 通道)
├── 卷积层 (Convolutional Layer)
│ ├── 卷积核 (Filter) [提取特征]
│ ├── 步幅 (Stride) [控制滑动步长]
│ └── 填充 (Padding) [调整尺寸]
├── 激活函数层
│ ├── ReLU [常用,非线性]
│ ├── Sigmoid [较少用于 CNN]
│ └── Tanh [较少用于 CNN]
├── 池化层 (Pooling Layer)
│ ├── 最大池化 (Max Pooling) [取最大值]
│ └── 平均池化 (Average Pooling) [取平均值]
├── 全连接层 (Fully Connected Layer)
│ └── 将特征展平成向量,综合高层语义
├── 输出层
│ ├── Softmax [多分类]
│ └── Sigmoid [二分类]
├── 批量归一化 (Batch Normalization)
│ └── 稳定训练,加速收敛
└── 丢弃层 (Dropout)
└── 防止过拟合

二、从人脸识别开始理解卷积神经网络

1.从人类识别开始理解卷积神经网络的识别流程

现在给你一张照片:
在这里插入图片描述

你是不是一眼看出右边是周杰伦,左边是一个有些像周杰伦的人。

虽然你认出来的速度很快,但实际上你的大脑经过了处理:
首先是人眼进行图像接收。
然后大脑识别判断。
再输出“周杰伦”。

但是左边这个人的“像”从哪里来?
脸型,五官分配,鼻子,眼睛,都有些像。
这些“像”就是你的大脑提取了周杰伦的样貌特征,和左边的人进行了对比。

此时,就可以整理一下你分辨这两个人图像的流程:
1、眼睛接收。
2、提取特征。
3、判断人物。
4、输出姓名。

对应到卷积神经网络上:
1、输入层:接收图片
2、卷积层和激活函数层:提取特征
3、池化层:降低计算量(省脑子)
4、全连接层:进行打分,哪个得分高输出哪个。(见上一篇文章中的多层感知机的打分环节)

下面我们分别讲一下这几层的内容和实现逻辑。

补充:
到了这里大家肯定有疑问:我觉得我的大脑没有经过特征提取,就是直接看到了图片就认出了周杰伦。
这个问题我最后解答。

2.输入层–接收图片并进行预处理

首先是图片输入。
图片有一个个点组成,每个点都有自己的位置和颜色。
除了白色的每种颜色都可以用三原色——红绿蓝调制而成。
所以对于计算机来说,所有的图片都可以量化为数组,数组中的每个数据包含了每个点的位置和红绿蓝的颜色分量。

举个例子:
[
 [[255,   0,   0], [  0, 255,   0], [  0,   0, 255]],
 [[123,  45,  67], [ 89, 100, 200], [150, 150, 150]],
 [[ 78,  90,  45], [200, 210, 220], [ 30,  40,  50]]
]
这就是一个彩色图像。

输入层的作用就是接收这个数组,然后进行预处理,将其缩放到统一大小,比如都缩放成108010803。
(原图片大就隔点删除,原图片小,就隔点补充)
便于后续的卷积层进行处理。

2.卷积层,激活函数层,池化层–提取图片特征

得到了图片之后,就需要提取图片特征,此时就需要用到我们的卷积层,也是卷积神经网络中最重要的部分。

1.第一层卷积层,激活函数层,池化层–提取低级特征(轮廓和纹理)

卷积其实不难,就是用一个小矩阵,比如说3*3的矩阵**(卷积核)**,从矩阵左上角,乘覆盖的数据,乘一点数据挪动一步,可以挪动两格也可以自己定几格(步幅)。(这里没图说不清楚)
(这部分可以看一下另外一个博主的博客中的动图:https://blog.csdn.net/AI_dataloads/article/details/133250229)

总之,卷积就是一种运算,计算完之后,咱们就得到了一个新的矩阵。

哇!
不懂有什么用。

卷积了半天到底是干啥的,提取了个啥,计算完之后就咋了。

答:卷积完之后就把图片的轮廓线给提取出来了。

我们以灰度图像举例:
[255, 3, 5, 66, 200
0, 199, 2, 238, 5
23, 56, 253, 2, 46
51, 200, 51, 222, 3
233, 20, 54, 8, 238
]
上面就是一个灰度图像的矩阵,其中每个位置的数字代表的是亮度,0是黑色,255是白色,然后其他数字都是深浅不一的灰色,数字越小,颜色越深。

你们能看出上面的灰度图是一个什么形状嘛。

这个时候我们就设计一个卷积核:
[0,-1,0
-1, 1,-1
0,-1,0]

然后计算每个点的卷积。(最外层一圈补充一圈0,便于计算)
第一个点数字255,就成了:00±10+00±10+1255±13+00±10+0*0=252
第二个点数字3,就成了一个负数。

懒得算了,反正就是其中数据比较大的,最后卷积完会是个正数,小的卷积完会是负数。
然后再加个激活函数,把让所有的正数=1,负数=0,然后就成了:
懒得写了,你们自己看一下,反正就是1组成的X.

对对对,就是这个意思。
这个卷积层就把所有整个灰度图的特征给提取出来了。

然后这个卷积核中的参数,需要我们自己设计优化。

反正到这里,为啥能提取轮廓线理解了是吧。
池化层很多是max,min,mean池化,也就是把图像里几个数取个最大或者最小或者平均值,然后其他的值给省去,就把图片数据给减小了。

上面说的轮廓线提取和池化,就是第一层卷积层和池化层。

得到的轮廓线的图,成为特征图,我们为了便于和后续的进行区分,将使用第一层提取之后的轮廓图称为一级特征图。

补充:
经常看到卷积层可以无视图像角度带来的影响,这个是因为第一层输出的不止一个轮廓图,既然是矩阵运算,就可以做横向轮廓图,纵向轮廓图,斜角度轮廓图生成,然后分别输入下一层。
矩阵运算就不讲了,这部分可以自己查一下。

2.第二层卷积层,激活函数层,池化层–提取中级特征(鼻子耳朵等)

像是一开始的那张“周杰伦”的图片,通过第一层卷积,得到了轮廓线。

这个轮廓线包含了,耳朵,鼻子,眼睛等等的轮廓,还有脸上的褶子这种纹理,眉毛和头发这种纹理等。

提取出这些轮廓和纹理之后,需要进行下一步特征提取,提取出鼻子,耳朵,眼睛,头发,眉毛。

这一步的提取,依旧卷积层和池化层,这一步的卷积核就会变大,并且上一步池化后将图片缩小,所以这一层就能“看”到更大的图像区域。也就是我们经常听到的**“感受野”**变大。

提取“耳朵”的轮廓,需要一个专门的“卷积核”。
这个“卷积核”在一级特征图上计算之后,得到了一个新的“耳朵”特征图,其中每个点的数字,代表了它是“耳朵”的点的可能性。

以此类推,得到了“鼻子”等等的好多张特征图。
将他们统称为二级特征图。

3.第二层卷积层,激活函数层,池化层–提取中级特征(鼻子耳朵等)

3.全连接层

上面的二级特征图,展开成一个一维向量,就是一竖列数字。
这一竖列数字的量也不少,但是比之前原图的点就少太多了。
然后就扔进全连接层。
全连接层怎么理解呢?
就按上一章的多层感知机理解就行,工作就是为了打分,然后输出分数。

比如说人脸识别,全校人脸中要识别出你的脸,人脸识别系统就会得到包含你的名字在内的所有人的分数,然后选个最高的输出。


总结

写的比较粗糙,之后应该还会回来补充。

这部分不涉及什么公式之类的,讲的也比较简单,主要是为了便于理解卷积网络的物理意义。
但实际上的卷积神经网络,像是LeNet、AlexNet、ZFNet、VGG、GoogLeNet、ResNet、DenseNet、SENet、SqueezeNet和MobileNet
比这个要复杂的多,并且其中有很多层没有什么实际的物理意义,就是纯数学逻辑的计算。
但基本原理相通,希望可以让大家有所启发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不断学习加努力

俺会努力的,一直免费的!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值