引言

之前做object detection用到的都是two stage,one stage如YOLO、SSD很少接触,这里开一篇blog简单回顾该系列的发展。很抱歉,我本人只能是蜻蜓点水,很多细节也没有弄清楚。有需求的朋友请深入论文和代码,我在末尾也列出了很多优秀的参考文章。

YOLOv1

You Only Look Once: Unified, Real-Time Object Detection

核心思想

  • 用一个CNN实现end-to-end,将目标检测作为回归问题解决。

将输入图片分割为\(S\times S\)网格,如果物体的中心落入网格中央,这个网格将负责检测这个物体。因此网络学会了去预测中心落在该网格中的物体。

每个网格预测\(B\)个bounding boxesconfidence scores。confidence scores包含两方面:

  1. 这个boundingbox包含物体的可能性\(Pr(Object)\):bb包含物体时\(Pr(Object)=1\)否则为0。
  2. 这个boundingbox的准确度\(IOU^{truth}_{pred}\):pred和gt的IoU。

因此,confidence scores可定义为$Pr(Object)*IoU^{truth}_{pred} $

每个bbox包含5个predictions:\(x,y,w,h和confidence\):\((x,y)\)表示bbox中心坐标,\(h,w\)表示bbox长宽,\(confidence\)表示pred和gt box的IoU。

每个网格预测\(C\)个类别概率\(Pr(Class_i|Object)\),表示该网格负责预测的边界框目标属于各类的概率。我们不考虑box的数量即\(B\)。

测试阶段我们将类别概率和confidence score相乘,得每个box的类特定confidence score:

\[Pr(Class_i|Object)*Pr(Object)*IoU^{truth}_{pred}=Pr(Class_i)*IoU^{truth}_{pred}\]

表示box中类别出现的概率和预测box与目标的拟合程度。

将图片分解为$S\times S \(个gird,每个grid预测\)B\(个bbox,confidence和\)C\(个类概率,预测值为\)S\times S \times (B*5+C)$

网络架构

网络结构参考GooLeNet,包含24个卷积层和2个激活层,卷积层使用1x1卷积降维然后跟3x3卷积。对于卷积层和全连接层,采用Leaky ReLU:\(max(x,0.1x)\),最后一层采用线性激活层。

网络输出维度为30(\(B=2\)),前20个元素是类别概率值,然后2个是边界框置信度,最后8个是bbox的\((x,y,w,h)\)。

  • Loss:YOLO把分类问题转化为回归问题

第一项是bbox中心坐标误差项;第二项是bbox高与宽误差项;

第三项是包含目标bbox置信度误差项;第四项是不包含目标bbox置信度误差项;

最后一项是包含目标的grid分类误差项。

将Loss对应到predtion张量上:

实验结果

SSD

SSD:Single Shot MultiBox Detector

核心思想

速度比YOLO快,精度可以跟Faster RCNN媲美。

  1. 采用多尺度特征图用于检测:大特征图检测小目标,小特征图检测大目标。

  2. 采用卷积进行检测:与YOLO最后采用全连接层不同,SSD直接采用卷积提取检测结果。

  3. 设置先验框:借鉴Faster RCNN中anchor理念,为每个网格设置不同长宽比的anchor,bbox以anchor为基准。

网络架构

在VGG16基础上增加了卷积层获得更多特征图用于检测。

上是SSD,下是YOLO

实验结果

YOLOv2

YOLO9000: Better, Faster, Stronger

核心思想

YOLOv1虽然检测速度快,但检测精度不如RCNN,YOLOv1定位不够准确,召回率也低。于是YOLOv2提出了几种改进策略来提升YOLO模型的定位准确度和召回率,并保持检测速度。

  • Better

    • Batch Normalization:加快收敛并起到正则化效果,防止过拟合。

    • High Resolution Classifier:在ImageNet数据上使用\(448\times448\)输入来finetune。

    • Convolutional With Anchor Boxes:借鉴Faster R-CNN中RPN的anchor boxes策略,预测offset而不是coordinate。

    • Dimension Clusters:采用k-means来替代人工选取anchor。并使用下式来度量距离。

      \[d(box,centroid)=1-IOU(box, centroid)\]

    • Direct location prediction:改变了预测bbox的计算公式

    • Fine-Grained Features:小物体需要更精细的特征图。采用passthrough层将高分辨率特征concat低分辨率特征,类似于ResNet。
    • Multi-Scale Training:每隔10batch,网络随机选择新的图像尺寸。

  • Faster

    • Darknet-19
    • Training for classification
    • Training for detection
  • Stronger

    • Hierarchical classification
    • Dataset combination with WordTree
    • Joint classification and detection

网络架构

实验结果

YOLOv3

YOLOv3: An Incremental Improvement

核心思想

  • Bounding Box Prediction:和v2一样使用聚类来获得anchor并预测bbox坐标。
  • Class Prediction:不使用softmax,使用二元交叉熵进行类别预测。
  • Predictions Across Scales:跨尺度预测,类似FPN使用3个尺度,预测为\(N\times N\times[3*(4+1+80)]\),4个box offsets、1个obj prediction和80个类prediction。
  • Feature Extractor:Darknet-53,加入了Residual。

网络架构

实验结果

参考

  • paper

[1]Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 779-788.

[2]Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.

