【动手学】44 物体检测算法:R-CNN,SSD,YOLO

1、 R-CNN

【动手学】44 物体检测算法:R-CNN,SSD,YOLO_第1张图片

  • 使用启发式搜索算法来选择锚框,如 selective search
  • 使用预训练模型来对每个锚框抽取特征
  • 训练一个SVM对类别分类 【深度学习之前常使用】
  • 训练一个线性回归模型来预测边缘框偏移

[思考]怎么样使得产生的不一样大小锚框形成 一个batch?

兴趣区域(RoI)池化层

  • 给定一个锚框,均匀分割成n×m块,输出每块里最大值
  • 不管锚框多大,输出总为nm个值
    【动手学】44 物体检测算法:R-CNN,SSD,YOLO_第2张图片

Fast RCNN

  • 使用CNN对图片抽取特征
  • 使用RoI池化层对每个锚框生成固定长度特征
    【动手学】44 物体检测算法:R-CNN,SSD,YOLO_第3张图片

【思考】这里主要是简化计算量,将图像全部区域抽取特征后,在特征层上使用selective search的方法生成锚框,通过RoI池化将锚框整合成相同大小的向量的batch。其中减小的计算量主要是锚框重合区域提取特征的开销。

Faster R-CNN

  • 使用一个区域提议网络(RPN)来替代启发式搜索(selective search)来获得更好的锚框
    【动手学】44 物体检测算法:R-CNN,SSD,YOLO_第4张图片

Mask R-CNN

  • 如果有像素级的标号,使用FCN来利用这些信息
  • RoI Pooling 变成 RoI Align
    【动手学】44 物体检测算法:R-CNN,SSD,YOLO_第5张图片

【说明】RoI Pooling在像素不能平分的情形做分割任务会有较大误差,使用RoI Align 将像素级别通过加权的方式平分共用像素;也就是说,align 没有暴力取整,保留浮点位置,并使用双线性插值,提升精度
【动手学】44 物体检测算法:R-CNN,SSD,YOLO_第6张图片

【】有像素级标签的网络模型中添加FCN就能做语义分割。

模型进度对比

【动手学】44 物体检测算法:R-CNN,SSD,YOLO_第7张图片

总结

  • R-CNN 是最早、也是最有名的一类基于锚框和CNN的目标检测算法
  • Fast、Faster R-CNN持续提升性能
  • Faster R-CNN 和Mask R-CNN是在追求高精度场景下常用算法

SSD(单次多框检测)

  • 对每个像素,生成多个以它为中心锚框
  • 给定n个大小s1,s2…,sn 和m个高宽比,那么生成n+m-1个锚框,其中大小和宽高比分别为:(s1,r1),(s2,r1)…(sn,r1),(s1,r2)…(s1,rm)
    【动手学】44 物体检测算法:R-CNN,SSD,YOLO_第8张图片

SSD 模型

  • 一个基础网络来抽取特征,然后多个卷积层来减半高宽
  • 在每段都生成锚框
    • 底部段生成锚框来检测小物体,顶部段来检测大物体
      -对每个锚框预测类别和边缘框
      【动手学】44 物体检测算法:R-CNN,SSD,YOLO_第9张图片

【思考】生成100万个锚框,速度还能达到这么快,不过精度不是很高。主要出现的很早。相对R-CNN简单

总结

  • SSD 通过单神经网络来检测模型
  • 以每个像素为中心的产生多个锚框
  • 在多个段的输出上进行多尺度的检测

YOLO(只看一次)

  • SSD中锚框大量重叠,因此浪费了很多计算
  • YOLO将图片均匀分成S×S个锚框
  • 每个锚框预测B个边缘框
  • 后续有持续版本改进
    【动手学】44 物体检测算法:R-CNN,SSD,YOLO_第10张图片

你可能感兴趣的:(沐神,目标检测)