one-stage object detectors(YOLO and SSD)

  • 在不专一的模型中,每个检测器应该能够处理图像中任何可能位置的各类物体;导致单个检测器趋向检测所有边界框,最终检测框结果趋向于折中的位置。

  • 使用固定网格上的检测器是one-stage目标检测算法的主要思想,也是它们与基于候选框的目标检测方法(如R-CNN)的区别所在(实际上Faster R-CNN中RPN网络也采用网格检测)。

  • 使用网格来专门限制检测器仅查看某个特定空间位置。相应地,为每个网格单元设置几个不同的检测器,我们可以使这些物体检测器中的每一个都专注于某种物体形状。

  • SSD不使用k-means来确定先验框。相反,它使用数学公式来计算先验框尺寸,因此SSD的先验框与数据集无关(SSD称它们为“default boxes”);YOLO通过k-means聚类得到。

  • YOLO模型的一个重要特点是仅当某个物体的中心点落在一个检测器的网格单元中心时,这个检测器才负责预测它。这样避免冲突,即相邻的单元格不会用来预测同一个物体。这样,delta_x和delta_y必须限制在0~1之间,代表预测框在网格单元的相对位置,这里用sigmod函数限制值的范围。

  • 除了采用softmax,还可以采用sigmoid,这将变成一个多标签分类器,每个预测框实际上可以同时有多个类别,SSD和YOLOv3是这样。但是SSD没有预测置信度,它给分类器增加了一个特殊的类:背景。如果分类结果是背景,那么意味着检测器没有找到物体,这实际上等价于YOLO给出一个较低的置信度。(YOLOv3和SSD采用不同的方式,它们将这个问题看成多标签分类问题。所以不采用softmax(它导致各个类别互斥),反而使用sigmoid,这样允许预测多个标签。进一步,它们采用标准的二元交叉熵计算loss。)

  • YOLO必须从单个网格进行所有预测,所以它使用的先验框的范围从小(大约单个网格单元的大小)到大(大约整个图像的大小);与YOLO不同的是,SSD不使用先验框来使检测器专注于物体大小,而是使用不同的网格来实现这一点。SSD的先验框主要用于使检测器处理物体形状(长宽比)的变化,而不是它们的大小。

  • 旋转也是一种常见的数据扩增技术,但这会比较麻烦,因为我们还需要同时旋转边界框,所以通常不会这样做。

  • 当一个anchor对应多个GT时,匹配策略:

YOLO的解决方案比较粗暴:每次随机打乱真实框,每个单元只选择第一个进入它中心的物体。因此,如果一个新的真实框与一个已经负责另一个物体的单元相匹配,那么我们就只能忽略它了。这意味着在YOLO中,每个单元至多有一个检测器被匹配到物体,而其他检测器不应该检测到任何东西(如果检测到了,就会受到惩罚)。

这只是YOLO的策略,SSD的匹配策略却不相同。SSD可以将同一个真实框与多个检测器匹配:首先选择具有最佳IOU值的检测器,然后选择那些与之IOU超过0.5的但是未被匹配过的检测器(注意检测器和先验框是绑定的,一一对应,所以说IOU指的是检测器的先验框与物体的边界框之间的重叠)。这应该使模型更容易学习,因为它不必在哪个检测器应该预测这个对象之间进行唯一选择,毕竟多个检测器可以预测这个对象。

注意:两者设计似乎是矛盾的。YOLO将一个物体只分配给一个检测器(而该单元的其他检测器则是无物体),以帮助检测器更专注。但是SSD说多个检测器可以预测同一个物体。两者实际上都可以。对于SSD,检测器专注于形状而不是大小。
  • YOLO还有一个特别处理之处。如果一个检测器的预测框与所有真实框的IOU最大值大于一个阈值(比如0.6),那么忽略这个检测器的no_object_loss。换句话说,如果一个检测器被认为不应该预测一个物体,但是实际上却预测了一个不错的结果,那么最好是忽略它(或者鼓励它预测物体,也许我们应该让这个检测器与这个物体匹配)。

  • 注意:YOLO采用平方和误差(sum-squared error,SSE),而不是常见的用于回归的均方差(mean-squared error,MSE),或是用于分类的交叉熵。一个可能原因是每张图片物体数量并不同,如果取平均,那么包含10个物体的图片与包含1个物体的图片的loss的重要性一样,而采用求和,前者的重要性约是后者的10倍,这可能更公平。

two-stage object detectors

其他基础知识

在目标检测中,分类器会给每个bounding box(bb)计算出一个class score,就是这个bb属于每一类的概率,NMS就是根据这些值来进行的,主要流程:

对于每一类,首先把所有score<thresh1的bb的score设为0
之后,将所有的bb按照得分排序,选中最高分及其对应的bb
遍历其余的bb,如果和当前最高分bb的重叠面积(IoU)大于一定的阀值,便将该bb删除
从未处理的bb中继续选择一个最高分的bb,重复上述过程
重复上述过程,直到找到全部保留的bb
然后根据所有保留bb的class score和class color画出最后的预测结果
  • 进行NMS之后再计算mAP; 理想情况下,各个recall下的precision都很高。计算出所有recall下的precision的平均值,可以给出模型在检测此特定类物体的总体效果。一旦我们获得了所有不同阈值下的precision和recall,就可以通过计算该曲线下的面积来得到AP。对于Pascal VOC数据集,实际上有两种不同的方法:2007版本使用近似方法; 2012版本更精确(使用积分)但分数一般更低。最终的mAP仅仅是20个类的AP平均值。
  • 计算mAP会用到IOU进行正负样本选择,得到不同IoU下AP值.
