深度学习 物体检测 知识点

一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
从RCNN到SSD,这应该是最全的一份目标检测算法盘点

模块:
  • 提取物体区域 Region Proposal
  • 对区域进行分类识别 Classification

R-CNN

论文翻译
R → Region (2014 AlexNet)
区域建议:Selective Search 也用的是DNN方法
Bounding Box Regression:细化SS给出的外接矩形

  • ss获取区域
  • bounding box 膨胀 16像素 并且scale到 227 x 227
  • AlexNet Fc7 (即第二个全连接层) 作为特征输出 (4096D) (需要fine tune)
  • 每个分类都是一个线性SVM二分类器
  • BBR 基于Conv5的输出特征, 一个分类一个回归模型
训练第一阶段:训练CNN

一般拿ImageNet上训练好的CNN模型参数作为pre-train(尤其是conv层,特征提取基本成型)
然后用SS生成的区域做 fine tune

AlexNet最后一个Softmax层是1000D,要改成实际数据集物体分类数量 + 1 (一个是背景类)

正样本 : IoU>0.5 BB与ground truth的重合度
负样本:IoU<0.5

训练第二阶段:训练分类器

在FC7的基础上训练SVM分类器 (之后会用其他分类器,所以不用详细展开了)
Hinge loss
正样本: 所有 ground truth区域
负样本 IoU < 0.3

训练第三阶段: Bounding Box Regression

conv5的输出作为输入
对框进行微调,来提升bounding-box的IoU


bbr

其中P是原始proposal,G是Ground Truth,G拔是找到映射之后矫正得到的窗口。因此更加直接地说,我们就是要找到一种映射关系,来出一个G拔。

测试阶段
  • SS
  • 227 x 227
  • fc7 → 分类器 → 输出类别
  • 每个分类下的区域做非极大值抑制 (所有区域分值从大到小排列,提出与最大分值区域IoU>0.5的区域)
  • conv5 → bbr → bbr偏差
  • 修正区域

性能评价

每个分类计算AP,然后取均值
AP是准确-召回曲线下的面积

速度很慢,测试时间几十秒,训练时间84小时

问题:卷积特征重复计算量太大,每张图片的2000+区域都会计算CNN特征

SPP-Net

SPPNet详解
共享卷积计算,直接输入整图

conv5之后引入空间金字塔池化 Spatial Pyramid Pooling ,为不同尺寸的区域隐射到尺寸固定的FC层上。
总结而言,当网络输入的是一张任意大小的图片,这个时候我们可以一直进行卷积、池化,直到网络的倒数几层的时候,也就是我们即将与全连接层连接的时候,就要使用金字塔池化,使得任意大小的特征图都能够转换成固定大小的特征向量,这就是空间金字塔池化的意义(多尺度特征提取出固定大小的特征向量)。

SPP, 特征图可以是不同尺寸的

image → conv → spp → fc → output

训练阶段

conv不参与fine-tune, 只fine tune FC层

新问题

卷积层不参与fine-tune

Fast R-CNN

论文详解
论文详解2

  • end-to-end 单阶段训练 多任务损失函数
  • 所有参数都能fine tune
  • RoI 池化层: 其实就是一个单层4x4的金字塔(VGG版用的7x7)、单层的SPP。ROI梯度回传的时候,重叠区域的偏导等于多个区域偏导之和。
  • 区域建议还是单独的模块


    FAST R-CNN

Faster R-CNN

推荐博文
RPN解析
集成区域建议网络 RPN region proposal network

anchors

一些预设大小的框,三种尺寸,三种比例,一共9种anchor
假设CNN得到的feature map大小为w∗h,那总的anchors个数为9∗w∗h


faster RCNN

Faster RCNN

RPN其实是个attention机制

  • 训练RPN
  • 训练 Fast R-CNN
  • 优化RPN
  • 调优 Fast R-CNN

R-FCN

Fully Convolutional Network
推荐博文
全卷积趋势,只留下一个全连接层 2048 → 1000
之前检测网络的局限性:卷积层越深,不变性越强,也就是说对变换不敏感

  • 提出全卷积化
  • 位置敏感分值图 (其实就是个卷积层,只是通道数量进行了特殊的设计)
  • 位置敏感池化

平移可变性解释
平移不变性比较好理解,在用基础的分类结构比如ResNet、Inception给一只猫分类时,无论猫怎么扭曲、平移,最终识别出来的都是猫,输入怎么变形输出都不变这就是平移不变性,网络的层次越深这个特性会越明显。平移可变性则是针对目标检测的,一只猫从图片左侧移到了右侧,检测出的猫的坐标会发生变化就称为平移可变性。当卷积网络变深后最后一层卷积输出的feature map变小,物体在输入上的小偏移,经过N多层pooling后在最后的小feature map上会感知不到,这就是为什么原文会说网络变深平移可变性变差。

MaskRCNN

详解

TridentNet

详解

Yolo

速度快,精度没有R-FCN高
yolo原理、卷积实现高效的滑动窗口
这篇文章说得很清楚

解读2

Yolo v3

原理详解
https://github.com/zzh8829/yolov3-tf2

代码详解:
yolov3模型结构




NMS参考tf.image.combined_non_max_suppression

SSD

原理

Mobilenet

论文解读

你可能感兴趣的:(深度学习 物体检测 知识点)