CV模型消化与提炼

ShuffleNet v1 2017 旷视 轻量级可用于移动设备

  • 定位就是轻量化的网络
  • PK:本文pointwise group convolution,之前是pointwise conv,加了group可以进一步减小计算量,当然准确率会降低,为了对抗降低,所以才提出了channel shuffle。
  • channel shuffle. 不加的话group与group之间的几乎没有联系,加了的话,加强了channel之间的额联系
  • 网络有什么可说的
    • 残差的部分不变。所以降采样之后,该怎么办
    • 与谁对比:separable conv的depthwise conv + pointwise conv. 注意depthwise不改变通道数,但是能聚合周围信息,pointwise conv不聚合周围信息,完全是基于本地信息做升维与降维。
    • shuffleNet是先1x1的分组卷积,再channel shuffle,再3x3的depthwise conv,然后又一个1x1的分组, 然后还有一个resiual连接。shuffleNet在residual那条路线会有所不同,因为是否降采样导致的。
    • group是多点好,还是少点好?该沦为说多点好,但是给的数据是6个group。不过group之后


      image.png

ShuffleNet V2

  • 重点是多了个channel split,去掉了group conv。而channel shuffle也从block里面改到concat之后了。
  • 提出来的重点概念是内存访问时间。对元素级操作,以及网络过于碎片化,的时间消耗做了实验。1x1卷积平衡输入和输出的通道大小;组卷积要谨慎使用,注意分组数;避免网络的碎片化;减少元素级运算如add变成concat。


    image.png

Depthwise Convolution && Pointwise Convolution && Separable Convolution

  • Separable Convolution = depthwise conv + pointwise conv
  • depthwise conv 的意思是conv的一个channel经depthwise conv得到一个新的channel。depthwise conv有kernelsize
  • pointwise conv的 意思是kernelsize为1x1. 就理解为1x1的卷积就好,完全为了改变维度,升维降维,或者表达为就是用来改掉channel数量。
  • 其他知识点就是参数量的计算了

SSD Single Shot MultiBox Detector 2016年的

  • 当时的效果。相比Faster RCNN有明显的速度优势,相比YOLO又有明显的mAP优势(不过已经被CVPR 2017的YOLO9000超越)
  • backbone 或者叫base 原论文里用的是vgg16去掉全连接层.
  • 与yolov3的不同是将classification的head和regression的head分别放在了两个不同的分支里面。这样的话使得两方面的
  • 与yolo的另一个不同事yolo将网格最后划分在7x7 13x13 这样的单数的网络里,因为yolo觉得中间的grid cell 可以负责全局的。而SSD则是8x8这样的偶数的形式进行网格化。
  • 先验框:可以叫做priorbox/default box/anchor box。anchor的尺度和比例是特意设计出来的,均匀排布的。
  • 其余的地方虽然文字表述方式不一样,但与yolo都是一样的。
  • SSD采用金字塔结构,即利用了conv4-3/conv-7/conv6-2/conv7-2/conv8_2/conv9_2这些大小不同的feature maps,在多个feature maps上同时进行softmax分类和位置回归
  • SSD 比第一版的yolo好的地方是:SSD是全卷积网络。yolo当时还有个全连接层,所以全卷积层也算是SSD的一个贡献。
  • SSD在当时的比yolo好的第2个地方就是加了anchor机制和金字塔,不同进行输出。
  • loss: IOU,
  • 将target box分配给相对应的anchor的过程与后期的yolo一样也是用的最大IOU
  • 后处理: log 与exp softmax
  • 当时的文章里面的SSD为什么比yolo快?SSD文章里说了他用的backbone是VGG16去掉全连接层,而YOLO第一版时卷积层有24个。

RCNN

