基于深度学习的目标检测的更新迭代总结(持续更新ing)

RCNN的流程

  1. Selective Search做候选框提取,1000~2000个
  2. 候选框Resize到固定大小,输入CNN提取特征
  3. 特征直接进行SVM分类,得到分类结果
  4. 进一步进行调整位置

SPPNet的创新点

  1. 结合空间金字塔方法实现CNNs的多尺度输入。
    SPP Net的第一个贡献就是在最后一个卷积层后,接入了金字塔池化层,保证传到下一层全连接层的输入固定。换句话说,在普通的CNN机构中,输入图像的尺寸往往是固定的(比如224*224像素),输出则是一个固定维数的向量。SPP Net在普通的CNN结构中加入了ROI池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。简言之,CNN原本只能固定输入、固定输出,CNN加上SSP之后,便能任意输入、固定输出
    ROI池化层一般跟在卷积层后面,此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出则是固定维数的向量,然后给到全连接FC层。

  2. 只对原图提取一次卷积特征
    在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。
    而SPP Net根据这个缺点做了优化:只对原图进行一次卷积计算,便得到整张图的卷积特征feature map,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层,完成特征提取工作。

    如此这般,R-CNN要对每个区域计算卷积,而SPPNet只需要计算一次卷积,从而节省了大量的计算时间,比R-CNN有一百倍左右的提速。

  3. 特意说明下:fast rcnn中的spplayer(ROI Pooling),最后输出维度一致是因为是一维线性直接进行的拼接(后面会用到FC);yolov3及后系列的spplayer,输出后维度一致是因为在不同核大小池化过程中,采用的是步长s=1,padding=k//2,最后得到WH_out = k+1尺度的特征。两者的用途不一,前者是为了解决任意输入固定输出的问题,后者为了提升小目标检测能力等问题。

Fast RCNN的流程

  1. Selective Search做候选框提取,1000~2000个

  2. 计算整张图像的特征shared feature map,并将候选框(ROI,感兴趣区域)映射到对应的shared feature map(New

    :映射规则比较简单,就是把各个坐标除以“输入图片与feature map的大小的比值”,得到了feature map上的box坐标

  3. 利用ROI Pooling调整到固定尺寸的特征(New

  4. 将特征送入CNN提取新特征

  5. 分类和回归两个损失同时进行监督训练(全连接)(New

  • ROI Pooling操作

    1. 根据输入image,将ROI映射到feature map对应位置

    2. 将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同)

    3. 对每个sections进行max pooling操作,得到batch×channel×W×H维度的特征

Faster RCNN的流程

  1. 计算整张图像的特征feature map
  2. 将特征送入RPN网络,回归一系列候选框的信息(目标+坐标,k个锚框),这里需要做回归训练(New
  3. 利用ROI Pooling调整到固定尺寸的特征
  4. 将特征送入CNN(FC)提取新特征
  5. 分类和回归两个损失同时进行监督训练(全连接)

SSD的创新点

  1. 使用 VGG16 网络作为特征提取器(和 Faster R-CNN 中使用的 CNN 一样),将后面的全连接层替换成卷积层,并在之后添加自定义卷积层,并在最后直接采用卷积进行检测。

  2. 不同于Faster R-CNN只在最后一个特征层取anchor, SSD在多个特征层上取default box,可以得到不同尺度的default box

  3. 在特征图的每个单元上取不同宽高比的default box,一般宽高比在{1,2,3,1/2,1/3}中选取,有时还会额外增加一个宽高比为1但具有特殊尺度的box

  4. 为了使正负样本尽量均衡(一般保证正负样本比例约为1:3),SSD采用hard negative mining, 即对负样本按照其预测背景类的置信度进行降序排列,选取置信度较小的top-k作为训练的负样本。

  5. Q1,如何设置default boxes Q2,怎样对先验框进行匹配 Q3,怎样得到预测的结果

YOLOv1(将检测任务当作回归任务)

  1. 网络结构:24个卷积+2个全连接(图像位置+类别概率)
  2. 输入:1x3x448x448尺度图像
  3. 输出:7 × 7 × 30的尺度,30=20+(4+1)*2,20 为类别数,4为位置,1为score置信度
  4. 损失函数:分为坐标预测、含有物体的边界框的confidence预测(权重较高)、不含有物体的边界框的confidence预测(权重较小)、分类预测四个部分,使用的是L2损失

YOLOv2创新点

  1. DarkNet作为主干网络
  2. 引入Anchor机制,避免了YOLOv1中全连接直接回归结果导致的信息丢失的问题,使用K-means聚类
  3. 引入BathNormalization,起到一定提升模型收敛速度的作用,防止模型过拟合
  4. 使用高分辨率网络输入
  5. 使用anchor中坐标中心和偏移量来直接回归预测目标的位置
  6. 借鉴SSD使用多尺度的特征图来做检测
  7. 多尺度训练,尺度大的预测效果好
  8. 移除最后一个卷积层、global avgpooling层以及softmax层,并且新增了三个 3 × 3 × 2014 3\times 3 \times 2014 3×3×2014卷积层,同时增加了一个passthrough层,最后使用 1 × 1 1\times 1 1×1卷积层输出预测结果

YOLOv3创新点

  1. 使用新的主干网络Darknet-53(引入残差块,53个卷积层)
  2. 使用FPN做多尺度预测
  3. 使用逻辑回归来代替Softmax做分类器

YOLOv4创新点

  1. 输入端:新增了数据增强例如CutMix和Mosaic
  2. 主干网络:CSPDarkNet-53,Mish激活函数,DroupBlock
  3. 颈部网络:空间金字塔池化SPP,路径聚合PAN,特征金字塔网络FPN
  4. 头部网络:CIoU损失,DIoU_NMS

RetinaNet创新点:

  1. 作者对One-stage系列算法进行研究发现了类别不平衡问题,对此提出Focal Loss,是对损失函数进行的改进,one-stage结合Focal Loss结合得到的网络是RetinaNet

  2. 什么是类别不均衡(class imbalance)?

    答:负样本的数量极大于正样本的数量,比如包含物体的区域(正样本)很少,而不包含物体的区域(负样本)很多。比如检测算法在早期会生成一大波的bbox。而一幅常规的图片中,顶多就那么几个object。这意味着,绝大多数的bbox属于background。简单来说,因为bbox数量爆炸。 正是因为bbox中属于background的bbox太多了,所以如果分类器无脑地把所有bbox统一归类为background,accuracy也可以刷得很高。于是乎,分类器的训练就失败了。分类器训练失败,检测精度自然就低了。

    Focal Loss的定义,引入了modulating factor即 ( 1 − p t ) γ (1-p_t)^\gamma (1pt)γ p t p_t pt反应了分类的难易程度

F L ( p t ) = − ( 1 − p t ) γ log ⁡ ( p t ) FL(p_t) = -(1-p_t)^\gamma \log(p_t) FL(pt)=(1pt)γlog(pt)

  1. RetinaNet = ResNet + FPN + Two sub-networks + Focal Loss

你可能感兴趣的:(论文学习总结,目标检测,深度学习,目标检测,计算机视觉)