从很多地方合并成这样一篇笔记,以备自己查询使用,侵删。
基本结构:卷积+池化+激活+全连接层
多尺度特征,我的理解是在不同的卷积层都会有这个尺度的一个特征,约卷积,特征尺度越高,抽象程度和整体感越强。
FLOPs,floating-point operations per second,每秒浮点运算数。
全连接层,将一个平面或者立体的结构形成一个数据点(一个标量数据),比如是5 * 5的一个矩阵,就使用一个5 * 5的参数矩阵去进行点乘。如果是3 * 5 * 5,那么就使用一个3 * 5 * 5的立体参数矩阵去进行点乘。然后这个输出层的个数可以根据业务来确定,根据神经网络的基本结构形成全连接结构。一般用于最后的分类(每个输出需要使用到每个feature map的信息,所以做全连接)。
BN(Batch Normalization, 批量归一化),https://zhuanlan.zhihu.com/p/24810318
池化层(Pooling layer), 增加感受野,例如一个40 * 40的图像,可以将其分成4份,每份是一个20 * 20的小图像,然后对其进行计算:
就可以形成一个2 * 2的小矩阵,相当于这个矩阵提取这个区域的高级特征信息,这个2 * 2的矩阵可以称为特征图(feature map),用一个2 * 2感受到了40 * 40的范围。
LRN(Local Response Normalization, 局部响应归一化),一般是在激活、池化后进行的一种处理方法。首次在AlexNet模型中提出这个概念,通过实验确实证明它可以提高模型的泛化能力,但是提升的很少,饱受争议。
基本逻辑:对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。LRN通过在相邻卷积核生成的feature map之间引入竞争,从而有些本来在feature map中显著的特征在A中更显著,而在相邻的其他feature map中被抑制,这样让不同卷积核产生的feature map之间的相关性变小。
backbone,一般的网络都会有一个提取卷积特征的基础网络,在这个基础网络上再增加各种各样的结构。这个基础网络一般可以称作backbone,很多都是使用类似VGG,ResNet这样的。
relu层,一个非线性激活函数,类似sigmond函数,只不过形式是:
f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
梯度就是参数变化的速度。
靠近输出层的hidden layer 梯度大,参数更新快,所以很快就会收敛;
而靠近输入层的hidden layer 梯度小,参数更新慢,几乎就和初始状态一样,随机分布。
在上面的四层隐藏层网络结构中,第一层比第四层慢了接近100倍!!
这种现象就是梯度弥散(vanishing gradient problem)。而在另一种情况中,前面layer的梯度通过训练变大,而后面layer的梯度指数级增大,这种现象又叫做梯度爆炸(exploding gradient problem)。
总的来说,就是在这个深度网络中,梯度相当不稳定(unstable)。
LeNet,AlexNet,VGG,GoogLeNet,ResNet,DenseNet,MobileNet
LeNet,最古老,确立CNN基础的网络,1994年提出。《Gradient-Based Learning Applied to Document Recognition》
AlexNet,Hinton,论文《ImageNet Classification with Deep Convolutional Neural Networks》
VGG网络,Visual Geometry Group在2014年参加ImageNet比赛时的第二名,结构简单。有VGG-16和VGG-19两种。
GoogleNet,2014年ImageNet第一名,和VGG一起出来的,结构比VGG复杂。被成为Inception Net,总共有V1,V2,V3,V4, Xception等版本
ResNet,提出的残差结构大幅提高了神经网络的拟合能力。2015年,在同年的 ILSVRC 和 COCO 竞赛横扫竞争对手,分别拿下分类、定位、检测、分割任务的第一名。
包含两个任务:定位(localization)和分类(classification)。根据分类的类型数目可分为single object和multiple object。
mAP,平均精度。
IoU,交并比,预测的位置与真实位置的重复度。相交的区域面积除以合并的面积。
最早在Faster R-CNN中提出,在SSD、YOLOv2/v3中都得到了使用。Anchor box其实就是从训练集中将所有的矩形框的大小尺寸统计处最常出现的某几个矩形框,这里我们可以采用K-Means来得到。
可以帮助算法快速收敛。
分类和定位一把梭哈,YOLO & SSD系列。
YOLO网络 & YOLO9000,You Only Look Once: Unified, Real-Time Object Detection
YOLO没有显示地求取region proposal的过程,训练和检测均是在一个单独网络中进行。
将物体检测作为一个回归问题进行求解
网络结构,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值,网络借鉴了GoogLeNet分类网络结构。不同的是,YOLO未使用inception
module,而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。
YOLO网络最终的全连接层的输出维度是 SS(B*5 + C)
YOLO使用均方和误差作为loss函数来优化模型参数,即网络输出的SS(B5 + C)维向量与真实图像的对应SS*(B*5 + C)维向量的均方和误差。
特点:快/背景误检率低(不是针对某个RP,region proposal),所以误检率低。
精准性 & 召回率低。
SSD,Single Shot MultiBox Detector。2016,Wei Liu。
分为两个阶段,一个region proposal阶段,也就是挑选候选框;然后针对候选框区域进行分类,对候选框位置进行回归调整。
两个任务:分类问题与回归问题,确认bounding box(位置)
RCNN系列:Region CNN。
RCNN/Fast RCNN/Faster RCNN/Mask RCNN
RCNN
(1)输入测试图像;
(2)利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal;
(3)将每个Region Proposal缩放(warp)成227*227的大小并输入到CNN,将CNN的fc7层的输出作为特征;
(4)将每个Region Proposal提取的CNN特征输入到SVM进行分类;
(5)对于SVM分好类的Region Proposal做边框回归,用Bounding box回归值校正原来的建议窗口,生成预测窗口坐标.
缺陷:
(1) 训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练边框回归器;
(2) 训练耗时,占用磁盘空间大;5000张图像产生几百G的特征文件;
(3) 速度慢:使用GPU,VGG16模型处理一张图像需要47s;
(4) 测试速度慢:每个候选区域需要运行整个前向CNN计算;
(5) SVM和回归是事后操作,在SVM和回归过程中CNN特征没有被学习更新.
FAST-RCNN
(1)输入测试图像;
(2)利用selective search 算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal);
(3)将整张图片输入CNN,进行特征提取;
(4)把建议窗口映射到CNN的最后一层卷积feature map上;
(5)通过RoI pooling层使每个建议窗口生成固定尺寸的feature map;
(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.
相比R-CNN,主要两处不同:
(1)最后一层卷积层后加了一个ROI pooling layer;
(2)损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练
改进:
(1) 测试时速度慢:R-CNN把一张图像分解成大量的建议框,每个建议框拉伸形成的图像都会单独通过CNN提取特征.实际上这些建议框之间大量重叠,特征值之间完全可以共享,造成了运算能力的浪费.
FAST-RCNN将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入建议框信息,使得在此之前的CNN运算得以共享.
(2) 训练时速度慢:R-CNN在训练时,是在采用SVM分类之前,把通过CNN提取的特征存储在硬盘上.这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练速度缓慢.
FAST-RCNN在训练时,只需要将一张图像送入网络,每张图像一次性地提取CNN特征和建议区域,训练数据在GPU内存里直接进Loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储在硬盘上.
(3) 训练所需空间大:R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间.FAST-RCNN把类别判断和位置回归统一用深度网络实现,不再需要额外存储.
FATER-RCNN
(1)输入测试图像;
(2)将整张图片输入CNN,进行特征提取;
(3)用RPN生成建议窗口(proposals),每张图片生成300个建议窗口;
(4)把建议窗口映射到CNN的最后一层卷积feature map上;
(5)通过RoI pooling层使每个RoI生成固定尺寸的feature map;
(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.
我们先整体的介绍下上图中各层主要的功能
1)、Conv layers提取特征图:
作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取input image的feature maps,该feature maps会用于后续的RPN层和全连接层
2)、RPN(Region Proposal Networks):
RPN网络主要用于生成region proposals,首先生成一堆Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景(foreground)或者后景(background),即是物体or不是物体,所以这是一个二分类;同时,另一分支bounding box regression修正anchor box,形成较精确的proposal(注:这里的较精确是相对于后面全连接层的再一次box regression而言)
3)、Roi Pooling:
该层利用RPN生成的proposals和VGG16最后一层得到的feature map,得到固定大小的proposal feature map,进入到后面可利用全连接操作来进行目标识别和定位
4)、Classifier:
会将Roi Pooling层形成固定大小的feature map进行全连接操作,利用Softmax进行具体类别的分类,同时,利用L1 Loss完成bounding box regression回归操作获得物体的精确位置.
相比FASTER-RCNN,主要两处不同:
(1)使用RPN(Region Proposal Network)代替原来的Selective Search方法产生建议窗口;
(2)产生建议窗口的CNN和目标检测的CNN共享
改进:
(1) 如何高效快速产生建议框?
FASTER-RCNN创造性地采用卷积网络自行产生建议框,并且和目标检测网络共享卷积网络,使得建议框数目从原有的约2000个减少为300个,且建议框的质量也有本质的提高.
个人理解,进入RPN网络后,特征图再经过一次3*3的卷积,再分别经过一个1 * 1的卷积再次形成两个不同的特征图。这个特征图中的每个像素都会作为一个中心点base_anchor,根据这个base_anchor生成9个anchor box,这些个anchor box再分成两路进行处理。
上面的一条: RPN网络中的上面一条是一个二分类网络,是背景还是非背景,如果是背景的话会去除掉。这些anchor box就会分成两类。
下面的一条,每个anchor box都会有4个数字,就是x, y, w, h。通过回归计算(标签数据)来调整这些。
最终形成一个proposal的五元组(x, y, w, h, c-置信度)
ROIPooling: 这层输入的是RPN层产生的region proposal(假定有300个region proposal box)和VGG16最后一层产生的特征图(60 * 40 * 512-d),这层输入的是RPN层产生的region proposal(假定有300个region proposal box)和VGG16最后一层产生的特征图(6040 512-d),遍历每个region proposal,将其坐标值缩小16倍,这样就可以将在原图(1000600)基础上产生的region proposal映射到6040的特征图上,从而将在feature map上确定一个区域(定义为RB)。
在feature map上确定的区域RB,根据参数pooled_w:7,pooled_h:7,将这个RB区域划分为7 * 7,即49个相同大小的小区域,对于每个小区域,使用max pooling方式从中选取最大的像素点作为输出,这样,就形成了一个7 * 7的feature map。
最后的一层:
即从PoI Pooling获取到7x7大小的proposal feature maps后,通过全连接主要做了:
4.1)通过全连接和softmax对region proposals进行具体类别的分类
4.2)再次对region proposals进行bounding box regression,获取更高精度的rectangle box
Mask R-CNN,除了和Faster R-CNN相同的部分外,增加了一个全卷积网络的分支,对每个RoI预测了对应的二值掩膜(binary mask),以说明给定像素是否是目标的一部分。从而达到分割的目的。
Detectron & Detectron 2。平台,框架。
把不同种类的object用不同颜色分割出来。将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类。2014 年Jonathan Long 等人 首次使用全卷积神经网络对自然图像进行端到端分割,语义分割才产生了大的突破。
FCN,Unet , Segnet,RefineNet,PSPNet,Deeplab v1&v2&v3、ERFNET
上采样:上采样有3种常见的方法:双线性插值(bilinear),反卷积(Transposed Convolution),反池化(Unpooling)。
反卷积,也称为转置卷积。反卷积是一种特殊的正向卷积,先按照一定的比例通过补0来扩大输入图像的尺寸,接着旋转卷积核,再进行正向卷积。反卷积的数学推导可以参照https://zhuanlan.zhihu.com/p/48501100。相当于可以求一个转置矩阵。
线性插值,就是利用几何关系通过已知点的数值来计算线性空间内的值,常见的插值方法包括二次线性插值和三次线性插值,二次线性插值就是利用四个点来对矩形空间内的点进行估计,三次线性插值同理,不过使用八个点。
反池化,用的较少。在SegNet中看到过,他使用的方法使用了“最大池化索引”,也就是在池化的时候记录池化滑窗中最大值的位置,然后在恢复的时候在还原的时候只使用记录的最大值(相当于就是把最大值的坐标记下来,其他部分填0)。
空洞卷积
下图是标准卷积:
空洞卷积,感觉类似跳过一些像素进行卷积:
金字塔池化:
如图所示,对于选择的不同大小的区域对应到卷积之后的特征图上,得到的也是大小不一致的特征图区域,厚度为256,对于每个区域(厚度为256),通过三种划分方式进行池化:
(1)直接对整个区域池化,每层得到一个点,共256个点,构成一个1x256的向量
(2)将区域划分成2x2的格子,每个格子池化,得到一个1x256的向量,共2x2=4个格子,最终得到4个1x256的向量
(3)将区域划分成4x4的格子,每个格子池化,得到一个1x256的向量,共4x4=16个格子,最终得到16个1x256的向量
将三种划分方式池化得到的结果进行拼接,得到(1+4+16)256=21256的特征。
由图中可以看出,整个过程对于输入的尺寸大小完全无关,因此可以处理任意尺寸的候选框。
FCN,Fully Convolutional Networks for Semantic Segmentation。通过上采样把VGG这种的最后的全连接层改掉,比如VGG是一个4096的向量,这一层不要了,换成一个从featureMap上采样成原图大小的图像,再通过每个图像的像素点做softmax分类,所以能对每个像素进行分类。
解码器,各种卷积+池化相当于编码,把尺寸越变越小,后面的上采样就相当于是一个解码器了。
SegNet, A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation。SegNet 的新颖之处在于解码器对其较低分辨率的输入特征图进行上采样的方式。就是使用反池化,一般不用这种方式(记录最大池化的最大值的位置,然后在反池化的时候填进去,其他位置填0)。
U-Net,Convolutional Networks for Biomedical Image Segmentation。
每次卷积(编码)之后的特征图,都应用在解码过程中(跳跃拼接连接的架构,在每个阶段都允许解码器学习在编码器池化中丢失的相关特征)。
DeepLab V1/V2/V3,Semantic Image Segmentation with deep convolutional nets and fully connected CRFs。空洞卷积/ CRF(条件随机场)
Fully Convolutional DenseNet, The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation。使用DenseNet作为编码器
E-Net & Link-Net,ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation & LinkNet: Feature Forwarding: Exploiting Encoder Representations for Efficient Semantic Segmentation。
Mask R-CNN,流行的 Faster R-CNN 架构的扩展,在其基础上进行必要的修改,以执行语义分割。
PSPNet,PSPNet: Pyramid Scene Parsing Network。引入空洞卷积来修改基础的 ResNet 架构;在修改后的 ResNet 编码器顶部的空间金字塔池化聚合全局上下文;在 ResNet 的中间层中引入辅助损失,以优化整体学习。
RefineNet,RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation。ResNet作为基础卷积层。
G-FRNet,G-FRNet: Gated Feedback Refinement Network for Dense Image Labeling
DecoupledNet,半监督语义分割,Decoupled Deep Neural Network for Semi-supervised Semantic Segmentation。