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. 伪分布式hadoop1.1.2和hbase0.94.11配置

    Hadoop 1.1.2 和Hbase 0.94.11版本配置 测试时ip  172.19.32.128 这个版本需要把/etc/hosts的aa-vm改成127.0.0.1,也就是和localhos ...

  2. 51Nod1863 Travel 主席树 最短路 Dijkstra 哈希

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1863.html 题目传送门 - 51Nod1863 题意 有 n 个城市,有 m 条双向路径连通它们 ...

  3. CodeForces 516A Drazil and Factorial 动态规划

    原文链接http://www.cnblogs.com/zhouzhendong/p/8990592.html 题目传送门 - CodeForces 516A 题意 对于一个正整数$x$,$f(x)=x ...

  4. js去掉前后空格

    //去前后空格 data=data.replace(/(^\s*)|(\s*$)/g, "");

  5. 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组

    题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...

  6. java date HHmmss hhmmss

    系统交互时,用到时间流水号的设计,出现时间流水号相同的情况,故对时间格式化各种情况做了研究 SimpleDateFormat(format) format:年月日  yyyyMMdd时分秒  HHmm ...

  7. linux基础 用户(组)管理

    修改/etc/shadow文件 1.chage -m MINDAYS USERNAME#设置密码修改最小天数2.chage -M MAXDAYS USERNAME#设置密码修改最大天数3.chage ...

  8. 谈谈《Dotnet core结合jquery的前后端加密解密密码密文传输的实现》一文中后端解密失败的原因

    详情请看<Dotnet core结合jquery的前后端加密解密密码密文传输的实现>,正常来讲,这个博客里面的代码是没有问题的,但是我有时候却会直接报错,原因是后台解密失败:Interna ...

  9. XamarinAndroid组件教程设置自定义子元素动画(二)

    XamarinAndroid组件教程设置自定义子元素动画(二) (9)打开MainActivity.cs文件,为RecylerView的子元素设置添加和删除时的透明动画效果.代码如下: …… usin ...

  10. Codeforces.618F.Double Knapsack(构造 鸽巢原理)

    题目链接 \(Description\) 给定两个大小为\(n\)的可重集合\(A,B\),集合中的元素都在\([1,n]\)内.你需要从这两个集合中各选一个非空子集,使它们的和相等.输出方案. \( ...