计算机视觉之目标检测入门3
目标检测中的one-stage和two-stage
- two-stage:Fast-RCNN
将检测问题划分为两个阶段:产生候选区+对候选区进行分类
特点:错误率低,漏识别率低,但速度较慢,不能满足实时检测场景。 - one-stage:YOLO,SSD
不需要产生候选区,直接产生物体的类别和位置坐标值
特点:更快的检测速度
SSD(single shot multibox detector)
1. SSD结构
SSD是2016年提出的one-stage目标检测算法,主网络结构为VGG16.
VGG-16部分尺寸较大,感受野较小,用于识别较小的目标,后面的特征层尺寸较小,感受野较大,用于识别较大的目标。每个用于目标检测的特征图上会生成4个或者6个预选框,例如:VGG-16的特征层会产生4个预选框。
值得注意的是:在VGG-16的最后一层卷积池化后尺寸没有发生变换,这是为了防止特征尺寸大小难以满足小物体的识别:采用步长为1的池化+rate=6的空洞卷积操作,使得尺寸没有发生变化19*19。
特征图中每个点会产生一个预测值,每个预测值中涵盖两类数据:预测框的4个参数+预测目标的类别
2. 特征金字塔
3. SSD损失函数loss
SSD目标损失函数包含两部分:预选框与目标类别的confidence loss+相应的位置回归损失
match策略
- 训练时,真实框(ground truth box)与预选框(prior box)进行匹对:
1)首先寻找一个与真实框最大IoU的预选框,保证每个真实框与唯一的预选框对应
2)将剩余没有匹对的预选框与每一个真实框进行配对,当两者的IoU大于一定的阈值,人为match
3)配对到真实框的预选框为正样本(positive),没有配对到真实框的预选框为负样本(negative)
4. Hard negative mining and data augmentation
Hard negative mining
一般情况下,负样本的数量远大于正样本的数量;
data augmentation
SSD缺点; - 需要人工设置预选框的min_size,max_size和长宽比,网络中预选框的大小和形状需要手工设置,每一层的特征图使用的预选框和形状不一样,导致调试 依赖于经验。
- 使用了特征金字塔提取特征,然而对小目标检测效果不是很好,由于SSD使用底层特征图去检测小目标,低层特征图卷积层数少,特征提取不充分。
YOLO(You Only Look Once)
1. YOLO-V1
2016年提出
模型结构
YOLO将448448的图像分割成77=49个网格,每个网格预测两个bounding box的坐标(x,y,w,h)和box内是否包含物体的置信度confidence(每个边界框有一个置信度),数据集中有20个类别,所有一个网格对应((4+1)2+20)=30维向量。
77网格中每个格子,对应两个形状不同的bounding box(对应图中的黄色框)。
每个box的位置参数(x,y,w,h):x和y表示该box中心点与该格子边界的相对值,w和h表示预测box的宽度和高度相对整幅图像的宽度和高度的比值。
(x,y,w,h)会限制在(0,1)之间,与训练数据中标定的真实坐标(Gx,Gy,Gw,Gh)进行对比训练,每个格子负责检查中心点落在该格子的物体。
置信度表示box有无物体的概率,并不预测box内物体属于哪一类。
confidence置信度
YOLO-V1预测工作流程
YOLO-V1代价函数
loss函数包含三部分:位置误差(边界框4个参数与真实框的误差)+置信度误差(含有物体的框+不含物体的框)+分类误差
位置误差:对宽度和高度平方根的原因如下:
对于每一部分的损失函数,所占的重要性不同,需要设置不同的权重。
YOLO-V1缺点
1)每个网格只对应两个bounding box,当物体的长宽比不常见时,效果较差
2)原始图片只划分为7*7的网格,当两个物体靠的太近时,效果比较差
3)最终每个网格只对应一个类别,容易出现漏检
4)对于图片中比较小的物体,效果比较差
2. YOLO-V2
模型结构
YOLO-V2为了得到更精确的结果,进行如下优化:
1)高分辨率的分类器High Resolution Classfier
修改预训练分类网络的分辨率为448*448,在ImageNet数据集上训练10个周期。使得网络有足够的时间适应高分辨率的输入,然后再fine tune检测网络
2)Convolutional With Anchor Boxes在卷积上使用预选框
YOLO-V1使用全连接层进行bounding box预测,丢失了很多空间信息,导致定位不准。YOLO-V2借鉴Faster-RCNN的思想:每个中心预测9中不同大小的和比例的anchor,同时使用anchor同时预测类别和坐标
3)维度聚类(Dimension Clusters)
Faster-RCNN中的anchor boxes的个数和宽高维度往往是手动精选的先验框。而YOLO-V2利用K-means的方法,通过对数据集中真实框做聚类,找到真实框的统计规律,以聚类个数k为anchor boxes的个数,以k个聚类中心box的宽和高维anchor的宽和高
4)直接位置预测(Direct location prediction)
使用anchor boxes预测box的坐标时,模型会不稳定。YOLO-V2位置预测值tx和ty是预测边界框中心点相对于cell左上角位置的相对偏移值。为了将边界框中心点约束在当前cell中,使用Sigmoid函数处理偏移值,预测的偏移值在(0,1)范围内
5)细粒度特征(Fine-Grained Features)
融合之前的特征层
6)多尺度训练(Multi-Scale training)
Convolutional With Anchor Boxes
Dimension Clusters
经证明,k=5取得的效果较为理想,因此anchor的数量设置为5,因此YOLO-V2模型的输出为125:每个anchor涵盖4个位置参数+1个置信度参数+20个类别参数
Direct location prediction
Fine-Grained Features
Multi-Scale training