赞
踩
目标检测:物体识别是要分辨出图片中有什么物体,输入是图片,输出是类别标签和概率。而目标检测不仅要检测图片中有什么物体,还要输出无异的外框(x,y,width,height)来定位物体的位置。
object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。
object detection要解决的问题就是物体在哪里以及是什么的整个流程问题。
然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,更何况物体还可以是多个类别。
目前学术和工业界出现的目标检测算法分成3类:
1.传统的目标检测算法:
Cascade + HOG/DPM + Haar/SVM以及上述方法的诸多改进、优化;
2.候选区域/框+深度学习分类:通过提取候选区域,并对相应区域进行以深度学习方法为主的
分类的方案,如:
•R-CNN(Selective Search + CNN + SVM)
•SPP-net(ROI Pooling)
•Fast R-CNN(Selective Search + CNN + ROI)
•Faster R-CNN(RPN + CNN + ROI)
3.基于深度学习的回归方法:YOLO/SSD等方法
IOU是一种测量在特定数据集中检测相应物体准确度的一个标准。
IoU是一个简单的测量标准,只要是在输出中得出一个预测范围(bounding box)的任务都可以用IoU来进行测量。
为了可以使IoU用于测量任意大小形状的物体检测,我们需要:
1、(人为在训练集图像中标出要检测物体的大概范围)
2、我们的算法得出的结果范围
也就是说,这个标准用于测量真实和预测之间的相关度,相关度越高,该值越高。
比如通过上图来理解一下IoU的作用,绿框是ground-truth bounding box,红框是预测值,他们两个很显然是有差距的,用原始加减的方式肯定是比较不了的,我们需要用交并比的方法,如下公式:
IoU实际上就是面积的相除,交集/并集,举个例子,IOU=0.53定义为bad,IOU=0.76定义为nice,IOU=0.98定义为prefect(自己根据实际情况定义)
TP TN FP FN里面一共出现了4个字母,分别是T F P N。
T是True;
F是False;
P是Positive;
N是Negative。
TP(True Positives)意思就是被分为了正样本,而且分对了。
TN(True Negatives)
意思就是被分为了负样本,而且分对了,
FP(False Positives)意思就是被分为了正样本,但是分错了(事实上这个样本是负样本)。
FN(False Negatives)意思就是被分为了负样本,但是分错了(事实上这个样本是正样本)。
在mAP计算的过程中主要用到了,TP、FP、FN这三个概念。
TP是分类器认为是正样本而且确实是正样本的例子,FP是分类器认为是正样本但实际上不是正样本的例子吗,precision意思是分类器认为是正类并且确实是正类的部分占所有分类器认为是正类的比例。
TP是分类器认为是正样本而且确实是正样本的例子,FN是分类器认为是负样本但实际上不是负样本的例子,recall意思是分类器认为是正类并且确实是正类的部分占所有确实是正类的比例。
精度就是找得对,召回率就是找的全
下图代表的是准确率和召回率的一个应用:
蓝色的框是真实框。绿色和红色的框是预测抗,绿色的框是正样本,红色的框是负样本。
一般来讲,当预测框和真实框IOU>=0.5时,被认为是正样本。(0.5是自己设定的)
可以看到预测框和真实框还有差距,怎么解决这个问题呢,就出现了边框回归
边框回归是什么?
1、对于窗口一般使用四维向量(x,y,w,h)来表示,分别表示窗口的中心点坐标和宽高。
2、红色的框P代表原始的proposal;
3、绿色的框G代表目标的ground truth;
我们的目标是寻找一种关系使得输入原始的窗口P经过映射得到一个跟真实窗口G更加接近的回归窗口G^。
所以,边框回归的目的是:
边框回归怎么做?
比较简单的思路就是:平移+尺度缩放
意味着从长度单位转换为坐标单位
two-stage:two-stage算法会先使用一个网络生成proposal,如selective search和RPN网络,RPN出现后,ss方法基本就被摒弃了。RPN网络接在图像特征提取网络backbone后,会设置RPNloss(bbox
regression loss+classification loss)对RPN网络进行训练,RPN生成的proposal再送到后面的网络中进行更精细的bbox regression和classification。
**one-stage:**One-stage追求速度舍弃了two-stage架构,即不再设置单独网络生成proposal,而是直接在feature map上进行密集抽样,产生大量的先验框,如YOLO的网格方法。这些先验框没有经过两步处理,且框的尺寸往往是人为规定。
two-stage算法主要是RCNN系列,包括RCNN,Fast-RCNN,Faster-RCNN。之后的Mask-RCNN融合了Faster-RCNN架构、ResNet和FPN(Feature Pyramid Networks)backbone,以及FCN里的segmentation方法,在完成了segmentation的同时也提高了detection的精度。
one-stage算法最典型的是YOLO(后面又更新了YOLO2,YOLO3),该算法速度极快。
YOLO算法实际上采用一个单独的CNN模型实现end-to-end的目标检测:
1、Resize成448*448,图片分割得到7 * 7网格(cell)
2、CNN提取特征和预测:卷积部分负责提取特征,全连接部分负责预测。
3、过滤Bbox(通过NMS:非极大值抑制算法)
置信度是指框属于某一类别的概率是多少。
关于标定框:
网络的输出是S * S*(5*B+C)的一个tensor(S-尺寸,B标定框个数,C-检测类别数,5-标定框信息)
—5分为4+1
—4代表标定框的位置信息。框的中心点(x,y),框的高宽h,w
—1代表每个标定框的置信度以及标定框的准确度信息
一般情况下,YOLO不会预测边界框中心的确切坐标,它预测:
(1)与预测目标的网格单元左上角相关的偏移;
(2)使用特征图单元的维度进行归一化的偏移。
例如:
以上图为例 ,如果中心的预测是(0.4,0.7),则中心在13*13特征图上的坐标是(6.4,6.7)(红色单元的左上角坐标是(6,6))
但是如果预测的x,y坐标大于1,比如(1.2,0.7)。那么预测的中心坐标是(7.2,6.7)
注意:该中心在红色单元右侧的单元中。这打破了YOLO背后的理论,因为如果我们假设红色框负责预测目标狗,那么狗的中心必须在红色单元中,不应该在它旁边的网格单元中。
因此,为了解决这个问题,我们对输出执行sigmoid函数,将输出压缩到区间0到1之间,有效确保中心处于执行预测的网格单元中。
每个标定框的置信度以及标定框的准确度信息:
左边代表包含这个标定框的格子里面是否有目标。有=1,没有=0
右边代表标定框的准确程度,右边的部分是把两个标定框(一个是ground truth,一个是预测的标定框)进行一个IOU操作,即两个标定框的交集比并集,数值越大,即标定框重合越多,越准确。
我们可以计算出各个标定框的类别置信度:表达的是该标定框中目标属于各个类别的可能性大小以及标定框匹配目标的好坏。
每个网络预测的class信息(表示的是每个类别的概率)和bounding box预测的confidence信息相乘,就得到每个bounding box的类别置信度。
实际上,这个公式的意义就是:第一项是每个网络预测的类别的概率,即一共20类,每一类的概率;第二项是检测标定框是否有目标;第三项是计算IOU。
看一下整体框图:
到这里,就得到7730的网格,之前都是卷积池化,基本的神经网络操作,那得到7730的网格是如何进行检测的呢,我们继续往下看:
把它看成小竖条,前10是两个标定框的x,y,w,h和置信度,后20个是类别数
一共有49条,每条都是30个数字,组成7730的tensor,接下来开始计算:
下图中,前5个标定框的一个置信度乘以后面蓝条的类别得到20个置信度,得到20个class scores for Bbox 1。每个小格有两个标定框,每个标定框会得到20个数,一共得到40个数
得到每个Bbox的类别置信度以后,设置阈值,过虑掉得分(类别置信度)低的boxes,然后做一个降序排列(按照同一类别降序排列,比如:第一次对狗的得分进行降序排列,第二次对猫,循环20次)对保留的boxes进行NMS处理,得到最终的检测结果。下图以狗为例
注意:下图取得是上图的一横行(红色虚线框)
上图每一个格都代表一个框,最大值的Bbox与比它小的非0值作比较IOU,去除冗余,IOU越接近,说明越冗余,IOU大于一定的阈值,则设为0,去除绿色的框
第一个值比较完,接下来递归,以下一个非0值的Bbox最大值继续比较IOU,如下图所示
最终,剩下n个框
分数为0也就是没有目标的直接跳过,大于0的找每个Bbox分数最大的
然后就可以找到正确的框
到这一步其实主要经历了这样几步:把图像通过卷积拆成好多份,比如7*7,进行Bounding box +置信度,实现了概率地图,最终得到一个框
YOLO的缺点:
(1)YOLO对相互靠的很近的物体(挨在一起且中点都落在同一个格子上的情况),还有很小的群体检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。
(2)测试图像中,当同一类物体出现不常见的长宽比和其他情况是泛化能力偏弱。
1、YOLO2使用了一个新的分类网络作为特征提取部分;
2、网络使用较多的33卷积核,在每一次池化操作后把通道数翻倍;
3、把11的卷积核置于33的卷积核之间,用来压缩特征;
4、使用batch normalization稳定模型训练,加速收敛;
5、保留了一个shortcut用于存储之前的特征;
6、YOLO2相比于YOLO1加入了先验框,最后输出的conv_dec的shape为(13,13,425):
(1)1313是把整个图分为1313的网格用于预测。
(2)425可以分解为(855)。在85中,用于YOLO2常用的是COCO数据集,其中具有80个类;剩余的5指的是x,y,w,h和置信度。×5意味着预测结果包含5个框,分别对应5个先验框。
之前先验框都是手工设定的,YOLO2尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。YOLO2的做法是对训练集中标注的边框进行聚类分析,以寻找尽可能匹配样本的边框尺寸。
聚类算法最重要的是选择如何计算两个边框之间的“距离”,对于常用的欧式距离,大边框会产生更大的误差,但我们关心的是边框的IOU。所以,YOLO2在聚类时采用以下公式来计算两个边框的“距离”。
到聚类中心的距离越小越好,但IOU值是越大越好,所以使用 1 - IOU;这样就保证距离越小,IOU值越大。具体实现方法如下:
YOLO3相比之前的YOLO1和YOLO2,主要改进方向:
1、使用了残差结构
2、提取多特征层进行目标检测,一共提取三个特征层,他的shape分为为(13,13,75),(26,26,75),(52,52,75)。最后一个维度为75是因为该图是基于voc数据集的,它的类为20种。YOLO3针对每一个特征层存在3个先验框,所以最后的维度为3*25
3、采用了upsampling2d设计
下面是它的效果图:
参考资料:https://ai-wx.blog.csdn.net/article/details/107509243
链接:https://pan.baidu.com/s/1R90nTPYR4IAmqy5k7QN3bg?pwd=p5kd
提取码:p5kd
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。