梅科尔工作室-深度学习-CNN

发布于:2023-01-04 ⋅ 阅读:(431) ⋅ 点赞:(0)

目录

1.基本概念

2.cnn常见任务

3.cnn组成

3.1.输入层

3.2.卷积层

3.3.激活层

3.4.池化层

3.5.全连接层

4.AI Studio公开项目的展示


1.基本概念

        卷积神经网络(Convolutional Neural Networks,cnn)是一种具有卷积计算且包含深度结构的前馈神经网络,是深度学习算法之一。

        传统图像处理机器学习算法对数据量要求很大,效率低,并且很难保有原有特征,导致准确率偏低。而cnn也因能降维图像数据,使数据量变小并且保留原有特征而在如今图像处理领域大放光彩。

2.cnn常见任务

(1)图像分类(Image Classification):检测出图片中有哪些物品

9bd3fea229f94dc0bfe50dde8738dce2.png

(2)目标检测(Object Detection):检测出物品,并将位置标出来,比较简单的是对角线确定一个物体,然后框起来

f0360030bf6e46fd8643356bc1172d13.png

(3)语义分割(Semantic Segmentation):将不同类用不同颜色标出来(针对像素),同一类物体一个颜色背景也单独拎出来。

2af00dfd843441d59c2d9821ec6ab8ff.png

(4)实例分割(Instance Segmentation):把物品视为对象,即使是同一类物品也用不同颜色标出来,并且一般不把背景拎出来。你需要什么,分割什么。

5c730e0daa6f48a18d98fd14ebd25e67.png

3.cnn组成

3.1.输入层(Input Layer)

图片输入,经过处理后变为像素矩阵。

3.2.卷积层(CONV Layer)

卷积层又被成为过滤器或者卷积核或者内核,用来提取图像局部的特征。

6792aa3a320a4562a9bce61ce41f0ad0.png

        像素矩阵通过与卷积核(过滤器)进行内积。在进行卷积操作之前,会对矩阵最外围进行数据填充(zero padding),一般是填充0,padding为填充的圈数,当padding为1时会在外围填充一圈0,当padding为2时会在外围填充两圈0。

        对矩阵进行数据填充的目的是避免特征值运用不均衡,如果进行数据填充,以下图卷积计算为例,四个角特征值只被用了一次,中间特征值杯用了四次,其他四个特征值被用来两次。这就造成特征值运用不全。而当你在矩阵外围进行数据填充,可以发现每个数据被利用次数是相同的(要一视同仁)。

81e65770887c4e8c88df7a83b27d35ff.png

        在进行卷积计算的时候,你可以设置卷积核移动的步幅(stride) ,如上图卷积核移动的步幅是1,从左往右,到尽头后再下移行从左边重新移动。当你设置stride为2时,卷积核每次会移动两列。设置步幅的目的是减少输入参数数量,减少计算量。

3.3.激活层(ReLU Layer)

        通常情况下,输入与输出之间是线性的,如原来是wx+b,第二步再计算,把第一步值代入x,最终得出的自变量次数还是1(这里你可以将线性理解成一次函数,线性代数中对线性的解释是满足加法封闭以及数乘封闭),不够带入多少次只有x前面的系数以及常数项发生变化,自变量幂数没有变,x仍满足线性条件。增加激活函数后,能够实现非线性计算。可以把线性的操作拟合成非线性的。

a93a9377b8654425a7d035814df0a4ae.png

        以上一节svm为例,你想要将数据分开,线性是不可以的。而激活函数可以让你的线性操作做到非线性的事情,就例如上图直线不行,利用核函数拟合出非线性找这里只是用上一节的东西对激活函数作用做了简单的理解。 

        引入激活函数最重要的作用是使你的模型具有非线性表达能力,除此之外,激活函数还能提高抗干扰能力并且将数据映射到高维空间(详细见上节svm对映射数据的理解)。

3.4.池化层(Pooling Layer)

        池化有平均池化以及最大池化(比较常用)等,他的操作就是字面意思,将方阵的平均值或者最大值当成这个方阵,相当于一个班级(原始方阵)找出来了一个代表(处理后),可以参考上面卷积层的运算把像素矩阵与卷积核的内积改为(上面的)具体操作就行。

522b3c50242b4b95a82840bef6d8ebf5.png

        池化的作用是对数据进行降维处理(上面那个图将2*2方阵进行操作,4个特征值最后变为一个特征值),极大的减少了计算量。 并且还能防止过拟合(想一想我们做平均后,特征是不是变得抽象了?那不就可以防止过拟合了吗)

3.5.全连接层(FC Layer)

        上面的三步操作实际上可以进行很多次,卷积池化、卷积池化、卷积池化,在进行多次卷积池化后通过一个激活函数softmax(可以使用这个)将前面的输出进行处理最终得出你想要获得的输出。

4.AI Studio公开项目的展示

利用百度飞桨内公开的项目,下面是链接

CNN实现猫狗分类 - 飞桨AI Studio (baidu.com)

下面仅展示内容及运行结果(上面链接都有),详细可点击上方链接进行查看。

ff3565013ca840858575cf7990b52b3e.png

首先导入相关的库文件,os对操作系统进行操作,paddle.fluid包含了百度飞桨封装好的深度学习 算法。

6ed14de912e04c9fa7296edf10df53ec.png

对数据集进行下载 

05a4c55755484249822b319f86ec5ee4.png

对数据集进行划分

a0b78f7744054cc2b814e7622b3e1d9d.png

对cnn进行配置 

7671de9e8a0042c7bcc6dbd067a89518.png

定义数据以及获取分类器。

8be894deb6824e119578a1ef455f009d.png

定义损失函数及优化方法。 

bf9e47d1a276401a8a23ed86177b53b7.png

905d58ea727b4407a0ac572ba6faffb5.png

26a2b9d673834eb9a2c45a9d86b05ef9.png

定义使用什么进行运算以及数据映射,还有绘制损失值与准确率趋势图像的方法。

5cd897839d0c442da9cd6bd4f75e151a.png

训练并保存模型。

ace0bc265f4848b29050510c94246a35.png

2ab6ce802e2f4192881de36846fcfae0.png

b8fb2b23f321402ab17e420dee3c47e9.png

4c6c3716b27441999480c8ccab24f967.png 模型预测

 9a60c0f90cac4403834cda9e5e2ce4c8.png

91e8a2763dc24a158180760f88148daa.png