赞
踩
博客参照下面的B站课程做的笔记:目标检测从入门到精通-基础原理与项目实战
通常使用较多的为VOC 2007数据集,总共9963张图片,需要判定的总物体类别数量为20个对象类别是:
以下是一个标准的物体检测标记结果格式,这就是用于训练的物体标记结果。其中有几个重点内容是后续在处理图像标记结果需要关注的。
如下例子:为000001.jpg 这张图片,其中有两个物体被标记
输入一张图片,经过其中军妓、激活、池化相关层,最后加入全连接层达到分类概率的效果。
在分类的时候我们直接输出各个类别的概率,如果再加上定位的话,我们可以考虑在网络的最后输出加上位置信息。
增加一个全连接层,即为FC1、FC2
如下图所示:
在目标检测当中,对bbox主要有两种类别。
注:这样就变成每张子图片输出类别以及位置,变成分类问题。
但是滑动窗口需要初始设定一个固定大小的窗口,这就遇到了一个问题,有些物体适应的框不一样。
这种方法类似一种暴力穷举的方式,会消耗大量的计算力量,并且由于窗口大小问题可能会造成效果不准确。但是提供了—种解决目标检测问题的思路。
在CVPR 2014年中Ross Girshick提出R-CNN。
不使用暴力方法,而是用候选区域方法(region proposal method) ,创建目标检测的区域改变了图像领域实现物体检测的模型思路,R-CNN是以深度神经网络为基础的物体检测的模型,R-CNN在当时以优异的性能令世人瞩目,以R-CNN为基点,后续的SPPNet、Fast R-CNN、Faster R-CNN模型都是照着这个物体检测思路。
在候选区域的基础上提取出更高级、更抽象的特征。这些高级特征是作为下一步的分类器、回归的输入数据。
提取的这些特征将会保存在磁盘当中(这些提取的特征才是真正的要训练的数据)
选择性搜索算法(SS)得到的物体位置已经国定了,但是我们筛选出的位置不一定真的就特别准确,需要对A和B进行最后的修正
R-CNN输出:一张图片预测一个X候选框,x
×
\times
× w = y_locate
任务 | description | 输入 | 输出 | 评价指标 |
---|---|---|---|---|
Detection and Localization(检测和定位) | 在输入图片中找出存在的物体类别和位置(可能存在多种物体) | 图片(image) | 类别标签(categories)和位置(bbox(x,y,w,h)) | IoU(Intersection over Union) |
True Positive(真正,TP):将正类预测为正类数
True Negative(真负,TN):将负类预测为负类数
False Positive(假正,FP):将负类预测为正类数误报 (Type I error)
False Negative(假负,FN):将正类预测为负类数→漏报 (Type II error)
Positive(预测类别) | Negative(预测类别) | ||
---|---|---|---|
True(真实类别) | True Positive(TP) | Ture Negative(TN) | P(实际为Yes) |
False(真实类别) | False Positive(FP) | False Negative(FN) | N(实际为No) |
P‘(被预测为Yes) | N’(被预测为No) | P+N |
SPPNet主要存在两点改进地方,提出了SPP层
减少卷积计算
R-CNN模型 | SPPNet模型 |
---|---|
1. R-CNN是让每个候选区域经过crop/wrap等操作变换成固定大小的图像 2. 固定大小的图像塞给CNN,传给后面的层做训练回归操作 | 1. SPPNet把全图塞给CNN得到全图的feature map 2. 让SS得到候选区域直接映射特征向量中对应位置 3. 映射过来的特征向量,经过SPP层(空间金字塔变换层),S输出固定代销的特征向量给FC层 |
步骤:
原始图片经过CNN变成了feature map,原始图片通过选择性搜索(SS)得到了候选区域(Region of Interest),现在需要将基于原始图片的候选区域映射到feature map中的特征向量。映射过程图参考如下:
整个映射过程有具体的公式,如下
假设(x’,y’)表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么它们之间有如下转换关系,这种映射关心与网络结构有关∶(x, y)=(Sx’, Sy’),即
其中S就是CNN中所有的strides的乘积,包含了池化、卷积的stride。论文中使用S的计算出来为 2 × 2 × 2 × 2 = 16 2\times 2\times 2\times 2=16 2×2×2×2=16
示例:假设原图输入是224 × \times × 224,对于conv出来后的输出是13 × \times × 13 × \times × 256,其中某个映射的候选区域假设为︰12 × \times × 10 × \times × 256
spp layer会将每一个候选区域分成 1 × \times × 1,2 × \times × 2,4 × \times × 4三张子图,对每个子图的每个区域作max pooling,得出的特征再连接到一起就是(16+4+1) × \times × 256=21 × \times × 256=5376结果,接着给全连接层做进一步处理,如下图︰
Spatial bins(空间盒个数)︰1+4+16=21
优点
缺点
SPPNet的性能已经得到很大的改善,但是由于网络之间不统一训练,造成很大的麻烦,Fast R-CNN就是为了解决这样的问题。
改进的地方:
Rol pooling只是一个简单版本的SPP,目的是为了减少计算时间并且得到固定长度的向量。
两个loss,分别是:
参数 | R-CNN | SPPNet | Fast R-CNN |
---|---|---|---|
训练时间(h) | 84 | 25 | 9.5 |
测试时间/图片 | 47.0s | 2.3s | 0.32s |
mAP | 66.0 | 63.1 | 66.9 |
在Faster R-CNN中加入一个提取边缘的神经网络,也就说找候选框的工作也交给神经网络来做了。这样,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。
Faster R-CNN可以简单地看成是区域生成网络+Fast R-CNN的模型,用区域生成网络(Region Proposal Network,简称RPN)来代替Fast R-CNN中的选择性搜索方法,结构如下:
RPN网络的主要作用是得出比较准确的候选区域。整个过程分为两步
Faster R-CNN的训练分成两部分,即两个网络的训练。
R-CNN | Fast R-CNN | Faster R-CNN | |
---|---|---|---|
测试时间/图片 | 50.0s | 2.3s | 0.2s |
mAP(VOC 2007) | 66.0 | 66.9 | 66.9 |
可以改进的需求:
最后网络输出的 7 × 7 × 30 7 \times 7 \times 30 7×7×30 的特征图怎么理解? 7 × 7 = 49 7\times 7=49 7×7=49个像素值,理解成49个单元格,每个单元格可以代表原图的一个方块。单元格需要做的两件事:
一个网络会预测2个bbox,但是在训练时只有一个bbox专门负责预测概率(一个objcet,一个bbox)
注∶所以如何判断一个grid cell中是否包含object呢?如果一个object的ground truth的中心点坐标在一个grid cell中,那么这个grid cell就是包含这个object,也就是说这个object的预测就由该grid cell负责。
每个bbox的Class-Specific Confidence Score以后,设置阈值,滤掉概率低的bbox,对每个类别过滤loU,就得到最终的检测结果。
预测框对应的目标值标记
损失:
SSD算法源于2016年发表的算法论文,论文网址: https://arxiv.org/abs/1512.02325
SSD的特点在于:
以VGG-16为基础,使用VGG的前五个卷积,后面增加从Conv6开始的五个卷积结构,输入图片要求
300
×
300
300 \times 300
300×300。
SSD中引入了Defalut Box,实际上与Faster R-CNN的anchor box机制类似,就是预设一些目标预选框,不同的是在不同尺度feature map所有特征点上使用PriorBox层(Detector&Classifier)
训练
测试
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。