经典目标检测算法总结笔记
文章目录
- 1 项目结构
- 2 目标检测算法分类
- 3 目标检测任务
- 3.1 目标分类
- 3.2 目标定位
- 3.3 位置坐标
- 3.4 Bounding box
- 4 R-CNN
- 4.1 目标检测的overfeat模型
- 4.1.1滑动窗口
- 4.2 R-CNN方法
- 4.2.1 候选区域方法
- 4.2.1.1 SS选择性搜索
- 4.2.1.2 NMS非极大抑制
- 4.2.1.3 修正候选区域
- 4.2.1.4 步骤(Alexnet为例)
- 4.2.2 R-CNN输出
- 4.2.3 效果
- 4.2.5 缺点
- 5 目标检测评估指标
- 5.1 IOU交并比
- 5.2 map平均精确率
- 6 SPP-Net
- 6.1 R-CNN慢在何处
- 6.2 SPP-Net的几点改进
- 6.3 映射
- 6.4 SPP(spatial pyramid pooling)
- 6.5 优缺点
- 7 Fast R-CNN
- 7.1 Fast R-CNN的几点改进
- 7.2 RoI pooling
- 7.3 step
- 7.4 多任务损失 Multi-task loss
- 7.5 总结
- 8 Faster R-CNN
- 8.1 Faster R-CNN的改进
- 8.2 RPN实现
- 8.3 RPN原理
- 8.4 Faster-RCNN训练
- 8.4.1 RPN 训练
- 8.4.2 Fast R-CNN 部分的训练
- 8.4.3 优点
- 8.4.4 缺点
- 9 YOLO
- 9.1 网络速度和精度比较
- 9.2 YOLO结构
- 9.3 流程
- 9.4 单元格
- 9.5 网络输出筛选
- 9.6 训练
- 9.7 缺点
- 10 SSD
- 10.1 Detector & classifier
- 10.2 训练
- 10.3 test流程
深度模型层:YOLO、SSD,模型导出,Serving部署
用户层:前端交互,(web后台)对接部署的模型
two-stage: 两步走,先区域推荐,后目标分类
代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN
one-stage:端到端,一个网络一步到位,输入图片,输出类别和位置
代表:YOLO、SSD
卷积激活池化——类别概率——交叉熵损失
经过FC后,输出四个预测位置,对比真实标注——均方误差损失计算
x y w h ——xmin(左上角) ymin xmax ymax
ground-truth bounding box: 图片中真实标记的值
predicted bounding box:预测的时候标记的值
多目标检测问题不能以固定个数输出物体的位置值,因为不知道图中有几个物体
暴力方法:检测转化为分类,首先定义K个大小窗口,每个窗口滑动提取M个,总共K*M图片来分类,物体?背景?
计算消耗大
在CVPR 2014中,20个类别的物体检测
相近像素合并,提取候选框,长宽不定
目的:筛选候选区域,目标是一个物体只保留一个最好的框,来抑制冗余的框
有N个ground truth 则经过概率筛选得到N个准确的候选框
迭代过程
1对2000个区域以0.5的概率筛选,得到5个
2剩余的候选框,对每个候选框找到自己对应的GT
3如下图,先找到概率最大的框B,算出来与B的IOU>0.5的框,删除掉,即删除DE
4 最终结果:每一个ground truth都有一个候选框
A1A2…为候选框,G是目标GT
Ai和G做回归训练,得到四个参数Wx Wy Ww Wh
1对一张图片,找出默认的2000个候选区域(SS)
2对2000个候选区域做大小变换,输入Alexnet中,得到特征向量2000*4096
3经过20个类别的SVM,对2000的候选区域做判断,得到【2000,20】得分
每一个特征向量进入SVM二分类得到2000个得分,一共20个二分类
4对【2000,20】做NMS(极大抑制),修正得到结果好的框,计算IOU
5修正候选框,做bbox回归微调, 使得候选框标注更准确
一张图片预测一个X候选框,由X*W=Y_locate得到真正的输出位置
在VOC2007数据集上的map达到66%
训练时间长
模型多:微调网络+训练SVM+训练bbox
处理速度慢
位置的考量
分类准确率的考量
训练样本的标记,每个GT有最高的IOU anchor 标记为正样本,其余的anchor和任何GT的IOU>0.7为正样本,IOU<0.3为负样本
define:多个分类任务的AP的平均值
mAP=所有类别的AP之和/类别的总个数
AP:PR曲线下的面积(AUC)
step:
1、对N个类其中一个类别,比如猫,所有候选框输出是猫类别的概率进行排序,得到一个候选框列表
(R-CNN中就是SVM的输出分数)
2、根据候选框列表计算AUC
3、最终得到N个类别,N个AP相加/N
卷积运算耗时间
(x’,y’)表示特征图上坐标点,原图(x,y)
左上角的点 x’=[x/S]+1
右下角的点 x’=[x/S]-1
S = 卷积层步长之乘积
空间金字塔池化
候选区域的特征图转换成固定大小的特征向量
spp layer 会把每一个候选区域分成 1×1 2×2 4×4三张子图
优点:通过候选区域和feature map映射,配合SPP使用,达到CNN层共享计算
缺点:训练慢,特征需要写入磁盘(SVM)
分阶段训练:选取候选区域→训练CNN→训练SVM→训练Bbox回归器→SPPNet反向传播效率低
1 提出一个Rol pooling层
2 分类使用softmax计算:K个类别加上“背景”类
3 与SPPNet相同的地方:
首先 b 整个图片输入到基础卷积网络,得到整张图的feature map
将SS得到的结果Rol(region proposal)映射到feature map中
为减少计算时间并且得出固定长度的向量,使用一种4×4的空间盒子(不再用金字塔型)
训练比较统一:废弃了 SVM 和 SPPNet ,采用Roi pooling + softmax
分类loss N+1(类别数+背景)个 softmax 输出————使用交叉熵损失
回归loss 4×N 个输出 regressor使用平均绝对误差MAE,即L1损失
fin-tuning训练
在微调时,调整 CNN+Roi pooling + softmax
调整 bbox regressor 回归当中的参数
SS步骤融合到网络当中
区域生成网络(RPN)+ Fast R-CNN 即 RPN代替了SS
1 图片输入基础CNN (conv + relu + pooling),提取得到feature map
2 softmax 判断 anchors 属于 foreground or background
3 利用bbox修正anchors获得精确的候选区域
4 得到默认300个候选区域给ROI pooling
用n×n的大小窗口去扫描特征图(默认3*3)得到K个候选窗口
每个特征图中像素对应的9个窗口大小:三种尺度{128,256,512} 三种长宽比{1:1,1:2,2:1}
3*3=9不同大小的候选框
窗口输出【N,256】→分类:判断是否是背景
回归位置:N个候选框与自己对应目标值GT做回归,修正位置
得到更好的候选区域给ROI pooling
样本准备:正负anchors样本比例 1:3
分类:二分类,softmax,logistic regression
候选框的调整:均方误差修正
预测类别训练:softmax
预测位置训练:均方误差损失
提出RPN网络
端到端网络模型
训练参数过大
You only look once
GoogleNet + 4个卷积+2个全连接层 一个网络搞定一切
1 原始图片resize为448x448,图片输出成了一个7×7×30的结构
2 默认7×7个单元格
3 每个单元格预测两个bbox框
4 进行NMS筛选,筛选概率以及IoU
7 * 7=49个像素值,理解成49个单元格,每个单元格可以代表原图的一个方块。单元格需要做的两件事:
一个网格会预测两个Bbox,在训练时我们只有一个Bbox专门负责(一个Object 一个Bbox)
20个类别概率代表这个网格当中的一个bbox
每个bounding box都对应一个confidence score
如果grid cell里面没有object,confidence就是0
如果有,则confidence score等于预测的box和ground truth的IOU乘积
如何判断一个grid cell里面有没有包含object呢?
如果一个object的ground truth的中心点坐标在一个grid cell里面,那么这个grid cell就被认为包含这个object,即这个object的预测就由该grid cell负责,每个grid cell都预测20个概率,表示在一个grid cell包含object的条件下,该object属于某一个类别的概率
grid cell中的哪一个bounding box负责预测呢?
就是如果有好几个bbox都包括了物体中心点,我们选择IOU最大的
YOLO框,概率值都直接由网络输出 7 x 7 x 30(认为给30个值赋了具体的定义)
Single Shot MultiBox Detector
训练