0%

水下机器人视觉_7_卷积神经网络

深度神经网络识别手写字

mnist手写数字识别

独热编码(One-Hot Encoding)

二分类与多分类的编码

多分类独热编码

关于独热编码的更多内容参考https://zhuanlan.zhihu.com/p/35287916

categorical Cross-Entropy

卷积神经网络

CNN

多层感知机(MLPs) 卷积神经网络(CNNs)
只用全连接层 使用稀疏层
只接收向量作为输入 接收矩阵作为输入

MLPs接受向量作为输入

CNNs也接收矩阵作为输入

卷积层

filer(卷积核)
同输入层中与卷积核重叠的部分进行求和运算, 而后将求和后的结果经过激活函数处理, 得到卷积后的结果(卷积层)中的一个像素的值

卷积层的生成

使用一个卷积核可以获得输入层的一种输入特征
使用多个卷积核可以获得输入层的多种输入特征, 从而使得到的特征更加丰富, 使模型更加准确

使用多个卷积核, 获得深度

多个卷积核的卷积计算

多个卷积核形成卷积层(1)

多个卷积核形成卷积层(2)

多个卷积核形成卷积层(3)

步长(stride)
卷积核每次移动的长度(几个像素)

左边的步长较小, 右边的步长较大

填充(padding)
当卷积核移动到边缘时, 覆盖的像素数少于卷积核的像素数, 此时在空白处填0进行填充

出现空白

使用0进行填充

在Keras中使用卷积层:
参考Keras中文文档
e.g.

1
2
3
4
5
from keras.models import Sequential
from keras.layers import Conv2D

model = Sequential()
model.add(Conv2D(filters=32, kernel_size=3, strides=2, padding='same', activation='relu', input_shape=(128, 128, 3)))

注意:

  • activation如果不指定, 则不使用激活函数(即线性激活函数: a(x) = x)
  • input_shape, 当使用该层作为模型第一层时, 必须提供
  • padding, same代表保留边界处的卷积结果, 即会padding, 而vaild代表只进行有效的卷积, 对边界数据不处理, 即丢弃, 详细内容参考https://oldpan.me/archives/tf-keras-padding-vaild-same

池化层

是什么

在CNN网络中卷积层之后会跟上一个池化层, 根据计算出来的值不一样, 分为均值池化层和最大池化层, 一般常见的多为最大池化层
池化操作不改变通道数, 且不需要参数控制

池化层的种类(参考自https://blog.csdn.net/XX_123_1_RJ/article/details/86677482):

  • 一般池化
    • 平均池化
    • 最大池化
  • 重叠池化(OverlappingPooling): 相邻池化窗口之间有重叠区域, 此时一般sizeX > stride
  • 空金字塔池化(Spatial Pyramid Pooling):
    • 空金字塔池化的思想源自Spatial Pyramid Model, 它将一个pooling变成了多个scale的pooling; 用不同大小池化窗口作用于上层卷积特征; 也就是活spatial pyramid pooling layer就是把前一卷积层的feature maps的每一个图片上进行了3个卷积操作, 并把结果输出给全连接层; 其中每一个pool操作可以看成是一个空间金字塔的一层
    • 这样做的好处是, 空间金字塔池化可以把任意尺度的图像的卷积特征转化成相同维度, 这不仅可以让CNN处理任意尺度的图像, 还能避免cropping和warping操作, 导致一些信息的丢失, 具有非常重要的意义

最大池化层的计算

最大池化层

全局平均池化层

为什么

池化层的作用https://blog.csdn.net/XX_123_1_RJ/article/details/86677482:

怎么办(Keras中使用池化层)

参考Keras官方中文文档

Thank you for your reward !