精华内容
下载资源
问答
  • 目标检测算法

    千次阅读 2020-05-23 09:58:09
    目标检测算法 文章目录目标检测算法全卷积神经网络(FCN)非极大值抑制(Non-max suppression)R-CNN算法流程SPP-Net(Spatial Pyramid Pooling Net)Fast-RCNNFaster-RCNNFaster-RCNN-RPN的损失函数Faster-RCNN的...

    目标检测算法

    全卷积神经网络(FCN)

    对于一个各层参数结构都设计好的神经网络来说,输入的图片大小需要是固定的,如AlexNet,VGGNet等都需要输入固定大小的图片才能正常工作

    FCN的精髓是让一个已经设计好的网络可以输入任意大小的图片

    在这里插入图片描述

    在这里插入图片描述

    Q:为什么FCN的速度比普通的滑动窗口快?

    A:普通的滑动窗口方法是对每次窗口内的图像进行判断(判断是前景还是背景,如果是前景则需要判断是哪种物体),相当于每次判断都是对图像进行识别(分类);而FCN则使用卷积操作,将图像“缩小”,缩小后的图像上的每个点都对应原图像上的一个区域,这样就只用判断缩小后图像上的每个点是否是目标区域即可,大大减少了计算量

    mAP(mean average precision)平均准确率均值

    每个类别都可以根据recall和precision绘制一条曲线,那么AP就是该曲线下的面积,而mAP是多个类别AP的平均值,这个值介于[0,1],且越大越好,该指标是目标检测算法中最重要的一个

    非极大值抑制(Non-max suppression)

    在这里插入图片描述

    选出置信度最高的候选框,如果和当前最高分的候选框重叠面积IoU大于一定阈值,则将其删除(如上图,红色框是置信度最高的候选框,如果黄色,蓝色候选框和红色框的IoU大于一定阈值,则将其去掉)

    当存在多预测目标时,先选取置信度最大的候选框b1,然后根据IoU阈值来去除b1候选框周围的候选框,然后在选取置信度第二大的候选框b2,然后去除b2候选框周围的候选框

    R-CNN

    RCNN(Regions with CNN feature)是将CNN方法应用到目标检测问题上的一种算法,借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测

    前面提到滑动窗口法可以得到目标所在的区域,但是会产生大量的计算,除了滑动窗口法之外,还有另外一类基于区域(Region Proposal)的方法,selective search就是其中之一

    selective search(该算法的作用就是用来生成候选区域!)

    • step1:计算区域集R里每个相邻区域的相似度S={s1,s2,…}

    • while S≠空集:

      ​ step2:找出相似度最高的两个区域,将其合并为芯级Rt,添加进R

      ​ step3:从S中移除所有与step2中有关的子集

      ​ step4:重新计算新集Rt与所有子集的相似度

      (这里的相似度主要考虑颜色,纹理,尺寸,交叠四个方面)

    在这里插入图片描述

    算法流程
    • 1.选择一个分类模型(如AlexNet,VGGNet等)

    • 2-1 去掉最后一个全连接层

      2-2 将分类数从1000改为N+1(对于VOC数据集N=20)

      2-3 对该模型做fine-tuning(主要目的是优化卷积层和池化层的参数)

    • 3.论文使用的分类器是VGG16,用到的网络Pool5后面的一层是fc6全连接层,对每一个候选区域进行特征提取:

      Resize区域大小,然后做一次前向运算,将第五个池化层的输出(也就是候选框提取到的特征)保存到硬盘

    • 4-1 训练阶段(分类):

      使用pool5输出的图像特征训练SVM分类器,来判断这个候选框里的物体类别

      4-2 测试阶段:

      每个类别对应一个SVM,判断是不是属于这个类别

    • 5-1 训练阶段(回归):

      使用pool5输出的图像特征训练一个回归器(dx,dy,dw,dh),dx表示水平平移,dy表示竖直平移,dw表示宽度缩放,dh表示高度缩放

      5-2 测试阶段:

      使用回归器调整候选框位置

    SPP-Net(Spatial Pyramid Pooling Net)

    SPP-Net的思想对RCNN进化贡献很大

    RCNN的最大瓶颈是生成的2k个候选区域都要经过一次CNN,速度非常慢,SPP-Net最大的改进是只需要将原图做一次卷积操作,就可以得到每个候选区域的特征

    (下图的上面是RCNN,下面是SPP-Net)

    在这里插入图片描述

    SPP-Net的重点是金字塔池化层(Spatial Pyramid Pooling)

    金字塔池化层可以将不同大小的特征同变成相同大小

    下图表示任意一张特征图经过金字塔池化后都会得到21个值(16+4+1)

    在这里插入图片描述

    特征映射:对卷积层可视化可以发现,输入图片的某个位置的特征反应在特征图上也是在相同的位置

    Fast-RCNN

    在这里插入图片描述

    ROI Pooling

    ROI-Pooling层其实是SPP-Net中金字塔池化层的一种简化形式,ROI-Pooling层只使用一种固定输出大小的max-pooling将每个候选区域均匀分成 MxN块,对每块进行max-pooling,将特征图上大小不一的候选区域转变为统一大小的数据,送入下一层

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    Fast-RCNN把bbox regression放进了神经网络内部,与Region分类合并成为了一个multi-task模型,这两个任务能够共享卷积特征,并相互促进,这个结构的优化极大提升了模型的训练和预测速度(下图是fast-RCNN的multi-task)

    在这里插入图片描述

    Faster-RCNN

    Faster-RCNN加入了一个专门生成候选区域的神经网络,也就是说,找到候选框的工作也交给了神经网络来做了

    Faster-RCNN可以简单看做“区域生成网络+Fast-RCNN”的系统,用区域生成网络代替fast-RCNN中的Selective Search方法

    在这里插入图片描述

    下图是Faster-RCNN结构图

    在这里插入图片描述

    在Faster-RCNN中经过了两次分类算法,RPN中的分类算法是判断候选框内是否有物体(二分类),输出层的分类是对候选框内物体种类的分类(目标有多少类就分多少类+1)

    下图是Region Proposal Network(RPN)结构图

    在这里插入图片描述

    经过多次卷积-池化后的特征图上的每一点都可以映射到原图中的一片区域,然后以该区域的中点为中心生成9个候选框(大小分别是128x128 256x256 512x512)

    RPN的计算流程

    • 1.最后一个卷积层输出的特征图再次进行一次卷积操作得到新的特征图
    • 2.新的特征图的平面上有40x60共2400个点,每个点都可以对应到原始的图片上,得到9个候选框,所以一共可以得到40x60x9大约20000个候选区域
    • 3.计算所有候选区域的scores
    • 4.把所有超出图片的候选区域都限制在图片区域内,选scores最大的前12000个候选区域

    在这里插入图片描述

    Faster-RCNN-RPN的损失函数

    L(pi,ti)=1NclsiLcls(pi,pi)+λ1NregipiLreg(ti,ti)L({p_i},{t_i})=\frac{1}{N_{cls}}\sum_iL_{cls}(p_i,p_i^*)+\lambda\frac{1}{N_{reg}}\sum_ip_i^*L_{reg}(t_i,t_i^*)

    函数由两部分组成,一部分是目标预测的loss,一部分是回归预测的loss

    考虑分类的loss:

    pip_i为anchor预测为目标的概率

    GT标签:pi={0negative label1positive labelp_i^*=\begin{cases}0 &\text{negative label}\\1 &\text{positive label}\end{cases}

    如果anchor为正,则GT标签pip_i^*为1;anchor为负,GT标签pip_i^*为0

    Lcls(pi,pI)=log[pIpi+(1pi)(1pi)]L_{cls}(p_i,p_I^*)=-\log[p_I^*p_i+(1-p_i^*)(1-p_i)]

    pip_i^*为0时,Lcls(pi,pi)=log(1pi)L_{cls}(p_i,p_i^*)=-\log(1-p_i)

    pip_i^*为1时,Lcls(pi,pi)=log(pi)L_{cls}(p_i,p_i^*)=-\log(p_i)

    NclsN_{cls}为Mini-Batch大小,为256

    考虑回归的loss:

    ti=tx,ty,tw,tht_i={t_x,t_y,t_w,t_h},表示bounding box4个坐标参数

    tit_i^*是与positive anchor对应的ground truth的4个坐标参数

    pip_i^*为0时,回归的loss为0

    pip_i^*为1时,才需要考虑回归loss:Lreg(ti,ti)=R(titi)L_{reg}(t_i,t_i^*)=R(t_i-t_i^*)

    R为smoothL1(x)={0.5x2if |x|<1x0.5otherwisesmooth_{L_1}(x)=\begin{cases}0.5x^2& \text{if |x|<1}\\|x|-0.5& \text{otherwise}\end{cases}

    tx=(xxa)/wa,ty=(yya)/ha,tw=log(w/wa),th=log(h/ha)t_x=(x-x_a)/w_a,t_y=(y-y_a)/h_a,t_w=\log(w/w_a),t_h=\log(h/h_a)

    tx=(xxa)/wa,ty=(yya)/ha,tw=log(w/wa),th=log(h/ha)t_x^*=(x^*-x_a)/w_a,t_y^*=(y^*-y_a)/h_a,t_w^*=\log(w^*/w_a),t_h^*=\log(h^*/h_a)

    x,y,w,h是预测框中心的(x,y)坐标,宽,高

    xa,ya,wa,hax_a,y_a,w_a,h_a是anchor box中心的(x,y)坐标,宽,高

    x,y,w,hx^*,y^*,w^*,h^*是真实标注框中心的(x,y)坐标,宽,高

    λ\lambda是回归权重,论文中设置为10,NregN_{reg}为anchor位置的数量,约等于40*60=2400

    Faster-RCNN的训练流程
    • 1.用ImageNet模型初始化,独立训练一个RPN网络
    • 2.仍然用ImageNet模型初始化,但是使用上一步RPN网络产生的Proposal作为输入,训练一个Faster-RCNN网络
    • 3.使用第二步的Fast-RCNN网络参数初始化一个新的RPN2网络,但是把RPN2、Faster-RCNN共享的哪些卷积层的learning rate设置为0,也就是不断更新,仅仅更新RPN2特有的哪些网络层,重新训练
    • 4.仍然固定RPN2、Faster-RCNN共享的那些网络层,把Faster-RCNN特有的网络层也加入进来,形成一个统一的网络,继续训练,fine tune Fast-RCNN特有的网络层

    目标检测的one-stage & two-stage

    Two-stage:Faster-RCNN

    Two-stage检测算法将检测问题划分为两个阶段,首先产生候选区域(Region proposal),然后对候选区域分类(一般还需要精修)

    特点是:错误率低,漏识别率也较低,但是速度较慢,不太能满足实时检测场景

    One-stage:SSD,YOLO

    One-stage不需要Region proposal阶段,可以直接产生物体的类别概率和位置坐标值,经过单词检测即可直接得到最终的检测结果

    特点:速度更快

    SSD(Single shot multibox detector)

    在这里插入图片描述

    特征金字塔

    在这里插入图片描述

    上图左边的方法针对输入的图片获取不同尺度的特征映射,但是在预测阶段仅仅使用了最后一层的特征映射,而SSD不仅获得不同尺度的特征映射,同时在不同的特征映射上进行预测,它在增加运算量的同时可能会提高检测的精度,因为它考虑了更多尺度的特征

    不同的卷积层会输出不同大小的特征图(这是由于Pooling层的存在,它会将图片尺寸变小)而不同的特征图中包含有不同的特征,而不同特征可能对我们的检测有不同的作用,总的来说,浅卷积层可以得到物体边缘的信息,而深层网络可以得到更抽象的特征

    YOLO (You Only Look Once)

    YOLO V1

    YOLO V1的核心思想就是利用整张图作为网络的输入,将目标检测作为回归问题解决,直接在输出层回归预选框的位置及其所属的类别

    YOLO最左边是一个InceptionV1网络,共20层(作者做了相应改进,用一个1x1卷积并联一个3x3卷积来代替)

    InceptionV1提取出的特征图再经过4个卷积层和2个全连接层,最后生成7x7x30的输出

    在这里插入图片描述

    解释为什么是7x7x30的输出

    YOLO将一副448x448的原图分割成了7x7=49个网格,每个网格要预测两个bounding box的坐标(x,y,w,h)和box内是否包含物体的置信度confidence(每个bounding box有一个confidence),以及物体属于20类别(以VOC数据集为例)中每一类的概率,所以一个网格对应一个(4x2+2+20)=30维的向量(4x2表示两个bbox的参数,2表示2个置信度,20表示分类数量)

    下图是输出的结构图

    在这里插入图片描述

    下图中,7x7网格内的每个小网格(红色网格),对应两个大小形状不同的bbox(黄色框),每个box的位置坐标为(x,y,w,h),x,y表示box中心点与该格子边界的相对值,w,h表示预测box的宽度和高度相对于整幅图像的宽度和高度的比例

    (x,y,w,h)会限制在[0,1]之间,与训练数据集上标定的物体真实坐标(Gx,Gy,Gw,Gh)进行对比训练,每个小网格负责检查中心点落在该格子的物体

    这个置信度只是为了表达box内有无物体的概率(类似于Faster RCNN中RPN层的softmax预测anchor是前景还是背景的概率),并不预测box内物体属于哪一类

    在这里插入图片描述

    confidence置信度

    Pr(Object)IoUpredtruthPr(Object)*IoU_{pred}^{truth}

    其中前一项表示有无人工标记的物体落入了网格内,如果有则为1,否则为0,第二项表示bbox和真实标记的box之间的IoU,值越大,则box越接近真实位置

    confidence是针对bounding box的,每个网格有两个bbox,所以每个网格会有两个置信度与之对应

    YOLO-V1预测工作流程
    • 1.每个格子得到两个bbox

    • 2.每个网格预测的class信息和bbox预测的confidence信息相乘,得到了每个bbox预测具体物体的概率和位置重叠的概率PrIoU

      Pr(ClassiObject)Pr(Object)IoUpredtruth=Pr(Classi)IoUpredtruthPr(Class_i|Object)*Pr(Object)*IoU_{pred}^{truth}=Pr(Class_i)*IoU_{pred}^{truth}

    • 3.对于每个类别,对PrIoU进行排序,去除小于与之的PrIoU,然后做非极大值抑制

    在这里插入图片描述

    YOLO-V1的代价函数

    YOLOV1的代价函数包含三部分:位置误差,confidence误差,分类误差

    YOLO-V1的缺点
    • 1.每个网格只对应两个bbox,当物体的长宽比不常见(也就是训练数据覆盖不到时),效果较差
    • 2.原始图片只划分为7x7的网格,当两个物体靠的很近时,效果较差
    • 3.最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)
    • 4.对于图片中比较小的物体,效果比较差(这其实是所有目标检测算法的通病,SSD对这个问题有一些优化)

    YOLO-V2

    DarkNet-19结构图

    在这里插入图片描述

    YOLO-V2的精确度优化

    • 1.High Resolution Classifier

      YOLO-V2首先修改预训练分类网络的分别率为448x448,在ImageNet上训练10个周期,这个过程让网络有足够的时间去适应高分辨率的输入,然后在fine tune为检测网络

    • 2.Convolutional With Anchor Boxes

      YOLO-V1使用全连接层进行bbox预测,这会丢失较多的空间信息,导致定位不准

      YOLO-V2借鉴了Faster RCNN中的anchor思想:卷积特征图上进行滑动窗口采样,每个中心预测9种不同大小和比例的anchor。总的来说,就是==移除全连接层(以获得更多的空间信息)使用anchor boxes去预测bbox,并且,YOLO-V2由anchor box同时预测类别和坐标==

      Convolutional With Anchor Boxes的具体做法:

      • 去掉最后的池化层确保输出的卷积特征图有更高的分辨率
      • 缩减网络,让图片输入分辨率为416x416,目的是让后面产生的卷积特征图宽,高都为技术,这样就可以产生一个center cell(中心点),因为大物体通常占据了图像的中间位置,可以只用一个中心的cell来检测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可以稍微提升效率
      • 使用卷积层降采样(factor=32),使得输入卷积网络的416x416图片最终得到13x13的卷积特征图(416/32=13)
      • 由anchor box同时预测类别和坐标,因为YOLO是由每个cell来负责预测类别,每个cell对应的2个bounding box负责预测坐标,YOLO-V2中,不再让类别的预测与每个cell(空间位置)绑定一起,而是全部放到anchor box中
    • 3.Dimension Clusters(维度聚类)

      在使用anchor时,Faster-RCNN中的anchor boxes的个数和宽,高维度往往是手动精选的先验框(hand-picked priors),如果能够一开始就选择了更好的,更有代表性的先验框维度,那么网络就应该更容易学到准确的预测位置

      YOLO-V2中利用K-means聚类方法,通过对数据几种的Ground Truth box做聚类,找到Ground Truth box的统计规律,以聚类个数k为anchor boxes个数,以聚类中心框的宽和高为anchor box的宽和高

    • 4.Direct location prediction(直接位置预测)

      使用anchor boxes的另一个问题是模型不稳定,尤其是在早期迭代的时候,大部分的不稳定现象出现在预测框的(x,y)坐标时,YOLO-V2没有用Faster-RCNN的预测方式

      YOLO-V2位置预测值tx,tyt_x,t_y就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)范围内(每个cell的尺度看作是1)

    • 5.Fine-Grained Features(细粒度特征)

      SSD通过不同大小的特征图结合预测框来实现多尺度,而YOLO-V2则采用了另一种思路,添加一个passthrough layer,来获取之前的26x26x512的特征图特征,对于26x26x512的特征图,经过pass through layer后就变成了13x13x2048的新特征图(新特征图大小降低4被,而通道数增加4被),这样就可以与后面的13x13x1024特征图连接在一起,形成13x13x3072大小的特征图,然后在此特征图基础上卷积做预测

      YOLO-V2的检测器使用的就是经过扩展后的特征图,他可以使用细粒度特征

    在这里插入图片描述

    • 6.Multi-Scale Training(多尺度训练)

      原始YOLO网络使用固定的448x448的图片作为输入,加入anchor boxes后输入变成416x416,由于网络只用刀了卷积层和池化层,就可以进行动态调整(检测任意大小的图片),为了让YOLO-V2对不同尺寸图片具有鲁棒性,不同于固定网络输入图片尺寸的方法,没经过10批次(10 batches)就会随机选择新的图片尺寸,网络使用的降采样参数为32,于是使用32的倍数,最小的尺寸为320x320,最大尺寸为608x608,调整网络到相应维度,然后继续进行训练,这种机制使得网络可以更好的预测不同尺寸的图片,同一个网络可以进行不同分辨率的检测任务

    YOLO-V3

    YOLO-V3的基础框架为DarkNet-53

    在这里插入图片描述

    YOLO-V3结构图如下

    在这里插入图片描述

    YOLO-V3先验框

    YOLO-V3有3个不同特征尺度的输出,分别是13x13x255,26x26x255,52x52x255

    YOLO-V2已经开始采用K-means聚类得到先验框的尺寸,YOLO-V3延续了这种方法,为每种下采样尺度设定3中先验框,总共聚类出9中尺寸的先验框

    分配上,在最小的13x13特征图上(有最大的感受野)应用较大的先验框,是和检测较大的对象,中等的26x26特征图上(中等感受野),应用中等的先验框,较大的52x52特征图(较小感受野)应用较小的先验框,适合检测较小对象

    特征图 13x13 26x26 52x52
    感受野
    先验框 (116x90),(156x198),(373x326) (30x61),(62x45),(59x119) (10x13),(16x30),(33x23)
    展开全文
  • 本文来自csdn,本文主要介绍了目标检测算法和物体关键点检测的应用场景以及位置检测的算法特点。 目标检测概念 目标检测这里阐述两个应用场景,1为物体位置检测,2为物体关键点检测。 1物体位置检测 相比与图片分类...
  • 本文便对mAP最高的目标检测算法进行了盘点。趁最近目标检测(Object Detection)方向的论文更新较少,赶紧做个"最强目标检测算法"大盘点。要知道衡量目标检测最重要的两个性能就是精度和速度,特指 mAP 和 F...

    d255e10e8148b686894cc8ce3e551ca0.png

      新智元推荐  

    来源:CVer(ID:CVerNews)

    作者:Amusi

    整理编辑:三石

    【新智元导读】目标检测中存在两个非常重要的性能:精度和速度,特指mAP和FPS。本文便对mAP最高的目标检测算法进行了盘点。

    趁最近目标检测(Object Detection)方向的论文更新较少,赶紧做个"最强目标检测算法"大盘点。

    要知道衡量目标检测最重要的两个性能就是 精度和速度特指 mAP 和 FPS。其实现在大多数论文要么强调 mAP 很高,要么就是强调 mAP 和 FPS 之间 Trade-off 有多好。

    本文就来盘点一下 mAP 最高的目标检测算法,小编将在COCO数据集上 mAP 最高的算法认为是"性能最强"目标检测算法。(COCO数据集是现在最主流的目标检测数据集,这一点看最新的顶会论文就知道了)

    时间:2019.07.07

    盘点内容:目标检测 mAP 最高的算法

    说到目标检测算法,大家脑子里最先蹦出来的算法应该是 Faster R-CNN 和 YOLOv3。这一点在我调研的时候,从大家的反馈明显看得出来。

    要知道 Faster R-CNN已经是2015年提出的论文了,而YOLOv3发表出来也已经一年多了。最近目标检测相关的论文,比较典型的有:SNIPER、CornerNet、ExtremeNet、TridentNet、FSAF、FCOS、FoveaBox、两个CenterNet 和 CornerNet-Lite等。

    这么多目标检测算法,究竟哪家最强呢?!

    性能最强的目标检测算法

    这里罗列了几个mAP很强很强的算法,并以时间线的角度来展示。

    注意:各个网络使用不同backbone,或加不同的tricks,都会有不同的 mAP。所以小编只介绍所能查到最强的算法或者最强组合算法。

    SNIPER: Efficient Multi-Scale Training

    462f6d91ba50dd11963fbda0e038dd99.png

    mAP:47.6

    Date:2018.05.23

    arXiv:https://arxiv.org/abs/1805.09300

    https://github.com/MahyarNajibi/SNIPER/

    f644204fe665335acbbdffeadafab444.png

    TridentNet:Scale-Aware Trident Networks for Object Detection

    7e8b774b176b76132fc08302c7d36eb3.png

    mAP:48.4

    Date:2019.01.07 (已开源)

    arXiv:https://arxiv.org/abs/1901.01892

    https://github.com/TuSimple/simpledet

    8cb7813c8ec285b371ad26ac11507bb5.png

    HTC + DCN + ResNeXt-101-FPN

    4e9a55448ca2e80260b6484c4eef6040.png

    mAP:50.7

    Date:2019.01.22 (已开源)

    arXiv:https://arxiv.org/abs/1901.07518

    https://github.com/open-mmlab/mmdetection

    cce4674836007354ad81aabb84370f1c.png

    0c162ef1e657ed734310cbc1e647bfff.png

    NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection

    7b623d09e2fef155710db1dc713d08c5.png

    mAP:48.3

    Date:2019.04.16 (未开源)

    arXiv:https://arxiv.org/abs/1904.07392

    ada638471bc916b19ac574295a5cb4ca.png

    CornerNet-Saccade+gt attention

    0b78c8c9373cff058c3fb0d251e43653.png

    mAP:50.3

    Date:2019.04.18 (已开源)

    arXiv:https://arxiv.org/abs/1904.08900

    https://github.com/princeton-vl/CornerNet-Lite

    b1323a8f28e57dc94d04a53a024f2036.png

    Cascade R-CNN:High Quality Object Detection and Instance Segmentation

    4670e205445498b058126b80e0ae935e.png

    mAP:50.9

    Date:2019.06.24 (已开源)

    arXiv:https://arxiv.org/abs/1906.09756

    Caffe:https://github.com/zhaoweicai/cascade-rcnn

    PyTorch:https://github.com/zhaoweicai/Detectron-Cascade-RCNN

    14904514ff0bba9819c9d32a27383945.png

    Learning Data Augmentation Strategies for Object Detection

    e594ed570cbd13f0a4b68ca794bf039a.png

    mAP:50.7

    Date:2019.06.26 (已开源)

    arXiv:https://arxiv.org/abs/1906.11172

    https://github.com/tensorflow/tpu/tree/master/models/official/detection

    f7f56709fe8ce365d83c9265746cb533.png

    综上所述,可知改进后的 Cascade R-CNN 算法是目前(2019.07.07)目标检测方向性能最强的算法,其 mAP 为 50.9。

    侃侃

    这里将 mAP 作为目标检测最强的指标,确实有失偏颇,不够严谨,因为很多人将目标检测应用在不同的任务上,其实要求的性能也有所不同。但请放心,小编后续会统计一波 FPS最快的目标检测算法 和 mAP-FPS Trade-off 最佳的算法。

    本文经授权转载自微信公众号“CVer”,ID:CVerNews

    5402d56539742beb4d315f77d02a428d.png

    c9b25a8350c37068dc2489ecb27943e9.png

    6b0972154a6592b829283087660b5308.png

    f7d99e78fa79b7123080f9e508b8359f.gif

    展开全文
  • 在此期间,也针对这个比赛尝试了一些目标检测算法并做了大量的优化,目前由于Jetson TX2开发板还没到,只能在1080Ti和CPU上进行测速,最终模型精度为0.83mIOU,模型参数量是2.33M,模型大小是9.7M,在1080Ti可以达到...

    fcf047b8f01c3a6652d5c2e5b3379db3.png

    首先说声抱歉,隔了这么久才第一次更新专栏(中间经历了DAC和CVPR的rebuttal,导致拖到了现在)。。

    在此期间,也针对这个比赛尝试了一些目标检测算法并做了大量的优化,目前由于Jetson TX2开发板还没到,只能在1080Ti和CPU上进行测速,最终模型精度为0.83mIOU,模型参数量是2.33M,模型大小是9.7M,在1080Ti可以达到342.2fps,在CPU上可以达到30.5fps(去年第一名在Jetson TX2上达到24.55fps,精度为0.697mIOU)。。。言归正传,接下来的几期专栏会分别从实时目标检测算法,数据集分析和指标分析以及一些涨点黑科技进行分析。

    场景需求:

    给定一张图片,需要实时地识别出图片中的目标并确定其位置。这也是这个比赛比较有趣的地方,极少的目标检测比赛有实时性的要求,而这个需求是更加偏向产品的。通过这个需求分析,就可以快速帮助我们过滤掉一些目标检测算法。

    粗筛:

    目前目标检测算法可以分为两大派系,(1)Two stage: 以RCNN系为代表,这个派系的突出特点就是准,口号是“目标检测两步走,先找框再修框”。(2)One stage: 以Yolo系,SSD系以及Retinanet为代表,这个派系的突出特点就是快,口号是“目标检测一步走,看完图就出框”。当然这两个派系的特点是相对的,One stage也会有比Two stage更准的模型,Two stage也会有比One stage更快的模型。这么说的原因是:影响目标检测速度和精度不仅仅是派系不同,还可能是采用的特征提取模型(也就是常说的backbone),输入分辨率,特征图尺寸,候选框的个数(锚框的个数)等等。贴一张谷歌CVPR18的一篇论文Speed/accuracy trade-offs for modern convolutional object detectors(https://arxiv.org/abs/1611.10012)来说明这个问题:

    751fea9ba785c918e7c3b95a1923e8b9.png
    图一:不同backbone对模型的精度和速度的影响

    看完这个图后,我们会发现仅仅从派系判断模型是快是慢,是准还是不准,这显然是不行的。这就让我们不得不思考一个问题,Two stage派系到底慢在哪?这就引出了两篇论文,第一篇就是上图所画的R-FCN(R-FCN: Object Detection via Region-based Fully Convolutional Networks),另外一篇就是Light-Head RCNN(Light-Head R-CNN: In Defense of Two-Stage Object Detector)。这里所说的Two stage派系特指进化后的R-CNN,即最终的Faster R-CNN,这个版本在速度和精度上比起之前的R-CNN和Fast R-CNN已经有了大大的提升。首先我们再来理一下Faster R-CNN的流程,先通过区域推荐网络(RPN)确定候选框,然后每一个候选框都会分别送入 ROI Pooling 层,再接几层全连接层做分类和回归,如图二所示。

    40093788abc2a7656789ac6415fd88f9.png
    图二:Faster R-CNN 流程图

    显然对每个候选框都做特征提取并用全连接层做分类和回归是极其耗时的,而且速度和保留的候选框数目相关,一般为了保证精度,这里候选框数目会设定为512。那么一个最直接的想法就是能不能把最后的全连接层去掉,这样不就可以大大提升速度了吗?答案是可以的,这就是R-FCN干的事情,采用了位置敏感得分图和选择性池化(Position-sensitive score map和Position-sensitive RoI pooling),并利用一个平均池化层来产生分类和回归的向量,如图三所示,以这种方式可以减少了上百个候选框的FC层运算,因而R-FCN在速度上比 Faster R-CNN 快了 2.5 倍(这个速度提升还有一部分gain是来自减少了候选框的个数)。

    7d4281409f4eb134c348491ed9eea712.png
    图三:R-FCN 流程图

    但是为了让最终的特征图具有位置敏感的特点,必须满足channel数为

    , 其中C是类别数,
    是分成空间网格的数目,对于COCO来说,P设置为7,C为80,则总的channel数为3969,这就必然造成很大的时间和存储的开销。于是这就有了Light-Head RCNN的工作,首先采用大的可分离卷积(large separable convolution)生成channel数更少的特征图,并且利用FC层代替R-FCN中的平均池化层,从而避免空间信息的丢失,如图四所示。通过一系列的优化,可以在速度和精度上都超过One stage系列的算法,如图五所示。

    e95dbeb0fa9a5c36a90fbcc2d4a8e291.png
    图四:Light-Head RCNN 流程图

    532e6492765b34ca6edcdc7914a4f5da.png
    图五:Light-Head RCNN 精度/速度

    到此,经过激烈的斗争,进入第二轮细选的选手有:Two stage派代表:Light-Head RCNN, One stage代表:YOLOv1,YOLOv2,YOLOv3,SSD,Retinanet。

    下一期将会对第二轮选手进行进一步的分析,待续.....

    展开全文
  • ACF目标检测算法论文

    2017-08-19 16:34:10
    ACF目标检测算法是常用的目标检测算法之一,本文主要讲述了ACF目标检测的原理
  • 交通标志检测在自动驾驶、汽车主动安全中应用非常重要,通用的目标检测算法可以通过微调网络的方式直接用于交通标志检测。如何在不同的硬件平台和应用环境中选择算法?今天介绍的刚刚被《Neurocomputing 》接收的...

    abe29afb0a8288081fef3ef764bc1758.png


    交通标志检测在自动驾驶、汽车主动安全中应用非常重要,通用的目标检测算法可以通过微调网络的方式直接用于交通标志检测。如何在不同的硬件平台和应用环境中选择算法?今天介绍的刚刚被《Neurocomputing 》接收的论文《Evaluation of deep neural networks for traffic sign detection systems》做了一个较为详尽的评估比较。
    来自西班牙Universidad de Sevilla 的学者全方位评估了现有主流的目标检测算法用于交通标志检测,对于进行相关研究和开发的人员具有重要的参考价值。 作者信息:

    165b6e28e72f7782c10df355f7e2a2cf.png


    作者评估了目前目标检测的state-of-the-art算法,包括Faster R-CNN、R-FCN、SSD、YOLO V2,并把它们与各种提取网络结合,包括Resnet V1 50、Resnet V1 101、Inception V2、Inception Resnet V2、Mobilenet V1、Darknet-19。 下图列出了所有评估组合:

    87a68c33029133622daa61f676ce9df2.png


    使用上述开源目标检测模型在Microsoft COCO数据集上的预训练权重,然后在交通标志数据库German Traffic Sign Detection Benchmark dataset(GTSDB)训练集上微调网络,然后在该数据集测试集上评估。
    评估指标包括:mAP、FPS、内存占用、FLOPS、参数量。
    GTSDB库示例

    bf1aa4bdf10e210d7a90f0da346d6d45.png


    GTSDB含有900幅图像,共计1206个交通标志,其中600幅训练图像含有846个交通标志,300幅测试图像含有360个交通标志。交通标志类别分为mandatory, prohibitory, danger, 和 other四类,本次评估仅考虑前三类。硬件平台
    CPU Intel Core i7-4770, 内存16GB,GPU是拥有3840CUDA核心与12GB显存的NVIDIA Titan Xp。评估结果
    检测精度结果

    d1adb4cd086116b71fe6e6a9e88c1f78.png


    按照mAP排序的结果

    12962b6d0de900ccdf39a138282c72f2.png


    精度与运行时间散点图

    71e38d1361542f00fb6fc4a5c32c09a2.png


    各个模型在小、中、大目标上的检测结果对比

    3f256f0a3bafa61ea21fd350d10c42dd.png


    内存占用与运行时间散点图

    4b8b68ed02ac0aaf423be7d852bd7f5a.png


    检测结果示例

    f024f23adfe4a824d68658349f72aa2b.png

    571e49fd29da06cfefb786c4746f000b.png

    结论
    Faster R-CNN与Inception Resnet V2的组合达到最高的mAP(95.77%),R-FCN与Resnet 101组合达到精度(95.15%)和速度(85.45ms每幅图像)的最佳平衡,YOLO V2取得了有竞争力的精度(78.83%)并且是第二快的(21.48ms每幅图像),SSD MobileNet则是最快的模型(15.14ms每幅图像),也是对内存要求最低的(94.70MB)。
    SSD MobileNet最适合在移动端和嵌入式设备部署,但对小的交通标识检测结果不好。
    文中所用的代码与模型下载地址请查看原论文。
    论文地址:https://www.sciencedirect.com/science/article/pii/S092523121830924X
    本文转载自公众号:我爱计算机视觉

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,转载请附上原文出处链接和本声明。
    本文链接地址:https://www.flyai.com/article/arta61a9defc1c9130982c23fd2

    展开全文
  • 1.Two stage目标检测算法 ​ 先进行区域生成(region proposal,RP)(一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。 ​ 任务:特征提取—>生成RP—>分类/定位回归。 ​ 常见的two ...
  • Two-stage基本介绍,流程与常见算法 一、Two-stage基本介绍 ...Two-stage的目标检测算法主要是通过一个完整的卷积神经网络来完成目标检测的过程,进行目标检测时用到的特征就是CNN的特征,也就是通过一个C...
  • 前面依次介绍了:本节介绍目标检测算法的评估指标:mAP定义及计算方式mAP:mean Average Precision,平均精度均值,即AP(AveragePrecision)的平均值,它是目标检测算法的主要评估指标。目标检测模型通常会用速度和...
  • 传统目标检测算法只适应于有明显特征,背景简单的情形,而在实际应用中,背景复杂多变,而且待检测的目标复杂多变,很难通过一般的抽象特征完成对目标的检测,而深度学习可以提取同一目标丰富的特征,完成目标的检测...
  • 目标检测算法综述

    2020-03-05 16:33:00
    一、目标检测 ...注:2013年以前的主要是传统的目标检测算法,2013年以后主要是基于深度学习的目标检测算法。 三、传统目标检测算法 1、Viola-Jones分类器算法: 算法要点: 1.1、使用类Haar输入特征:...
  • Vibe目标检测算法

    2014-08-30 10:43:01
    Vibe目标检测算法,技术文档,用于视频运动目标检测与跟踪
  • 传统的目标检测算法

    2020-03-26 23:04:26
    传统目标检测算法可以分为基于滑动窗口的目标检测算法和基于选择性搜索的目标检测算法
  • 干货 CVPR2018的目标检测总结(论文+开源代码)... 目标检测算法集合(论文+开源代码)https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html ...
  • 基于One-stage的目标检测算法 一、One-stage基本介绍 使用CNN卷积特征 直接回归物体的类别概率和位置坐标值(无region proposal) 准确度低、速度相对two-stage快 二、One-stage基本流程 One-stage和Two-stage的...
  • 针对传统Vibe运动目标检测算法提取的目标存在Ghost区域、并且在目标有阴影时检测出的前景区域存在阴影的问题,本文提出了一种结合快速初始化背景建模和阴影去除的Vibe运动目标检测算法。首先采用改进的帧差背景建模...
  • FCOS: 最新的one-stage逐像素目标检测算法

    万次阅读 多人点赞 2019-04-07 18:50:02
    本文提出了一种全卷积one-stage目标检测算法(FCOS),以逐像素预测的方式解决目标检测问题,类似于语义分割。目前最流行的不论是one-stage目标检测算法,如RetinaNet,SSD,YOLOv3,还是two-stage目标检测算法,如...
  • 3D点云目标检测算法汇总

    千次阅读 2020-02-15 21:23:45
    来源:汇总|3D点云目标检测算法 前言 前面总结了几种基于激光雷达点云数据的3D目标检测算法,还有一些算法不再单独列出,这里做个简单总结来分享下! 基于激光雷达点云的3D目标检测算法 1、End-to-End Multi-View ...
  • 运动目标检测算法测试视频,可测试各种算法,在做视频监控时用到的
  • 目标检测算法评估

    千次阅读 2019-04-08 22:23:48
    目标检测算法评估 目录 目标检测的评估 引论 precision和recall PR曲线和AP,mAP VOC的mAP评价代码 总结 引论 现在关于深度学习的算法层出不穷,那么我们应该用什么指标去评判一个算法的优缺点呢? 以...
  • paddlepaddle目标检测学习心得什么是目标检测目标检测的定义目标检测与图像分类的区别目标检测算法单阶段目标检测算法两阶段目标检测算法YOLO-V3算法AI识虫比赛心得 什么是目标检测 目标检测的定义 目标检测的主要...
  • 目标检测算法发展历程

    千次阅读 2020-02-23 17:48:50
    目标检测算法流程3. 传统目标检测方法4.深度学习目标检测方法 1.目标检测发展历程 2.目标检测算法流程 3. 传统目标检测方法 Viola-Iones HOG+SVM DPM ······ 4.深度学习目标检测方法 One-stage(YOLO和...
  • 3. One Stage目标检测算法 我们将对单次目标检测器(包括SSD系列和YOLO系列等算法)进行综述。我们将分析FPN以理解多尺度特征图如何提高准确率,特别是小目标的检测,其在单次检测器中的检测效果通常很差。然后我们...
  • 看了这篇文章后(链接),用这篇博文总结一下目前主流的目标检测算法的步骤。 目录传统的目标检测算法R-CNN(Region Proposal + CNN)Fast R-CNNFaster R-CNNSSDYolov3Yolov3与SSD的区别 传统的目标检测算法 卷积...
  • 目标检测算法对比

    万次阅读 2018-04-14 21:49:58
    R-CNN。 来自 ICCV 2015,可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,...包括本文在内的一系列目标检测算法:RCNN, Fast RCNN, Faster RCNN代表当下目...
  • YOLO目标检测算法

    千次阅读 2020-03-30 15:01:09
    本文主要介绍YOLO目标检测算法,包括YOLOv1、YOLOv2和YOLOv3。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,758
精华内容 4,703
关键字:

目标检测算法