计算机系统应用教程网站

网站首页 > 技术文章 正文

深度学习笔记:图像识别和卷积网络

btikc 2024-10-28 13:02:18 技术文章 5 ℃ 0 评论

图像识别和卷积网络

1.图像识别问题简介和经典数据集

  • MNIST手写体数字

  • Cifar分为Cifar-10和Cifar-100,数据集中的图片为32x32的彩色图片

  • ImageNet:基于WordNet的大型图像数据库,1500w图片被关联到2000个名词的词集上

2.卷积神经网络

  • 输入层: 图像的原始像素

  • 输出层:每一个节点代表不同类别的可信度

  • 参数增多导致计算速度减慢,同时容易过拟合,所以通过卷积网络可以有效减少参数个数

分类的卷积网络由一下5种结构组成:

  1. 输入层。在图像处理中,一般代表一张图片的像素矩阵。三维矩阵,长宽代表图像大小,

    深度代表色彩通道。RGB深度为3
  2. 卷积层。卷积层每一节点输入只是上层网络一小块,常用3x3 5x5。获取抽象程度更高的特征。

  3. 池化层。不会改变三维矩阵的深度,但会缩小矩阵大小。将分辨率高的图片转化为分辨率较低,可以进一步缩小全连接层中节点个数,达到减小参数的目的

  4. 全连接层。一般由1到2个全连接层得出最后结果。经过几轮卷积和池化后,图像中的信息被抽象成信息含量更高的特征。全连接层完成分类任务

  5. Softmax层。主要用于分类问题,得到当前样例属于不同类别的概率分布。

3. 卷积网络常用结构

3.1 卷积层

过滤器(filter)/卷积核(kernel): 将当前层网络上的一个子节点矩阵化为下一层神经网络上的一个单位节点矩阵。

单位节点矩阵: 长宽都为1,深度不限的节点矩阵。

如上图所示,过滤器的前向传播过程就是通过左侧小矩阵中的节点计算出右侧单位矩阵中节点的过程。

卷积层的参数个数只和过滤器尺寸、深度和当前层节点深度有关。[5,5,3,16]表示尺寸5x5x3 的深度为16的过滤器。

在卷积网络中,每个卷积层使用的过滤器参数都是一样的。共享过滤器参数可以使得图像内容不受位置的影响,还可以减小网络参数。

Tensorflow实现卷积层

import tensorflow as tf# 通过tf.get_variable的方式创建过滤器的权重变量和偏置项变量。# 卷积层的参数个数只和过滤器尺寸、深度和当前层节点深度有关# 当前声明变量为4维矩阵,前两维度表示过滤器尺寸,第三个维度:当前层的深度# 第四个维度:过滤器的深度filter_weight = tf.get_variable( 'weights', [5, 5, 3, 16],
 initializer=tf.truncated_normal_initializer(stddev=0.1)
)# 偏置项也共享,本例中过滤器深度16,也是下一层节点矩阵的深度biases = tf.get_variable('biases', [16], initializer=tf.constant_initializer(0.1))# tf.nn.conv2d实现卷积前向传播计算。# 第一个参数:当前层的节点矩阵# 第二个参数:卷积层的权重# 第三个参数:不同维度上的步长,长度为4数组,但1,4维一定为1# 第四个参数:填充(padding),SAME:全0填充 VALID:不添加conv = tf.nn.conv2d(
 input,
 filter_weight,
 strides=[1, 1, 1, 1],
 padding='SAME')# tf.nn.bias_add函数给每一个节点加上偏置项。bias = tf.nn.bias_add(conv, biases)# 将计算结果通过RELU激活函数进行去线性化actived_conv = tf.nn.relu(bias)

3.2 池化层

有效缩小矩阵尺寸,较少全连接层参数,加快计算速度,防止过拟合。

池化层前向传播过程通过移动一个类似过滤器的结构完成,采用最大值或平均值运算。主要有两种:

  • 最大池化层(max pooling):取最大值

  • 平均池化层(average pooling):取平均值

卷积层过滤器横跨整个深度,池化层过滤器只影响一个深度上的节点

TensorFlow实现池化层(max pooling)