sort the predictions by confidence score (high to low)
for each prediction:
true_boxes = get the annotations with same class as the prediction
and that are not marked as "difficult"
find IOUs between true_boxes and prediction
choose ground-truth box with biggest IOU overlap
if biggest IOU > threshold (which is 0.5 for Pascal VOC):
if we do not already have a detection for this ground-truth box:
TP += 1
else:
FP += 1
else:
FP += 1

one-stage object detectors(1)的更多相关文章

  1. anchor_based-anchor_free object detectors

    同步到知乎anchor_based-anchor_free object detectors 前言:最近关注了大量目标检测的论文,比较火的就是anchor based和anchor free两类问题: ...

  2. 论文阅读笔记四十九:ScratchDet: Training Single-Shot Object Detectors from Scratch(CVPR2019)

    论文原址:https://arxiv.org/abs/1810.08425 github:https://github.com/KimSoybean/ScratchDet 摘要 当前较为流行的检测算法 ...

  3. 《DSOD:Learning Deeply Supervised Object Detectors from Scratch》翻译

    原文地址:https://arxiv.org/pdf/1708.01241 DSOD:从零开始学习深度有监督的目标检测器 Abstract摘要: 我们提出了深入的监督对象检测器(DSOD),一个框架, ...

  4. (转)Awesome Object Detection

    Awesome Object Detection 2018-08-10 09:30:40 This blog is copied from: https://github.com/amusi/awes ...

  5. YOLO object detection with OpenCV

    Click here to download the source code to this post. In this tutorial, you’ll learn how to use the Y ...

  6. 物体检测丨浅析One stage detector「YOLOv1、v2、v3、SSD」

    引言 之前做object detection用到的都是two stage,one stage如YOLO.SSD很少接触,这里开一篇blog简单回顾该系列的发展.很抱歉,我本人只能是蜻蜓点水,很多细节也 ...

  7. One Stage目标检测

    在计算机视觉中,目标检测是一个难题.在大型项目中,首先需要先进行目标检测,得到对应类别和坐标后,才进行之后的各种分析.如人脸识别,通常是首先人脸检测,得到人脸的目标框,再对此目标框进行人脸识别.如果该 ...

  8. 一个简单的游戏开发框架(四.舞台Stage)

    首先是StageManager类: class StageManager : public Singleton<StageManager> { friend class Singleton ...

  9. deep learning on object detection

    回归工作一周,忙的头晕,看了两三篇文章,主要在写各种文档和走各种办事流程了-- 这次来写写object detection最近看的三篇文章吧.都不是最近的文章,但是是今年的文章,我也想借此让自己赶快熟 ...

随机推荐

  1. AtCoder Regular Contest 102 (ARC102) D All Your Paths are Different Lengths 构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/ARC102D.html 题目传送门 - ARC102D 题意 给定 $L$,请你构造一个节点个数为 $n$ ,边 ...

  2. hive中使用union出现异常数据

    select * from tbl where id=2 union select * from tbl where id =1 如果hive使用union这么查询的时候,我们会发现数据变乱了. 解决 ...

  3. (转)thymeleaf中的判断总结

    判断String字符串,添加引号 th:class="${flag=='forum.html'}?'active'" 判断boolean类型,注意不能当成字符串处理,不能添加引号 ...

  4. html-定位

    概述: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  5. 00-JAVA语法基础--课后作业

    题目:像二柱子那样,花20分钟写一个能自动生成30道小学四则运算题目的“软件”. package 课堂作业1; import java.util.Random; import java.util.Sc ...

  6. HDU 1522 Marriage is Stable 【稳定婚姻匹配】(模板题)

    <题目链接> 题目大意: 给你N个男生和N个女生,并且给出所有男生和女生对其它所有异性的喜欢程度,喜欢程度越高的两个异性越容易配对,现在求出它们之间的稳定匹配. 解题分析: 稳定婚姻问题的 ...

  7. linux平台,对线程等待和唤醒操作的封装(pthread_cond_timedwait 用法详解)

    前言 linux平台下,线程等待和唤醒操作是很常见的,但是平台函数不易使用:笔者对此操作做了封装,使之更易于使用. 线程等待和唤醒函数比较 平台提供了线程等待相关函数,这些函数之间用法也有些差异: s ...

  8. Android JNI 增强应用程序性能

    JNI全称Java Native Interface. 它为托管代码(使用Java编程语言编写)与本地代码(使用C/C++编写)提供了一种交互方式.它是与厂商无关的(vendor-neutral),支 ...

  9. C语言实现密码修改

    /* *修改密码 *描述: *1.本来已经存在密码 *2.很多时候需要输入两次密码,对比是否正确,才能确认修改密码正确 *敲代码思路: *1.输入旧的密码判断是否正确 *2.提示输入修改后的密码 *3 ...

  10. IntelliJ IDEA无法更新maven索引

    maven索引的作用时在添加dependency的时候能有自动提示,不影响dependency的下载: 解决办法: 1.http://ju.outofmemory.cn/entry/359450 2. ...