关于目标检测 Object detection
NO1.目标检测 (分类+定位)
目标检测(Object Detection)是图像分类的延伸,除了分类任务,还要给定多个检测目标的坐标位置。
NO2.目标检测的发展
R-CNN是最早基于CNN的目标检测方法,然后基于这条路线依次演进出了SPPnet,Fast R-CNN和Faster R-CNN,然后到2017年的Mask R-CNN.
R-CNN即区域卷积神经网络,其提出为目标检测领域提供了两个新的思路:首先提出将候选子图片输入CNN模型用于目标检测和分割的方法,其次提出了对于数据集标签数据有限情况下的训练方法,即使用在其他有标签数据集训练好的模型,然后再用当前少量标签数据进行特定任务的微调训练,最终可以得到明显的效果提升。目标检测需要进行定位,常用的定位方法有回归和滑动窗等。R-CNN非常简单粗暴,使用Selective Search 算法在图片中选出2000张可能存在目标的候选子图片(把选区子图片作为候选物体位置的步骤称为Region Proposal),从而解决了定位的问题。然后把每一个子图片大小调整为一个固定大小,逐一输入到一个预先训练好的CNN用于特征提取,最后再将提取到的特征输入到SVM分类器,这样就可以通过计算推断每个候选区域的物体属于什么类别,概率是多少,最后把物体小概率的区域去掉,就得到图中物体的位置和类别。
整个系统分为三个部分:1.产生不依赖与特定类别的region proposals,这些region proposals定义了一个整个检测器可以获得的候选目标2.一个大的卷积神经网络,对每个region产生一个固定长度的特征向量3.一系列特定类别的线性SVM分类器。(目标检测系统由三个模块组成。第一个生成类别无关区域提案。这些提案定义了可用于我们的检测器的候选检测集。第二个模块是从每个区域提取固定长度特征向量的大型卷积神经网络。第三个模块是一组特定类别的线性SVM。)
(消融研究 逐层分析性能,没有微调。https://blog.csdn.net/xiaqunfeng123/article/details/78715983 区域提案 region proposal)
Selective Search 算法(选择性搜索)遵循如下的原则:(https://www.cnblogs.com/kingstrong/p/4969472.html)
- 图片中目标的尺寸不一,边缘清晰程度也不一样,选择性搜索应该能够将所有的情况都考虑进去,如下图,最好的办法就是使用分层算法来实现
- 区域合并的算法应该多元化。初始的小的图像区域(Graph-Based Image Segmentation得到)可能是根据颜色、纹理、部分封闭等原因得到的,一个单一的策略很难能适应所有的情况将小区域合并在一起,因此需要有一个多元化的策略集,能够在不同场合都有效。
- 能够快速计算。
R-CNN的缺点:第一,它把每一个子图片都调整到一个固定的大小,这样的话原图长宽比例会扭曲,影响后面CNN分类器的效果。第二,它需要把每一个候选子图片逐一输入到CNN里做分类,速度很慢并且有重复计算。第三,其训练是分阶段的,对于目标检测而言,R-CNN首先需要对预训练模型进行特定类别物体的微调训练,然后再训练SVM对提取到的特征进行分类,最后还需要训练候选框回归器(Bounding-box Regressor)对候选子图中的目标进行精确的提取。
(补充:非极大值抑制 http://www.360doc.com/content/16/1230/13/25664332_618876745.shtml
非极大值抑制算法(non maximum suppression, NMS,首先从所有的检测框中找到置信度较大的那个框,然后挨个计算其与剩余框的IOU,如果其值大于一定阈值(重合度过高),那么就将该框剔除;然后对剩余的检测框重复上述过程,直到处理完所有的检测框。
召回率(IoU,Intersection-over-Union),这个是一个定位精度评价公式IoU.
)
为了解决第一个和第二个缺点,何凯明提出了SPP net(Spatial Pyramid Pooling).其思路是先对任意大小输入图片整体进行卷积操作,然后对得到的特征图对应候选子图位置做金字塔池化(Spatial Pyramid Pooling),该操作采用了多种不同的池化尺度,将多个池化后的特征串联起来作为定长的特征向量,再把该特征图继续输入到后续的CNN分类器中,这样不需要对每个候选子图分别输入CNN处理,大大提高了检测速度。同时,采用金字塔池化的网络不需要固定尺寸的输入图像,也弥补了第一个缺陷。然而第三个缺陷仍然存在。但是仍存在第三个缺点。
SPP的优点:
1)任意尺寸输入,固定大小输出
2)层多
3)可对任意尺度提取的特征进行池化。
SPP网络的核心思想:(https://blog.csdn.net/bryant_meng/article/details/78615353)
通过对feature map进行相应尺度的pooling,使得能pooling出4×4, 2×2, 1×1的feature map,再将这些feature map concat成列向量与下一层全链接层相连。这样就消除了输入尺度不一致的影响。
(https://blog.csdn.net/bryant_meng/article/details/78615353)
SPP-Net与R-CNN的对比(https://blog.csdn.net/v1_vivian/article/details/73275259)
对于R-CNN,整个过程是:
首先通过选择性搜索,对待检测的图片进行搜索出~2000个候选窗口。
把这2k个候选窗口的图片都缩放到227*227,然后分别输入CNN中,每个proposal提取出一个特征向量,也就是说利用CNN对每个proposal进行提取特征向量。
把上面每个候选窗口的对应特征向量,利用SVM算法进行分类识别。
---------------------
而对于SPP-Net,整个过程是:
首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口。这一步和R-CNN一样。
特征提取阶段。这一步就是和R-CNN最大的区别了,这一步骤的具体操作如下:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度会大大提升。
最后一步也是和R-CNN一样,采用SVM算法进行特征向量分类识别。
---------------------
为了进一步提升速度和解决第三个问题,后续R.Girshick提出了端到端训练的Fast R-CNN网络。该网络用ROI(Region Of Interest)池化,该操作可以看作空间金字塔的简化版本,即使用了一种池化尺度。Fast R-CNN在训练时通过共享训练使效率更高,,比如每个mini-batch的训练样本来自N=2张输入图片,为了获取R=128个学习样本,需要从每张图片中采样R/N=64个ROI.由于对于同一张图片的不同ROI之间在前向传播和反向传播时是共享计算、共享内存的,因此相比于128个来自128个图片的ROI,该网络有64倍的速度提升。此外,该网络将候选框回归任务部分也一同通过CNN实现,在卷积层后面的全连接层分为两支,一支用于识别目标类别,一支用于预测回归框所在位置及长宽。值得注意的是,为了实现端到端的训练,Fast R-CNN放弃了SVM分类器,而是选择微调后网络自身的softmax分类器。这样一来,特征提取,目标分类、候选框回归三部分可以同时进行端到端(end-to-end)训练。(基于VGG16的Fast RCNN算法在训练速度上比RCNN快了将近9倍,比SPPnet快大概3倍;测试速度比RCNN快了213倍,比SPPnet快了10倍。在VOC2012上的mAP在66%左右。https://www.baidu.com/link?url=nS819zbqUvKfNAS1TYahDDOnj8h51brO52A6uCCbf91y24ySVl35CTqOSGL4jO94ohnLJwdrDRzUcjWbitjOLEB0OuQ3ZQg_nLphnpUWKwi&wd=&eqid=f39d3d6d0002346f000000055bc1bd8f)
(https://blog.csdn.net/amor_tila/article/details/78809791)
Fast R-CNN算法的主网络还是VGG16,按训练过程和测试过程来讲会清晰点。
训练的过程: (https://www.baidu.com/link?url=nS819zbqUvKfNAS1TYahDDOnj8h51brO52A6uCCbf91y24ySVl35CTqOSGL4jO94ohnLJwdrDRzUcjWbitjOLEB0OuQ3ZQg_nLphnpUWKwi&wd=&eqid=f39d3d6d0002346f000000055bc1bd8f)
输入是224*224,经过5个卷积层和2个降采样层(这两个降采样层分别跟在第一和第二个卷积层后面)后,进入ROIPooling层,该层是输入是conv5层的输出和region proposal,region proposal的个数差不多2000。然后再经过两个都是output是4096的全连接层。最后分别经过output个数是21和84的两个全连接层(这两个全连接层是并列的,不是前后关系),前者是分类的输出,代表每个region proposal属于每个类别(21类)的得分,后者是回归的输出,代表每个region proposal的四个坐标。最后是两个损失层,分类的是softmaxWithLoss,输入是label和分类层输出的得分;回归的是SmoothL1Loss,输入是回归层的输出和target坐标及weight。
测试的过程:
与训练基本相同,最后两个loss层要改成一个softma层,输入是分类的score,输出概率。最后对每个类别采用NMS(non-maximun suppression)。
---------------------
Fast R-CNN的流程图如下,网络有两个输入:图像和对应的region proposal。其中region proposal由selective search方法得到,没有表示在流程图中。对每个类别都训练一个回归器,且只有非背景的region proposal才需要进行回归。ROI pooling:ROI Pooling的作用是对不同大小的region proposal,从最后卷积层输出的feature map提取大小固定的feature map.
Fast RCNN主要有3个改进:1、卷积不再是对每个region proposal进行,而是直接对整张图像,这样减少了很多重复计算。2、用ROI pooling进行特征的尺寸变换,因为全连接层的输入要求尺寸大小一样,因此不能直接把region proposal作为输入。3、将regressor放进网络一起训练,每个类别对应一个regressor,同时用softmax代替原来的SVM分类器。
即便如此,Fast R-CNN仍然不够快,其瓶颈在于使用了Selective Search算法来生成候选子图。为了提高性能,R.Girshick继续提出了Faster R-CNN,使用Region Proposal Networks(RPN),即通过神经网络来学习如何生成Region Proposal.其优势在于获得更快收敛速度的同时,将RPN和CNN部分联合训练可以提高整体效果。输入图片在经过卷积层提取特征图后,RPN在特征图上通过滑动窗的方式,在每个位置生成一定数量的anchors(包括不同的尺度和长宽比,这里选取K个),每个anchor都是该特征图当前位置所对应输入图片的一个区域。对于每个anchor位置RPN采用3*3大小的滑动窗,从该区域提取特征并压缩得到256维度的特征向量,然后通过一支全连接二分类网络来计算k个anchor所对应候选区域是否含有目标的概率,通过另一支全连接二分类网络来预测k个尺度的候选框的位置以及长宽。通过缩小各个anchor对应的k个候选框与ground-truth直接的损失函数,RPN可以学习如何从特征图中检测到更有可能包含目标的候选子图。在训练阶段,RPN与CNN交替训练,并且共享特征提取部分的网络参数,从而可以实现端到端的训练。
Faster R-CNN可以简单地看做“区域生成网络RPNs + Fast R-CNN”的系统,用区域生成网络代替FastR-CNN中的Selective Search方法。Faster R-CNN这篇论文着重解决了这个系统中的三个问题:(https://blog.csdn.net/amor_tila/article/details/78809791)
1. 如何设计区域生成网络;
2. 如何训练区域生成网络;
3. 如何让区域生成网络和Fast RCNN网络共享特征提取网络。
Faster-R-CNN算法由两大模块组成:
1.PRN候选框提取模块;
2.Fast R-CNN检测模块。
其中,RPN是全卷积神经网络,用于提取候选框;Fast R-CNN基于RPN提取的proposal检测并识别proposal中的目标
(RPN(Region Proposal Network)区域建议网络用来提取检测区域,它能和整个检测网络共享全图的卷积特征,使得区域建议几乎不花时间。)
(https://blog.csdn.net/amor_tila/article/details/78809791)
RCNN解决的是,“为什么不用CNN做classification呢?”
Fast R-CNN解决的是,“为什么不一起输出bounding box和label呢?”
Faster R-CNN解决的是,“为什么还要用selective search呢?
(https://www.cnblogs.com/skyfsm/p/6806246.html)
以上的思路都很类似,即通过生成候选子图提供需要检测的位置信息,通过CNN分类得到类别信息。该方法结果精度很高而速度始终不够快,难以满足实时性的需求。YOLO(You Only Look Once)提供了一个新的思路:直接使用CNN结构的输出层回归候选框位置以及长宽和目标的类别预测。这个想法直接把目标检测看作回归问题,简单直接有效。YOLO将输入图片分为7*7的网格,如果目标中心落在某个网格内部,那么就认为该网格负责对目标的检测和识别。将输入图片缩放到特定尺寸输入CNN,CNN中的卷积层负责特征提取,全连接层部分负责分类识别以及候选款回归。对于每个网格,我们可以计算其包含目标的概率,目标属于各个类别概率以及候选款信息等,对49个网格的结果采用极大值抑制后得到剩余的候选框,就是最终的结果。这个算法最大的特点就是运行迅速,泛化能力强,不过它的缺点是很难检测到小的物体。
直接将原始图片分割成互不重合的小方块,然后通过卷积最后生产这样大小的特征图,基于上面的分析,可以认为特征图的每个元素也是对应原始图片的一个小方块,然后用每个元素来可以预测那些中心点在该小方格内的目标,这就是Yolo算法的朴素思想。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,整个系统如图5所示:首先将输入图片resize到448x448,然后送入CNN网络,最后处理网络预测结果得到检测的目标。(http://www.dataguru.cn/article-12966-1.html)
Yolo的CNN网络将输入的图片分割成S*S网格,然后每个单元格负责去检测那些中心点落在该格子内的目标,如图6所示,可以看到狗这个目标的中心落在左下角一个单元格内,那么该单元格负责预测这个狗。每个单元格会预测B个边界框(bounding box)以及边界框的置信度(confidence score)。所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度。前者记为Pr(object),当该边界框是背景时(即不包含目标),此时Pr(object)=0。而当该边界框包含目标时,Pr(object)=1。边界框的准确度可以用预测框与实际框(ground truth)的IOU(intersection over union,交并比)来表征,记为IOU。因此置信度可以定义为Pr(object)*IOU。很多人可能将Yolo的置信度看成边界框是否含有目标的概率,但是其实它是两个因子的乘积,预测框的准确度也反映在里面。边界框的大小与位置可以用4个值来表征:(x,y,h,w),其中(x,y)是边界框的中心坐标,而和是边界框的宽与高。还有一点要注意,中心坐标的预测值(x,y)是相对于每个单元格左上角坐标点的偏移值,并且单位是相对于单元格大小的,单元格的坐标定义如图6所示。而边界框的w和h预测值是相对于整个图片的宽与高的比例,这样理论上4个元素的大小应该在[0,1]范围。这样,每个边界框的预测值实际上包含5个元素:(x,y,w,h,c),其中前4个表征边界框的大小与位置,而最后一个值是置信度。
YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。
FPN(Feature Pyramid Networks ,特征金字塔)
FPN 主要解决的是物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量情况下,大幅度提升了小物体检测的性能。
对于卷积神经网络而言,不同深度对应着不同层次的语义特征,浅层网络分辨率高,学的更多是细节特征,深层网络分辨率低,学的更多是语义特征。
原来多数的object detection算法都是只采用顶层特征做预测,但我们知道低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而本文不一样的地方在于预测是在不同特征层独立进行的。
---------------------
https://blog.csdn.net/u014380165/article/details/72890275?utm_source=copy
下图FIg1展示了4种利用特征的形式:
(a)图像金字塔,即将图像做成不同的scale,然后不同scale的图像生成对应的不同scale的特征。这种方法的缺点在于增加了时间成本。有些算法会在测试时候采用图像金字塔。
(b)像SPP net,Fast RCNN,Faster RCNN是采用这种方式,即仅采用网络最后一层的特征。
(c)像SSD(Single Shot Detector)采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。
(d)本文作者是采用这种方式,顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的。
---------------------
https://blog.csdn.net/u014380165/article/details/72890275?utm_source=copy
如下图Fig2。上面一个带有skip connection的网络结构在预测的时候是在finest level(自顶向下的最后一层)进行的,简单讲就是经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预测。而下面一个网络结构和上面的类似,区别在于预测是在每一层中独立进行的。后面有这两种结构的实验结果对比,非常有意思,因为之前只见过使用第一种特征融合的方式.
作者的主网络采用ResNet。
作者的算法大致结构如下Fig3:一个自底向上的线路,一个自顶向下的线路,横向连接(lateral connection)。图中放大的区域就是横向连接,这里1*1的卷积核的主要作用是减少卷积核的个数,也就是减少了feature map的个数,并不改变feature map的尺寸大小.
自底向上其实就是网络的前向过程。在前向过程中,feature map的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变feature map大小的层归为一个stage,因此每次抽取的特征都是每个stage的最后一个层输出,这样就能构成特征金字塔。
自顶向下的过程采用上采样(upsampling)进行,而横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合(merge)。在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应(aliasing effect)。并假设生成的feature map结果是P2,P3,P4,P5,和原来自底向上的卷积结果C2,C3,C4,C5一一对应。
目前多尺度的物体检测主要面临的挑战为:
- 如何学习具有强语义信息的多尺度特征表示?
- 如何设计通用的特征表示来解决物体检测中的多个子问题?如 object proposal, box localization, instance segmentation.
- 如何高效计算多尺度的特征表示?
本文针对这些问题,提出了特征金字塔网络 FPN,如图 1(d) 所示,网络直接在原来的单网络上做修改,每个分辨率的 feature map 引入后一分辨率缩放两倍的 feature map 做 element-wise 相加的操作。通过这样的连接,每一层预测所用的 feature map 都融合了不同分辨率、不同语义强度的特征,融合的不同分辨率的 feature map 分别做对应分辨率大小的物体检测。这样保证了每一层都有合适的分辨率以及强语义特征。同时,由于此方法只是在原网络基础上加上了额外的跨层连接,在实际应用中几乎不增加额外的时间和计算量。
在 Fast RCNN 里,FPN 主要应用于选择提取哪一层的 feature map 来做 ROI pooling。实验发现 FPN 筛选 ROI 区域,同样对于 Fast RCNN 的小物体检测精度有大幅提升。
Q:如果不考虑时间情况下,image pyramid 是否可能会比 feature pyramid 的性能更高?(http://mdsa.51cto.com/art/201707/545995.htm)
A:作者觉得经过精细调整训练是可能的,但是 image pyramid 主要的问题在于时间和空间占用太大,而 feature pyramid 可以在几乎不增加额外计算量情况下解决多尺度检测问题。
可变形卷积网络deformable convolutional networks
微软亚洲研究院视觉计算组的研究员在arXiv上公布了一篇题为“Deformable Convolutional Networks”(可变形卷积网络)的论文,首次在卷积神经网络(convolutional neutral networks,CNN)中引入了学习空间几何形变的能力,得到可变形卷积网络(deformable convolutional networks),从而更好地解决了具有空间形变的图像识别任务。(https://blog.csdn.net/baidu_32173921/article/details/74453113)
微软亚洲研究院的研究员们发现,标准卷积中的规则格点采样是导致网络难以适应几何形变的“罪魁祸首”。为了削弱这个限制,研究员们对卷积核中每个采样点的位置都增加了一个偏移的变量。通过这些变量,卷积核就可以在当前位置附近随意的采样,而不再局限于之前的规则格点。这样扩展后的卷积操作被称为可变形卷积(deformable convolution)
卷积神经网络结构变化——Spatial Transformer Networks,STN创造性地在CNN结构中装入了一个可学习的仿射变换,目的是增加CNN的旋转、平移、缩放、剪裁性。为什么要做这个很奇怪的结构呢?原因还是因为CNN不够鲁棒,比如把一张图片颠倒一下,可能就不认识了.(https://blog.csdn.net/xbinworld/article/details/69367281)
以9个像素点的卷积窗口为例,只要为每个像素点加上一个偏移向量(上图 (b) (c) (d)),就可做到卷积窗口的可变形。(http://nooverfit.com/wp/msra%E5%BE%AE%E8%BD%AF%E4%BA%9A%E6%B4%B2%E7%A0%94%E7%A9%B6%E9%99%A2-cvpr%E6%9C%80%E6%96%B0%E5%8D%B7%E7%A7%AF%E7%BD%91%E7%BB%9C-deformable-convolutional-networks%E5%8F%AF%E5%8F%98%E5%BD%A2%E5%8D%B7/)(https://www.cnblogs.com/daihengchen/p/6880774.html)
STN是说CNN Kernel放死了(比如3*3大小),但是可以通过图片变换让CNN效果更好;而deformable是说既然图片可能各种情况,那我索性CNN的Kernel本身是不规整的,比如可以有dilation(膨胀),也可以旋转的,或者看起来完全没有规则的。如下图,(a)是常规的一个3*3卷积窗口,(b)蓝色点就是原来的卷积窗口加上了一个offset的情况,(c)表示可以对进行窗口进行scale和aspect ratio的变换,(d)表示旋转;
论文引入了两种新的模块来提高卷积神经网络 (CNN) 对变换的建模能力:可变形卷积 (deformable convolution) 和可变形兴趣区域池化(deformable ROI pooling),下面逐一介绍。
(1)可变形卷积 Deformable Convolution
先看传统卷积的一个定义:(https://blog.csdn.net/xbinworld/article/details/69367281)
R代表一个receptive field的grid: R={(−1,−1),(−1,0),...,(0,1),(1,1)}R={(−1,−1),(−1,0),...,(0,1),(1,1)},以3*3为例。
对于输出中每一个像素position P0,一般的卷积就是:
而可变形卷积做的是:
再看图1,把原来的卷积过程分成两路,上面一路学习offset Δpn,得到H*W*2N的输出(offset),N=|R|表示grid中像素个数,2N的意思是有x,y两个方向的offset。有了这个offset以后,对于原始卷积的每一个卷积窗口,都不再是原来规整的sliding window(图1中的绿框),而是经过平移后的window(蓝框),取到数据后计算过程和卷积一致。
就是这样简单吗?其实还相差一点,原因是Δpn不是整数像素,而是一个高精度的小数,不能直接获取像素坐标,而如果采用简单粗暴的取整又会有一定误差,因此就采用了和STN中一样的做法——双线性插值,插出每个点的像素值。公式上写成简洁的:
实际上做的就是找到小数的p所在的图像4像素grid,然后做双线性插值。上面公式这样写了以后可以和STN(参考上一篇)中做法一样,就通过BP端到端来训练了。
(2)可变形兴趣区域池化 Deformable RoI Pooling
思路和前面一样,一路学习offset,一路得到真正的pooling结果。
区别在于用的是FC,原因是ROI pooling之后的结果是固定大小的k*k,直接用FC得到k *k个offset。但是这些offset不能直接用,因为ROI区域大小不一,并且input feature map的w和h也是大小不一。作者提出的方法是用一个scale r:
下面是roi pooling原来的公式(用的是average?这个比较奇怪,一般都是用max的,当然按照这个逻辑,max pooling也很容易推出)
有了offset之后就可以这样做:
和前面一样,因为offset是带小数的,不能直接得到像素,需要用双线性插值算法得到每一个像素值。注意,这里的offset只有k*k个,而不是每一个像素一个。
(https://blog.csdn.net/qq_21949357/article/details/80538255)
NO3 语义分割
图像语义分割(Semantic Segmentation)是利用图像的语义信息,直接对每个像素进行分类。目前主流的做法是通过全卷积网络(Fully Convolutional Networks)进行逐一的像素特征提取,再使用条件随机场或者马尔科夫随机场对特征进行优化,最后得到分割图。
NO4 实例分割
实例分割(Instance Segmentation)是物体检测+语义分割的综合体。相对于物体检测的边界框,实例分割可以精确到物体的边缘;相对于语义分割,实例分割可以标注出同一物体的不同个体,而不是简单地标记出一堆属于人的像素。
(补充:
NO1.Region Proposal:可以解决滑动窗口的问题
候选区域(Region Proposal):是预先找出图中目标可能出现的位置。它利用了图像中的纹理、边缘、颜色等信息,可以保证在选取较少窗口(几千甚至几百)的情况下保持较高的召回率(Recall)。
常用的Region Proposal有(详见"What makes for effective detection proposals?"):
- Selective Search
- Edge Boxes
NO2.性能指标:(https://blog.csdn.net/xiaohu2022/article/details/79600037)
目标检测问题同时是一个回归和分类问题。首先,为了评估定位精度,需要计算IoU(Intersection over Union,介于0到1之间),其表示预测框与真实框(ground-truth box)之间的重叠程度。IoU越高,预测框的位置越准确。因而,在评估预测框时,通常会设置一个IoU阈值(如0.5),只有当预测框与真实框的IoU值大于这个阈值时,该预测框才被认定为真阳性(True Positive, TP),反之就是假阳性(False Positive,FP)。
对于二分类,AP(Average Precision评价查准率,查准率是指真正例在预测结果中的所有正例的占比;查全率是指真正例在所有真实正例中所占比例)是一个重要的指标,这是信息检索中的一个概念,基于precision-recall曲线计算出来,详情见这里。对于目标检测,首先要单独计算各个类别的AP值,这是评估检测效果的重要指标。取各个类别的AP的平均值,就得到一个综合指标mAP(Mean Average Precision),mAP指标可以避免某些类别比较极端化而弱化其它类别的性能这个问题。
对于目标检测,mAP一般在某个固定的IoU上计算,但是不同的IoU值会改变TP和FP的比例,从而造成mAP的差异。COCO数据集提供了官方的评估指标,它的AP是计算一系列IoU下(0.5:0.05:0.9,见说明)AP的平均值,这样可以消除IoU导致的AP波动。其实对于PASCAL VOC数据集也是这样,Facebook的Detectron上的有比较清晰的实现。
除了检测准确度,目标检测算法的另外一个重要性能指标是速度,只有速度快,才能实现实时检测,这对一些应用场景极其重要。评估速度的常用指标是每秒帧率(Frame Per Second,FPS),即每秒内可以处理的图片数量。当然要对比FPS,你需要在同一硬件上进行。另外也可以使用处理一张图片所需时间来评估检测速度,时间越短,速度越快。
)
关于目标检测 Object detection的更多相关文章
- 深度学习中目标检测Object Detection的基础概念及常用方法
目录 关键术语 方法 two stage one stage 共同存在问题 多尺度 平移不变性 样本不均衡 各个步骤可能出现的问题 输入: 网络: 输出: 参考资料 What is detection ...
- 关于目标检测(Object Detection)的文献整理
本文对CV中目标检测子方向的研究,整理了如下的相关笔记(持续更新中): 1. Cascade R-CNN: Delving into High Quality Object Detection 年份: ...
- 目标检测Object Detection概述(Tensorflow&Pytorch实现)
1999:SIFT 2001:Cascades 2003:Bag of Words 2005:HOG 2006:SPM/SURF/Region Covariance 2007:PASCAL VOC 2 ...
- 评价目标检测(object detection)模型的参数:IOU,AP,mAP
首先我们为什么要使用这些呢? 举个简单的例子,假设我们图像里面只有1个目标,但是定位出来10个框,1个正确的,9个错误的,那么你要按(识别出来的正确的目标/总的正确目标)来算,正确率100%,但是其实 ...
- 目标检测算法(1)目标检测中的问题描述和R-CNN算法
目标检测(object detection)是计算机视觉中非常具有挑战性的一项工作,一方面它是其他很多后续视觉任务的基础,另一方面目标检测不仅需要预测区域,还要进行分类,因此问题更加复杂.最近的5年使 ...
- ng-深度学习-课程笔记-13: 目标检测(Week3)
1 目标定位( object localization ) 目标定位既要识别,又要定位,它要做的事就是用一个框框把物体目标的位置标出来. 怎么做这个问题呢,我们考虑三目标的定位问题,假定图中最多只出现 ...
- [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法
4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...
- 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.
from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里, ...
- Python实现YOLO目标检测
作者:R语言和Python学堂 链接:https://www.jianshu.com/p/35cfc959b37c 1. 什么是目标检测? YOLO目标检测的一个示例 啥是目标检测? 拿上图 (用YO ...
随机推荐
- asp访问数据库原理以及代码
ActiveX Data Objects (ADO) 是一项容易使用并且可扩展的将数据库访问添加到 Web 页的技术.可以使用 ADO 去编写紧凑简明的脚本以便连接到 Open Database Co ...
- JQurey大纲
- Python3.7中的常用关键字
本文是在学习Python中遇到的一些关键字,作为日常总结的笔记. Python中有保留字/关键字 保留字就是在Python中预先保留的标识符,这些标识符在Python程序中具有特定用途,不能被程序员作 ...
- Hibernate---criteria的具体使用列子
方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge > ...
- Java模拟数据量过大时批量处理数据的两种实现方法
方法一: 代码如下: import java.util.ArrayList; import java.util.List; /** * 模拟批量处理数据(一) * 当数据量过大过多导致超时等问题可以将 ...
- 装饰器阶段性练习(题目)[转载http://www.cnblogs.com/linhaifeng/p/7278389.html]
# 一:编写函数,(函数执行的时间是随机的)# 二:编写装饰器,为函数加上统计时间的功能# 三:编写装饰器,为函数加上认证的功能## 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件 ...
- shell脚本切割tomcat日志文件
转自:http://www.cnblogs.com/lishun1005/p/6054816.html 鉴于在调试logback和log4j的文件切割一直无法成功,随性用shell写个脚本用来切割to ...
- [Atcoder Code Festival 2017 Qual B Problem F]Largest Smallest Cyclic Shift
题目大意:给你\(A\)个a,\(B\)个b,\(C\)个c,要你构造一个字符串,使它的最小循环表示法最大.求这个表示法.解题思路:不知道怎么证,但把a.b.c当做单独的字符串扔进容器,每次把字典序最 ...
- ASP.NET-Session cooike
Application .Cookie和 Session 两种会话有什么不同 答:Application是用来存取整个网站全局的信息,而Session是用来存取与具体某个访问者关联的信息, Sessi ...
- Tarjan缩点【模板】
#include <algorithm> #include <cstdio> #include <map> using namespace std; ); map& ...