===================================================================================================
在探索中进步!
阅读的我在这里写上见解,还没来得及读的,先放上文章标题、链接
===================================================================================================
文章目录
一、图像预处理
为什么CNN需要固定输入图像的尺寸(CNN图像尺寸输入限制问题)
https://blog.csdn.net/u010801994/article/details/81482885
OpenCV学习笔记:resize函数改变图像的大小
https://blog.csdn.net/woainishifu/article/details/53260546
二、建立模型
1、帮助理解DNN——卷积神经网络CNN究竟是怎样一步一步工作的?
作者:zhwhong
链接:https://www.jianshu.com/p/fe428f0b32c1
来源:简书
理解:
根据图像的feature来对图像进行识别。
每一个feature就像是一个小图(就是一个比较小的有值的二维数组,源图像矩阵的一个子集)。不同的Feature匹配图像中不同的特征。在字母"X"的例子中,那些由对角线和交叉线组成的features基本上能够识别出大多数"X"所具有的重要特征。
卷积层
关于卷积,我的理解是两个可积函数f(x),g(x)。对f(m)*g(x-m)对m求积分,可得函数h(x),则函数h(x)称为,函数f与g的卷积。
特征(feature)的矩阵,相当于一个窗口,对源图像矩阵的每一个元素进行匹配计算,这个匹配过程被称为卷积操作。同时也是CNN名字的由来。
设特征矩阵为m1,匹配的源图像矩阵的元素An(以该元素为中心,与m1等大的矩阵m2),对m1、m2进行矩阵乘运算后得到新矩阵m,对矩阵m中的全部元素进行求和,最后除以矩阵内元素的个数,即可得到该像素点An是否匹配的结果。然后重复上述过程,即可得到一个与源图像等大的特征矩阵M1。
对每个特征都进行上面的操作,得到每个特征的特征矩阵M1M2…Mn(n为特征的个数)
求特征矩阵的这一层被称为卷积层,我想是因为这一层里进行了大量的卷积操作
池化层——常用的池化矩阵大小为2*2,4个元素,最后只留下一个,缩小了4倍
标志位设为max-pooling,取输入图像中2*2大小的块中的最大值,作为结果的像素值
CNN中使用的另一个有效的工具被称为“池化(Pooling)”。池化可以将一幅大的图像缩小,同时又保留其中的重要信息。池化背后的数学顶多也就是小学二年级水平。它就是将输入图像进行缩小,减少像素信息,只保留重要信息。通常情况下,池化都是22大小,比如对于max-pooling来说,就是取输入图像中22大小的块中的最大值,作为结果的像素值,相当于将原始图像缩小了4倍。(注:同理,对于average-pooling来说,就是取2*2大小块的平均值作为结果的像素值。)
这篇文章讲的确实很透彻。
对卷积层中得到的所有的特征矩阵M1M2…Mn(n为特征的个数)进行池化操作,缩小矩阵,保留主要信息,得到池化特征矩阵PM1PM2…PMn
因为最大池化(max-pooling)保留了每一个小块内的最大值,所以它相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。这也就意味着它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。这也就能够看出,CNN能够发现图像中是否具有某种特征,而不用在意到底在哪里具有这种特征。这也就能够帮助解决之前提到的计算机逐一像素匹配的死板做法。
当对所有的feature map执行池化操作之后,相当于一系列输入的大图变成了一系列小图,通过池化操作,能显著降低计算量。
沉积层:
关于激活函数,我目前学习过的阶跃函数、双曲正切函数(z)=2σ(2z)-1、ReLU函数都可作为激活函数
https://blog.csdn.net/az9996/article/details/90382045
这一篇更专业
http://cs231n.github.io/neural-networks-1/
这里用了ReLU函数作为阶跃函数,作用是对于输入的负值,输出全为0,对于正值,原样输出
讲这些层组合在一起就得到了DNN
全连接层(Fully connected layers)
针对每一个池化特征矩阵得到的结果进行投票,得票数高的就是源图像所属的类别
这一层的作用是进行投票
全连接层也可以有多个
上面的顺序被称为前向传播
反向传播 (Backpropagation)
原文这一部分略过,没有讲,可以看看我的
这一块我有过学习
链接:https://blog.csdn.net/az9996/article/details/90382045#_74
这一篇更专业
https://www.jianshu.com/p/408ab8177a53
opencv基于深度学习的人脸检测
https://blog.csdn.net/minstyrain/article/details/78907425
运用CNN对ImageNet进行图像分类 (这一篇是专业的论文,难)
https://blog.csdn.net/lk274857347/article/details/53514364