目标检测基础
01-FasterRCNN-01-目标检测基础
目标检测:输出目标位置、类别及置信度。
目标检测属于多任务--一个是目标分类,另一个是目标位置的确定(即分类与回归)。
双阶段:1-用于提取候选区域;2-对候选区域进行分类和精确坐标回归
单阶段:只用一级网络完成分类和回归
单阶段网络的准确度为何不如双阶段网络,训练中的不均衡:
- 负例过多,正例过少
- 大多数负例十分容易区分,如果训练数据存在大量这样的样本,导致网络难以收敛。
双阶段网络如何解决训练中的不均衡:
在RPN网络中,根据前景置信度的高低选择最有可能的候选区域,从而避免大量容易区分的负例;
训练过程中根据交并比进行采样,将正负样本按照比例1:3,放置过多负例出现。
01-FasterTCNN-02-研究背景&成果&意义
输入图像--候选区域提取(2k)--计算卷机特征(包含缩放)--候选区域分类
RCNN基本算法流程:
- 一张图像生成1k~2k个候选区域
- 对于每个候选区域,使用深度网络提取特征
- 特征输入每一类的SVM分类器,判断是否属于改类
- 使用回归期修正候选框位置
RCNN存在问题:
尺寸归一化导致物体变形,纵横比特征的丢失
重复使用网络计算特征,低实时性
提出SPP net--创新点:
- 提出金字塔池化操作,可适用任何大小的输入图像
- 计算整幅图像的特征图,根据相对位置进行截取
SPP-net与RCNN的缺陷
- 训练过程慢,先训练卷积网络(预训练、调优训练)、训练SVM分类器、训练回归器
- 需要较大的内存空间。训练SVM分类器时,需要将多位特征存储在硬盘上
- RCNN检测慢,需要对每一个候选区域计算特征,SPP-net不能同时调整SPP-layer前后层的权重(预训练调整卷积层权重,调优训练调整全连接权重)
提出Fast RCNN中:
- 提出ROI pooling layer,可在训练过程中同时调整其前后层的权重
- 在网络中,同时完成回归与分类的任务
ROI pooling--将图像中的ROI区域定位到卷积特征中的对应位置
Faster-RCNN
摘要核心
- 候选区域提取是已有检测方法实时性低的主要瓶颈
- 提出了候选区域网络,通过共享特征,提取候选区域,极大的提高运算效率,可进行端到端的训练
- Fast RCNN和VGG通过迭代优化可以实现特征共享
01FasterRCNN-03-论文网络结构&训练方法讲解
输入图像的限制(600*1000)
经过4次maxpooling,特征图尺度变为输入的1/16
anchors--在特征图的每个点上人为的放置不同的框
RPN--自动选出有目标物体的框,输出两类(前景和背景),对anchors进行区分(筛选副样本)
ROIP--提取固定长度的特征(准确得知物体类别)
R-CNN--获得更加准确的类别和boudning box类别
Faster RCNN网络架构(以VGG网络为例):
- 首先缩放至固定大小MxN
- 放入共享Conv layers
- RPN计算proposals
- Roi Pooling层则利用proposals从feature maps中提取proposal features
- 送入后续全连接和softmax网络做classfication
存在两块主干网络--RPN和RCNN,所以一开始的卷积网络得到的特征是共享使用的。
RPN中包含分类和回归,涉及到输入的anchors、predicted anchors和ground truth anchors。
Proposal Layer:负责综合变换量和positive anchors,计算出准确的proposal。
3个输入:anchors分类结果,对应bbox的变化量和缩放信息
缩放信息:经过4次pooling后,则缩放信息为16
01FasterRCNN-04-实验结果及论文分析总结
启发点:
- Anchor定义是否存在不同数据集及不同场景下是否应该有所变化
- 是否有必要在整幅图中均匀分布Anchor
- Anchor定义的多尺度是否能够满足实际物体尺度变化要求
- 一次训练的方式
02YOLO-01-发展历史和YOLO v1
YOLO的原理
- 一次性输出所检测到的目标信息,包含类别和位置
- 只要求这个物体的中心在某个gird之内(不要求一开始设计很多anchors)
- 每个grid都预测出B个bounding boxs,这个bounding boxs有5个量,分别是:位置(x,y)和它的高(h)和宽(w),以及这次预测的置信度。
- 每个框还要负责预测这个框中的物体的类别。
Bounding Boxs的细节
- 如果输出的位置坐标是一个任意的正实数,模型很可能在大小不同的物体上泛化能力有很大的差异
- 让真实的x除以grid的宽度,让真实的y除以grid的高度就可以了(归一化)
- w除以整张图片的宽度,h除以整张图片的高度
02YOLO-02-YOLO v2
一些创新点
- Batch Normalization--检测系列的网络结构中,BN逐渐成为了标配。
- V2中,神经网络不再对预测矩形框的宽高的绝对值进行预测,而是预测与anchor框的偏差;在训练时,最接近ground truth的框产生loss,其余框不产生loss;v2中移除了v1最后的两层全连接层,全连接层计算量大,耗时长。
- 宽高由聚类产生--anchor box的宽高不再是通过人为设定。而是将训练集中的ground box的长宽值全部拿来进行聚类
- 细粒度特征--添加了passthrough层
多尺度训练
- 只有卷积层和池化层,对网络的输入大小,并没有限制,整个网络降采样倍数为32,只要输入的特征图尺寸为32的的倍数即可。
02YOLO-v3-YOLOv3
网络结果解析
- 只有卷积层:通过调节卷积步长控制输出特征图的尺寸。对于输入图片尺寸没有特别限制。
- 金字塔特征图:小尺寸特征图用于检测大尺寸物体,而大尺寸特征图检测小尺寸物体。
- 借鉴ResNet:将输入的特征图,与输出的特征图对应维度进行相加。
- 借鉴DeseNet:将特征图按照通道维度直接进行拼接。
先验框--沿用v2的技巧,使用k-means进行聚类。
置信度在输出85维中占固定一位,由sigmoid函数计算解码得到,解码区间在【0,1】之中。
三个特征图一共解码出8x8x3 + 16x16x3 + 32x32x3 = 4032个box以及相应的类别、置信度。这4032个box,在训练和推理时,使用方法不同:
训练时4032个box全部送入打标签函数,进行后一步的标签和损失函数的计算。
推理时,选取一个置信度阈值,过滤掉低阈值box,再经过nms,就可以输出整个网络的预测结果了。
YOLO v4
- 没有算法层面的创新
- 主要是训练技巧的更新
- YOLO v5还没有paper
03SSD-01-发展历史和论文泛读
SSD--基于vgg进行的改编。
学习目标
- 了解SSD中最重要的多尺度特征图概念
- 掌握SSD的网络结果、了解实验效果及优越性
- 熟悉SSd的实现代码,各代码模块功能。
创新点:
- 单个深度神经网络的目标检测方法
- 可以在不同分辨率的特征图上进行预测
- SSD比那些需要object proposals的方法简单,完全去除了proposal生成和随后的特征再筛选的过程
03SSD-02-网络结果和具体算法
设计理念
- 采用多尺度特征图--大特征图来检测小目标,小特征图检测大目标
- 采用卷积进行检测(取消FC层)
- 设置先验框--是人为设置,对于不同场景,可能需要调整超参数。因此,yolo系列在实际场景中使用更多,yolo使用聚类。
先验框匹配
1.第一原则:对于图片中每一个ground truth,找到与其IOU最大的先验框。
2.第二原则:对于剩余的未匹配先验框,若某个ground truth的IOU高于某个阈值(一般是0.5),那么改先验框也与这个ground truth进行匹配。
正样本--通常称与grounding truth匹配的先验框。
副样本--若一个先验框没有与任何ground truth进行匹配,只能与背景进行匹配。
Hard Negatve Mining
- 为了保证正负样本尽量平衡,SSD采用Hard Negatve Mining,就是对负样本进行抽样,抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3。