1. 卷积神经网络基础知识

1.1 卷积特征

卷积核内的参数决定了提取的特征。

  • 卷积核:卷积核就是图像处理时,给定输入图像,在输出图像中每一个像素是输入图像中一个小区域中像素的加权平均,其中权值由一个函数定义,这个函数称为卷积核。
  • 卷积:卷积可以对应到2个函数叠加,因此用一个filter和图片叠加就可以求出整个图片的情况,可以用在图像的边缘检测,图片锐化,模糊等方面。

深层原理

提取特征,关键是要找到特征变化的分界点–特征的边缘

当我们把图片的每一部分区域,依次带入到二阶导数时,对于灰度变化较小或者是均匀变化的区域,我们会得到一个接近0的值,而对于灰度变化大的区域,我们则会得到一个较大的值,从而识别出图片的边缘。

边缘提取例子

下图是一个矩形,我们希望过滤掉水平的上下边,而提取出垂直边。我们只需要计算水平方向上的梯度变化就可以。

在与提取垂直边缘的卷积核运算后,得到的就是图像水平方向的二阶导数。

简言之:用卷积直接达到了二阶导数的结果,实现边缘特征提取。

卷积后尺寸主要受kernel size、padding、stride等影响。

1.2 感受野

卷积神经网络每一层输出的特征图上的像素点映射回输入图像上的区域大小。

1.3 多通道卷积

特征图的大小是C×H×W
通常:卷积核的通道数目与被卷积的特征图的通道数目相等。
输出特征的通道数与卷积核数目相同。

1.4 池化(Pooling)

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。

以最大池化(max pooling)为例:

计算公式:o = (i-k)/s+1

直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

1.5 卷积神经网络

简单的卷积神经网络流程

设计一个卷积神经网络需要确定的结构参数

  1. 卷积层(CONV)
    • 每一层卷积核的数目𝑛(确定了该层输出的特征图的通道数目)
    • 每一层卷积核的大小𝑓
    • 每一层卷积的跨度𝑠
    • 每一层卷积的非线性响应函数(ReLU)
  2. Pooling层(POOL)
    • Pooling区域的大小𝑓
    • Pooling的计算方式(Max,Mean)
    • Pooling的跨度𝑠
  3. 全连接层(FC)
    • MLP的层数𝑛
    • 每一层神经元数目𝑓与响应函数
    • 以上参数是超参数,不能通过梯度下降法优化
    • AutoML等工具可以自动搜寻合适的结构

卷积神经网络的特点

  1. 从低层到高层,卷积、Pooling、Stride使得特征图的分辨率越来越低
    • 特殊情况(使用padding)例外,输入与输出的特征图分辨率相同
  2. 从低层到高层,特征图的通道数目通常越来越多
  3. 低层神经元感受野比较小(提取局部特征)
    • 提取底层特征(边缘)
  4. 高层神经元的感受野越来越大(提取全局特征)
    • 组合底层特征
    • 提取的特征越来越高级(目标、语义)
  5. Pooling会造成特征定位不准确

2. 经典模型

  • 分类
    • VGGNet
    • ResNet
  • 分隔
    • UNet
    • DeepLab
  • 检测
    • YOLO
    • Faster RCNN

2.1 分类模型

输入图像往往仅包含一个物体,目的是判断每张图像是什么物体,是图像级别的任务,相对简单,发展最快。

VGGNet

Very Deep Convolutional Networks for Large-Scale Image Recognition——用于大规模图像识别的深度卷积网络

VGG是Oxford的Visual Geometry Group的团队在ILSVRC 2014上的相关工作。2014年ImageNet大规模视觉挑战赛,定位赛道冠军分类赛道亚军

主要工作:研究了卷积网络深度对其精度在大规模图像识别环境中的影响。

主要贡献:使用具有非常小的(3×3)卷积滤波器的体系结构对增加深度的网络进行了彻底的评估,这表明通过将深度推进到16-19个权重层可以实现对现有技术配置的显著改进。

相比于 LeNet 网络,VGG 网络的一个改进点是将大尺寸的卷积核用多个小尺寸的卷积核代替。

LeNet是一个 7 层的神经网络,包含 3 个卷积层,2 个池化层,1 个全连接层。其中所有卷积层的所有卷积核都为 5x5,步长 strid=1,池化方法都为全局 pooling,激活函数为 Sigmoid。

这样做的好处:

  • 在保证相同感受野的情况下,多个小卷积层堆积可以提升网络深度,增加特征提取能力(非线性层增加)。
  • 参数更少。比如 1个大小为5的感受野等价于2个步长为1,3×3大小的卷积核堆叠。(即1个5×5的卷积核等于2个3×3的卷积核)。而1个5X5卷积核的参数量为 5×5×C。而2个3×3卷积核的参数量为 2×3×3×C。很显然,18C < 25C。
  • 3×3卷积核更有利于保持图像性质。

VGG16:包含16个隐藏层(13个卷积层+3个全连接层),左图D列。
VGG19:包含19个隐藏层(16个卷积层+3个全连接层),左图E列。

VGG优点

  • VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3×3)和最大池化尺寸(2×2)。
  • 几个小滤波器(3×3)卷积层的组合比一个大滤波器(5×5或7×7)卷积层好:
  • 验证了通过不断加深网络结构可以提升性能。

VGG缺点

  • VGG耗费更多计算资源,并且使用了更多的参数(这里不是因为3×3卷积),导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层。VGG有3个全连接层。

ResNet

Deep Residual Learning for Image Recognition——深度残差学习在图像识别中的应用

