—— step.1 数据集
首先根据自己想达到的目的,来建立正样本数据集和负样本数据集(ps:如果检测是否有人,正样本及有人的图片,负样本就是为你不想判定为有人的图片),当然如果有已经开源的数据集,我们当然直接拿来用就好。
接下来推荐几个学习时使用的不错数据集:
1. MNIST —— 一个手写数字的数据集
2. 搜狗实验室数据集 —— 搜狗收集了包括人物、动物、建筑、机械、风景、运动等类别
3. ImageNet —— 一个计算机视觉系统识别项目,是目前世界上图像识别最大的数据库
—— step.2 CNN介绍
卷积 神经网络判断一个图片是否包含“人”的过程,包括四个步骤:
- 图像输入(InputImage)→
- 卷积(Convolution)→
- 最大池化(MaxPooling)→
- 全连接神经网络(Fully-ConnectedNeural Network)计算 →
步骤如下图:
了解传统的神经网络的就知道,作为神经元的感知机模型十分简单,如全连接层的网络结构,采用矩阵相乘然后进行非线性变换。
感知机模型:
f(x) = sign( Wx + b )
传统神经网络的劣势在于,当需要处理一个4004003的RGB图片时,一张图就需要处理较大的数据量,占用的内存空间会巨大,还必将导致收敛速度慢,使得需要更多训练数据以及更多的迭代。另一方面,全连接网络结构在处理每一个像素时,其相邻像素和距离很远像素都是无差别对待的,并没有考虑图像内容的空间结构。
通过认识到上面的不足,卷积神经网络产生了,卷积神经网络指的是至少有一层计算为卷积操作的神经网络。卷机操作是其中的核心,他充分利用了图片中相邻区域的信息,通过稀疏连接和共享权值的方式大大减少了参数矩阵的规模,从而减少计算量,也提高了收敛速度。
所谓的卷积核,其实就是一个权值矩阵,表示如何处理单个像素与邻域像素之间的关系。卷积核的各个元素相对差值较小,就相当于每个像素和周围像素取了个平均值,也就有了模糊降噪的效果。而卷积核的各个元素相对差值较大,就拉大了每个像素和周围像素的差距,也就可以提取边缘,达到锐化的效果。(卷积核元素累加为0时,图片输出亮度会很低,但不会全黑,大部分是黑色,有部分图案边缘存在,也就做到边缘提取了)
但是,我怎么才知道我们想要的卷积核参数那?
通过卷机操作和反向传播算法结合,通过大量图片让程序自己学习出卷积核参数即可。
传统神经网络,对于一张1000x1000像素的图来说,就会有多达10万个输入。而对于CNN来说,如果使用的10x10的卷积核,每个节点就只有100个输入,对应100个权值,数量级大大减小。
—— step.3 tensorflow对CNN的项目实现
实现CNN时会用到:
1. 池化 pooling: 一种是最大池化(max pooling),在定义窗口内取最大值。另一种是平均池化(average pooling).池化主要作用是降维。
2. 激活函数 Relu:将一个特征空间的向量通过非线性变换映射到另一个空间中才能实现线性可分。它的优点在于分类效果好,收敛速度快,计算速度快。
3. 多层卷积:将对前面提取的细节特征进行再次提取组合,相当于把视野放大,提取出更完整,更抽象的特征。
4. Dropout:过拟合是指训练结果在训练集和测试集上表现差别很大的情况。
代码实现:
|
|
—— step.4 声明
部分图片和内容来自于网络,若有纠纷麻烦联系邮箱:lc438732659@163.com