rcnn对于原有的目标检测算法提升50% 在VGG-16网络模型下,voc2007数据集上准确率为66%,但是速度很慢,内存占用量大,主要原因为候选框由速度较慢的selective search算法完成以及重复卷积网络计算。

  • (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特征没有被学习更新.


image.png

FAST-RCNN:https://blog.csdn.net/sandwichsauce/article/details/88643663

  • (1)输入测试图像;
  • (2)利用selective search 算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal);
  • (3)将整张图片输入CNN,进行特征提取;
  • (4)把建议窗口映射到CNN的最后一层卷积feature map上;这是与RCNN不同的地方。因为RCNN是从原图中读取一个patchresize到227放进第2个卷积层里。
  • (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网络中训练
  • (3) 没有第二次卷积过程,而是直接share了第一次的卷积的feature vector
    改进:
  • (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把类别判断和位置回归统一用深度网络实现,不再需要额外存储.

Faster 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)联合训练.
    相比FASTER-RCNN,主要两处不同:
  • (1)使用RPN(Region Proposal Network)代替原来的Selective Search方法产生建议窗口;
  • (2)产生建议窗口的CNN和目标检测的CNN共享
    改进:
  • (1) 如何高效快速产生建议框?FASTER-RCNN创造性地采用卷积网络自行产生建议框,并且和目标检测网络共享卷积网络,使得建议框数目从原有的约2000个减少为300个,且建议框的质量也有本质的提高.
  • RPN层第一次提出来就是faster RCNN,在此之前的技术叫做selective search
    • RPN层。接受来自backbone的一个feature(13 * 13 * 256的),然后在这个feature的基础上产生两个分支cls和reg
  • 加入ROI池化 :提出ROI pooling池化层结构,解决了候选框子图必须将图像裁剪缩放到相同尺寸大小的问题;fast R-CNN在全连接层之前插入了ROI pooling层,从而不需要对图像进行裁剪,很好的解决了这个问题。
  • 多任务损失函数:将分类损失和边框定位回归损失结合在一起统一训练,最终输出对应分类和边框坐标。
  • Fast-RCNN = RCNN + SPPNET - Crop
  • 在问题的定义上。RCNN系列一直到fasterRCNN都是说比如有k类,每个类都预测两个神经元,分类出是前景还是不是前景。但是其实在yolov2开始,对这个分类的神经元看到的就是多分类问题的loss了。

Yolo-----1,2,3,4的变化

  • Yolo 没有anchor,而是直接分割成网格,yolov2开始引入anchor box。引入了anchor机制,在target box的分配阶段就开始有了IOU。
  • 有了anchor之后,就有了e(tw,ty)和sig(tx,ty)这样的操作了
  • Yolo是全连接。而SSD,V2,V3都是全卷积网络。
  • Yolo的时候box的计算用的是mean square error,其他两项obj和classification的loss在3版yolo中都没有体现变化。而v2和v3开始就引入了iou loss。到v4时候,关于此类已经发展出了ciou,diou,giou等多个iouloss计算方法,不止计算
  • 召回率。 yolo召回率比较低
  • BN: yolo没有,V2开始加入
  • backbone上面。
    • YOLO使用卷积层提取特征,使用全连接层预测输出值。网络架构借鉴GoogleNet,包括24层卷积层和2个全连接层。而且是一直就降采样下来的,feature pyramid这样的结构。
    • yolov2 的backbone被称为Darknet19.即19个卷积层和5个maxpooling层。但是yolov2到最底下在某些文章中发现其有个global avg pooling?那grid信息不就没了么?https://blog.csdn.net/weixin_42111770/article/details/88092742而且yolov2有多尺度机制,13x13和26x26的,但不是经由下采样再上采样这样的FPN结构。
    • backbone叫Darknet 53 是在Darknet19的基础上加上了resnet的结构。而且多尺度进一步增加13x13,26x26,52x52。非常好的一点是这些多尺度是FPN结构得到的了。

以下总结,别人现成的,但不是目标检测任务。

leNet - AlexNet - VGG / GoogleNet(Inception) - resNet - denseNet - 剪枝
【leNet】1998

经典的5层网络:( 卷积 + tanh + 池化) * 2 + 全连接 120 + 全连接 84 + outPut 10 (MNIST)

首次使用卷积代替全连接。卷积:pattern匹配 、局部连接、参数共享、平移等变

引入了最大池化提取特征 2x2 ,少量平移不变性。

【AlexNet】2012 ImageNet

网络更深:5个卷积层 + 3个全连接层

四个网络重点:

1、使用非饱和神经元relu,代替sigmoid,速度快

2、双GPU

3、添加了归一化LRN(local response normalization,局部相应归一化)层,提高泛化能力。

4、pooling overlap

过拟合解决:

增强数据:反射,旋转

加入dropout

将图像分为上下两部分,全连接合并在一起

【VGG】 2014 ImageNet

关键点:

用更深的网络表达特征,

提出3x3的卷积核,大卷积核可以通过小的+多层实现,非线性描述更多,参数更少。

提出1x1的卷积核,升维、降维、通道之间信息交换、增加非线性。

LRN / overlapPooling没用,

多尺度:裁剪到一个随机大小,再随机取其中的 224 x 224 的照片

参数爆炸多,大概有134m辣么多。 奇怪的是只用了74个epoch就训练好了,比AlexNet的90个还要少。

【GoogLeNet】2014 ImageNet 分类

V1

引入Inception,(11, 33, 55, 33maxPooling), 加入了好多个inception层,同时使用了不同的卷积核,从加深到加宽。

用GlobalAvgPool去代替全连接层,最终留下了一层方便做finetune的全连接层。

加了两个softmax分支,1是避免梯度消失(太深了),2是搞一个简单模型用于模型融合。

V2

用两个3x3代替了5x5

首次使用BN进行了正则化。

V3

使用 Factorization into small convolutions 的思想,将 7x7 的搞成 1x7 的和 7x1 的。

降低了参数量,能处理更加丰富的空间特征。

【resNet】

不是过拟合问题,不是梯度消失 、 梯度爆炸的问题: 之前的做法 BN, Relu。

主要解决的是神经网络退化的问题。

网络深度虽然有,但是实际表达不出来。

1、我们甚至不能很好的表达linear, relu会损失一些信息,不能从输出反推输入。那就直接加入linear

2、在某些层秩很小,越深就越难改变。

3、层之间的相关性随着层数增加持续衰减 甚至指数衰减。

空间 、 深度不一致问题: 空间不一致 加个weight / 深度不一致 加个1x1卷积核

使用global avg pooling代替全连接。

【denseNet】

将所有的 input 做concat, 然后经过Hl函数(BN relu 3x3卷积)

后续发展:

在denseNet上面剪枝。

你可能感兴趣的:(CV模型消化与提炼)