ResNet取得了在ILSVRC和COCO 2015上的5项第一,并又一次刷新了CNN模型在ImageNet上的历史:

ResNet的一个重要设计原则是:当feature map大小降低一半时,feature map的数量增加一倍,这保持了网络层的复杂度。

ResNet网络结构:

Res2Net

Res2Net: A New Multi-scale Backbone Architecture——Res2Net:一种新的多尺度骨干网体系结构

动机:

  1. 多尺度表示对于各种视觉任务至关重要,例如感知目标对象的边界,区域和语义类别。
  2. 感知不同比例尺的信息对于理解目标物体。
  3. 大多数现有方法以分层的方式表示多尺度特征。

主要思想:在更细粒度的层次上提高了多尺度表示能力,并非和现有方法一样用不同分辨率的特征来提高多尺度能力,而是更细粒度的多个可用感受野。

实现:用一组较小的滤波器组替换n个通道的3×3滤波器,每个滤波器组有w个通道。
这些滤波器组以分层类似残差样式的连接,以增加尺度表示输出特征。

与ResNet的不同:就是将原来的resnet中间的3x3卷积换成了右侧切片处理的形式。最少是不经过3x3卷积,直接连接,最多会经过3个3x3的卷积,从而增加感受野。

在ImageNet数据集的top-1和top-5测试错误率。由表可看出Res2Net性能更优。

为了证明不同scale的有效性,下表显示了ImageNet数据集上具有不同scale的Res2Net-50的Top-1和Top-5测试误差(%)。w为各scale的通道数,s为scale。由表可看出,网络的性能随着scale的增加而增加。

Res2Net是一个一个简单而高效的模块,以在更细粒度的水平上进一步探索CNN的多尺度能力。Res2Net揭示了一个新的维度,即“Scale”,这是除了现有的深度、宽度维度之外的一个基本和更有效的因素。Res2Net模块可以与现有最先进的方法集成。
Res2Net模块在以上视觉任务中均表现出良好的性能。

2.2 分割模型

与分类不同的是,分割需要判断图像每个像素点的类别,进行精确分割。图像分割是像素级别的。

但是由于CNN在进行convolution和pooling过程中丢失了图像细节,即feature map size逐渐变小,所以不能很好地指出物体的具体轮廓、指出每个像素具体属于哪个物体,无法做到精确的分割。

FCN

与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN对图像进行像素级的分类。

FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 接着在上采样的特征图上进行逐像素分类。最后逐个像素计算softmax分类的损失, 相当于每一个像素对应一个训练样本。

FCN网络图:

FCN与CNN的区别在于把CNN最后的全连接层换成卷积层,输出的是一张已经Label好的图片。

较浅的卷积层感知域较小,学习到一些局部区域的特征;较深的卷积层具有较大的感知域,能够学习到更加抽象一些的特征。这些抽象特征对物体的大小、位置和方向等敏感性更低,从而有助于识别性能的提高。

通过融合来自不同跨度的层的信息来精炼完全卷积网络,提高了分割细节。前三张图片显示了32、16和8像素步幅网络的输出。

FCN的缺点

  • 得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。
  • 对各个像素进行分类,没有充分考虑像素与像素之间的关系,缺乏空间一致性

U-Net

U-Net: Convolutional Networks for Biomedical Image Segmentation——U-Net:用于生物医学图像分割的卷积网络

Unet 的初衷是为了解决生物医学图像方面的问题,由于效果确实很好后来也被广泛的应用在语义分割的各个方向。

Unet 跟 FCN 都是 Encoder-Decoder 结构,结构简单但很有效。

网络结构:

首先进行Conv+Pooling下采样;然后Deconv反卷积进行上采样,crop之前的低层feature map,进行融合;然后再次上采样。重复这个过程,直到获得输出388x388x2的feature map,最后经softmax获得output segment map。总体来说与FCN思路非常类似。

Unet与FCN的不同U-Net采用了与FCN完全不同的特征融合方式:拼接(Concatenate)

语义分割网络在特征融合时有2种办法:

  • FCN式的逐点相加,torch.sum()
  • U-Net式的channel维度拼接融合,torch.cat()

基于CNN的图像语义分割的基本方法:

  • 下采样+上采样:Convlution + Deconvlution/Resize
  • 多尺度特征融合:特征逐点相加/特征channel维度拼接
  • 获得像素级别的segamentation map:对每一个像素点进行判断类别

2.3 检测模型

输入图像中往往有很多物体,目的是判断出物体出现的位置与类别,是计算机视觉中非常核心的一个任务。

Faster R-CNN

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks——Faster R-CNN: 利用RPN进行实时目标检测

Faster RCNN包含4个主要内容:Conv layers、Region Proposal Networks (RPN)、Roi Pooling、Classification

  • Conv layers:作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础conv+relu+pooling:该层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
  • Region Proposal Networks:RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
  • Roi Pooling:该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
  • Classification:利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

网络结构

网络的整个流程:

  1. 主干先提取特征
  2. 将最后一层的特征送入RPN网络中,首先生成对应的base anchor,经过rpn细化(就是进行二分类,保留前景anchor)生成对应的proposal。
  3. proposal的尺寸是相对于输入特征M×N的,在送入ROI Pooling层之前先要根据img imfo进行下采样到和Conv5_3一样的分辨率大小,也就是M/16 N/l16。再和Conv5_3输出的feature一起送入ROI Pooling得到尺寸一致的proposal features。
  4. 将proposal features送入分类回归层进一步修正回归框以及nms筛选完成检测。

`