[3]Redmon J, Farhadi A. YOLO9000: better, faster, stronger[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 7263-7271.

[4]Redmon J, Farhadi A. Yolov3: An incremental improvement[J]. arXiv preprint arXiv:1804.02767, 2018.

  • blog

目标检测|YOLO原理与实现

目标检测|YOLOv2原理与实现(附YOLOv3)

目标检测|SSD原理与实现

你真的读懂yolo了吗?

artifical-intelligence

【YOLO】yolo v1到yolo v3

What do we learn from single shot object detectors (SSD, YOLOv3), FPN & Focal loss (RetinaNet)?

YOLO 的发展

物体检测丨浅析One stage detector「YOLOv1、v2、v3、SSD」的更多相关文章

  1. 物体检测丨Faster R-CNN详解

    这篇文章把Faster R-CNN的原理和实现阐述得非常清楚,于是我在读的时候顺便把他翻译成了中文,如果有错误的地方请大家指出. 原文:http://www.telesens.co/2018/03/1 ...

  2. 物体检测丨从R-CNN到Mask R-CNN

    这篇blog是我刚入目标检测方向,导师发给我的文献导读,深入浅出总结了object detection two-stage流派Faster R-CNN的发展史,读起来非常有趣.我一直想翻译这篇博客,在 ...

  3. 图像分类丨ILSVRC历届冠军网络「从AlexNet到SENet」

    前言 深度卷积网络极大地推进深度学习各领域的发展,ILSVRC作为最具影响力的竞赛功不可没,促使了许多经典工作.我梳理了ILSVRC分类任务的各届冠军和亚军网络,简单介绍了它们的核心思想.网络架构及其 ...

  4. 『计算机视觉』物体检测之RefineDet系列

    Two Stage 的精度优势 二阶段的分类:二步法的第一步在分类时,正负样本是极不平衡的,导致分类器训练比较困难,这也是一步法效果不如二步法的原因之一,也是focal loss的motivation ...

  5. 物体检测之FPN及Mask R-CNN

    对比目前科研届普遍喜欢把问题搞复杂,通过复杂的算法尽量把审稿人搞蒙从而提高论文的接受率的思想,无论是著名的残差网络还是这篇Mask R-CNN,大神的论文尽量遵循著名的奥卡姆剃刀原理:即在所有能解决问 ...

  6. [PyImageSearch] Ubuntu16.04 使用深度学习和OpenCV实现物体检测

    上一篇博文中讲到如何用OpenCV实现物体分类,但是接下来这篇博文将会告诉你图片中物体的位置具体在哪里. 我们将会知道如何使用OpenCV‘s的dnn模块去加载一个预训练的物体检测网络,它能使得我们将 ...

  7. OpenCV平面物体检测

    平面物体检测 这个教程的目标是学习如何使用 features2d 和 calib3d 模块来检测场景中的已知平面物体. 测试数据: 数据图像文件,比如 “box.png”或者“box_in_scene ...

  8. cs231n---语义分割 物体定位 物体检测 物体分割

    1 语义分割 语义分割是对图像中每个像素作分类,不区分物体,只关心像素.如下: (1)完全的卷积网络架构 处理语义分割问题可以使用下面的模型: 其中我们经过多个卷积层处理,最终输出体的维度是C*H*W ...

  9. OpenCV学习 物体检测 人脸识别 填充颜色

    介绍 OpenCV是开源计算机视觉和机器学习库.包含成千上万优化过的算法.项目地址:http://opencv.org/about.html.官方文档:http://docs.opencv.org/m ...

随机推荐

  1. RESTEasy常用注解

    一.@Path,标注资源类或方法的相对路径          Path参数的形式有三种:          1.固定值          2.纯正则表达式          3.固定值和正则表达式的混 ...

  2. 【转】ruby 时间日期处理

    我们可以使用Time类来生成一个当前时间的对象: t = Time.new 或 t = Time.now Time类有类方法mktime(同义方法是local方法)来根据传入的参数生成时间对象,并且它 ...

  3. numpy和matlab计算协方差矩阵的不同(matlab是标准的,numpy相当于转置后计算)

    matlab是标准的,numpy相当于转置后计算 >> x = [2,0,-1.4;2.2,0.2,-1.5;2.4,0.1,-1;1.9,0,-1.2] x = 2.0000    0 ...

  4. Sequence Models 笔记(二)

    2 Natural Language Processing & Word Embeddings 2.1 Word Representation(单词表达) vocabulary,每个单词可以使 ...

  5. poi包的几行基本的设置单元格样式

    ——杂言:写过很多遍这段代码,今天姑且记录一下,便于翻阅. jar:poi-3.7.jar 注意:第8行应该调用cellStyle.setFillForeGroundColor(HSSFColor.G ...

  6. 基本算法思想之递推算法思想(C++语言描述)

    递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用.递推算法适合有明显公式规律的场合. 递推算法基本思想 递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果.递推算法 ...

  7. linux切割文件【split命令详解】

    linux查看帮助 [tomcat-nohup]$ split --help 用法:split [选项]... [输入 [前缀]] 将输入内容拆分为固定大小的分片并输出到"前缀aa" ...

  8. p1198&bzoj1012 最大数

    传送门(洛谷) 传送门(bzoj) 题目 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数 ...

  9. [MySQL] Data too long for column 'title' at row 1

    李刚轻量级JavaEE第六章的坑..艹李刚自己有没试过这些代码的啊,6.4这一份HqlQuery.java里需要的表,根本就跟他提供的sql脚本对不上啊..坑爹啊,而且字符编码集也有问题. 出现这个原 ...

  10. 手机连接fiddler后,浏览器无法打开网页或者fiddler抓取不到手机应用相关数据的情况

    关于手机如何连接fiddler,网上有很多教程,我暂时就不写了 今天在使用fiddler的过程中,发现fiddler突然无法抓取移动端应用的数据包,再三确认连接无误.因此就开始了解决之旅 起因是安卓手 ...