# tf.nn.max_pool实现了池化层前向传播的过程,参数和conv2d类似# 第一个参数:当前层的节点矩阵,四维# ksize:过滤器尺寸, 第一维和最后一维必须为1# strides:步长,第一维和最后一维必须为1# padding:是否全0填充pool = tf.nn.max_pool(actived_conv,
 ksize=[1, 3, 3, 1],
 strides=[1, 2, 2, 1],
 padding='SAME')

池化层过滤器常用尺寸为[1, 2, 2, 1]或者[1, 3, 3, 1]

平均池化层: tf.nn.avg_pooling()函数,参数同上。

4. 经典卷积网络模型

4.1 LeNet-5模型

第一层,卷积层

  • 本层输入为原始图像像素

  • 输入层大小:32x32x1。

  • 第一个卷积层过滤器尺寸为:5x5

  • 深度:6不使用全0填充

  • 步长为:1

  • 这一层输出尺寸:32-5+1=28,深度为6

  • 本层共有:5x5x1x6+6=156个参数,6为偏置项

  • 下一层节点矩阵有28x28x6=4704个节点,每个节点和5x5=25个当前层节点相连,本层共有4704x(25+1)=122304个连接

第二层,池化层

  • 本层输入为上一层的输出,为:28x28x6节点矩阵

  • 过滤器大小:2x2

  • 长、宽、步长:都是2

  • 本层输出:14x14x6

第三层,卷积层

  • 本层输入矩阵:14x14x6

  • 过滤器大小:5x5,深度:16

  • 不使用全0填充

  • 步长为1

  • 本层输出矩阵:10x10x16

  • 本层有5x5x6x16+6=2416个参数,10x10x16x(25+1)=41600个连接

第四层,池化层

  • 本层输入矩阵:10x10x16

  • 滤波器大小:2x2

  • 步长:2

  • 本次输出矩阵:5x5x16

第五层,全连接层

  • 本层输入矩阵:5x5x16

  • 本层输出节点个数:120

  • 共有:5x5x16x120+120=48120个参数

第六层,全连接层

  • 本层输入节点个数:120

  • 输出节点个数:84

  • 总参数个数:120x84+84=10164

第七层,全连接层

  • 本层输入节点个数:84

  • 输出节点个数:10

  • 总参数个数:84x10+10=850个

Tensorflow实现LeNet-5模型,解决MNIST

LeNet-5无法很好处理类似ImageNet的较大图像数据集

经典用于图片分类问题的卷积网络架构

输入层—>(卷积层+ —> 池化层?)+ —> 全连接层+

  • 卷积层+表示:一层或多层卷积层(一般最多连续使用3层卷积层)

  • 池化层?表示:没有或者一层池化层。(池化层可以起到减少参数防止过拟合,但可通过调整卷积层步长达到同样效果,因此部分架构中没有池化层)

  • 全连接层+表示:一个或多个全连接层。(一般1-2个)

  • LeNet-5结构:输入层—>卷积层—>池化层—>卷积层—>池化层—>全连接层—>全连接层—>输出层

VGGNet 卷积网络架构参考

  • convX-Y:过滤器边长为X,深度为Y(conv3-64表示过滤器长宽都为3,深度为64)

  • 一般卷积层的过滤器边长

    不超过5
  • 过滤器深度上,逐层递增。

    每经过一次池化层后,卷积层过滤器深度会乘以2
  • 卷积层步长一般为1

  • 池化层大多为最大池化层

  • 池化层过滤器边长一般为2或者3,步长也为2或者3

4.2 Inception -v3模型

Inception -v3模型中的inception结构是将不同的卷积层通过并联的方式结合在一起

一个卷积层可用边长为1、3、5的过滤器,选哪个?Inception模块的方案是:同时使用所有不同尺寸的过滤器,将得到的矩阵拼接起来。示意图如下:

  • 所有过滤器使用全0填充

  • 并且步长都为1

  • 前向传播的结果矩阵长宽与输入矩阵一致,经过不同滤波器处理的结果矩阵可拼接为更深的矩阵,在

    深度这个维度上

    组合起来

  • Inception-v3模型共有46层,由11个Inception模块组成

  • Inception-v3模型有96个卷积层

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表