前言
最近在YouTube上刷视频的时候偶然看见李永乐老师讲解卷积神经网络,主要是面向图像处理的,觉得还挺有意思的,就想着整理一下,万一以后用的上也能看看。
视觉原理
首先介绍计算机在识别图像的时候,是将图像中的每个像素点转化成数字处理识别,但是这样的话,如果图片发生了旋转、放缩等变化,像素信息和原来不相同,那么计算机便无法识别。但是人眼就可以轻易的分辨,即使图片发生了变化。
经神经学家研究,人眼中有两种细胞一种简单细胞只对线条敏感,一种复杂细胞对运动敏感。
福岛邦彦提出神经认知模型,即
光->第一皮层->第二皮层->第三皮层->……
图像经由像素点->边缘、方向->轮廓、细节->……->判断杨立昆提出卷积神经网络(CNN)
卷积
卷积概念
- 卷积作用:数学图像方法提取图片特征
卷积核
- 卷积核:一个用来提取图像特征的矩阵(一般33或者55),卷积核表征的想要提取的特征。
- 卷积核的选取:最开始的卷积核是由人为选取的,例如上面的斜向下的卷积核,在后来的是机器学习根据自己的数据来反向调节卷积核,一幅图片往往不是一个卷积核。
卷积运算
将卷积核放到被测图像上面对应元素相乘然后相加,所得的和放到中间(内积运算)
- 计算第一个元素
- 计算第二个元素
- ……重复操作
卷积的意义
由于卷积核为斜向下的直线,因此提取的特征也是斜向的直线,做完卷积运算的特征图,对应位置数值大的说明符合该特征。
池化和激活
- 池化的作用:将卷积提取的特征图有特征的部分放大,没特征的舍弃,减小计算量。
- 池化方法:最大池化法(将方块中最大的数提取出来重组特征图)
池化完成后要进行——激活
- 激活函数:以Sigmoid函数为例
激活的意义
将提取的特征图进行归一化运算,数字越接近1就越满足卷积核的特性。一方面减少数据量,另一方面方便识别。
实际应用
处理流程
在实际的图像处理中,往往数据量大,而且一张图片(彩色的)往往被分为RGB三个维度(也有其他分类方式),这样的图像往往需要相应维度的卷积核来精确的提取特征,而且如果图像复杂,往往利用多个卷积核来提取,而对于比较大的图像,一次池化之后可能数据量依然很大,因此就有了多次卷积+多次池化的方法来处理图像。
简单的总结一下:
N维图像->N维卷积核提取(每个维度分别对应做内积)
M个卷积核->M个特征图
二次卷积时:M个特征图->M维卷积核提取
卷积神经网络全貌
数据和算力
卷积核在运算时只有加法和乘法,一个800600的彩色图像要有800600*3=1440000个数据,他要进行一个卷积运算要有1300万次乘法和1200万次加法。这样庞大的数据量一般很难用cpu实时处理,主流使用gpu(显卡)来进行运算。
CPU:中央处理器,通用性强,并行能力弱,主要用于控制。
GPU:图形处理器,专用性强,并行能力强,主要用于运算。
NPU:神经网络处理器,专用性更强,并行能力更强,每个Cube可以同时进行数据的加法和乘法(华为的升腾910可以计算161616个数据的内积)。
总结
强大的芯片为越来越复杂的人工智能算法提供了惊人的算力,我们生活中的相机也可以做到实时美颜,人工智能这种通用技术极大的改变了我们的生活,AI芯片作为人工智能领域的根技术,芯片发展算力的提升可以推动更多领域的发展例如无人驾驶等等。