<<<写在前面>>>

大学时候,随着学习到的东西越来越多,偶然一次接触到了机器视觉,于是大三和大四基本都在做与机器视觉有关的东西,毕业设计也是依靠谷歌出品的MediaPipe,主要是在于使用MediaPipe进行姿势检测,这篇文章并不是讲解如何做,而是将机器视觉中的算法进行简单的介绍。

卷积神经网络算法的原理

卷积计算和卷积核

先说一个词,卷积核也是在卷积神经网络中必不可少的,卷积核简单理解就是一种特征。我们的大脑在看到一个物体时,是如何知道他是什么的,就是通过一个一个部位的特征组合形成一个完整的图像信息,我们就能判断他是什么。这里的卷积神经网络就是在模仿人类视觉。先看一张图。

卷积核
卷积核

这四张分别表示了四种特征

卷积,这在信号与系统(或者是通信原理,有点记不清了)中有学习到,只不过当初学习的时候是通信中译码和解码时候提到的,没有涉及到机器视觉。接下来讲解一下如何通过卷积计算提取特征矩阵。

如下图,按照下图方法,将矩阵逐一提取出来与卷积核卷积得出右侧绿色方块中的数值,就像这样

卷积神经网络算法
卷积神经网络算法

这是结果,数值越高代表这种特征越明显。这里输出的5*5矩阵就是卷积层的面积,而另一个参数厚度指的是有 N 个卷积核对原图进行卷积操作,输出的就是 N 个特征矩阵。

卷积神经网络算法
卷积神经网络算法

池化

目的主要是降低数据维度,减少计算量。池化有很多种,这里展示的是最简单的一种,下池化中的最大池化:MaxPool。在本文案例只是一个演示,在实际的图像处理中,数据比这里复杂的多,不仅要考虑图像整体大小,还包括颜色信息,明暗度信息等。

最大池化
最大池化

展平与接入连接层、激活

展平操作本质上是一个简单的重排元素的过程,使得原始的多维数据结构能够被后续处理层(如全连接层)接受和处理。例如展成一列,就像神经网络中的全连接层接收的输入。

这里引用一张图,连接层相当于多个线性变换,也就是图中的隐层

接入连接层
接入连接层

为什么要激活

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。使用激活函数能够给神经元引入非线性因素,使得神经网络可以任意逼近任何非线性函数,使深层神经网络表达能力更加强大,这样神经网络就可以应用到众多的非线性模型中。–深度学习中常见的10种激活函数(Activation Function)总结

这篇文章讲到了十种激活函数深度学习中常见的10种激活函数(Activation Function)总结

常用的激活函数如sigmoid,如果要对概率建模,此函数作为输出非常有用。神经网络经过大量计算输出的结果更可能数值域的范围非常大,这时候就用到激活函数限定输出范围,限定到我们能够处理的范围或者想要处理的范围

线性和非线性.jpeg
线性和非线性.jpeg
1
1

分类后机器便知道这张图几成概率是物体 1,几成概率是物体 2。

整个过程相当于从输入分类,神经网络判断这些数据是否具有卷积核的特征值,有理想输出为 1,没有理想输出为 0。

<<<文末闲语>>>

以上的过程是单层最简单的基于卷积神经网络的机器视觉过程,其实还有许多的步骤在上文中未提及,有些步骤和算法用于加强识别能力或者是降低数据信息等等。卷积神经网络的机器视觉用于图像分类、目标检测、人脸识别和图像生成等任务,这样的技术在十年前就已经出来了,当下使用的更新的算法,并且不止在图像领域,在其他如机器学习,自然语言处理 (NLP)等等。本文可能有部分描述不准确或者与实际算法有偏差或错误,欢迎指正。

参考文献与博客:

  1. 深度学习中常见的10种激活函数(Activation Function)总结
  2. 卷积神经网络(CNN)自学笔记2:卷积层
  3. CNN 理解神经网络中卷积(大小,通道数,深度)
  4. 【学习笔记】Pytorch深度学习-网络层之池化层、线性层、激活函数层
  5. 【学习笔记】计算机视觉与深度学习(2.全连接神经网络)
  6. 神经网络算法 - 一文搞懂FFNN(前馈神经网络)