最近看了基于CNN的目标检测另外两篇文章,YOLO v1 和 YOLO v2,与之前的 R-CNN, Fast R-CNN 和 Faster R-CNN 不同,YOLO 将目标检测这个问题重新回到了基于回归的模型。YOLO v1 是一个很简单的 CNN 网络,YOLO v2 是在第一版的基础上,借鉴了其他几种检测网络的一些技巧,让检测性能得到大幅提升。下面分别介绍一下这两个网络:

YOLO v1

YOLO v1 的结构看起来很简单,如下图所示:

从示意图上看,似乎就是输入一张图片,经过一个CNN 网络,最后就能给出目标的检测框以及分类的概率,很高效的样子。

输入一张 448×448 的图片,将图片分成 S×S 个方块,每个 grid 会预测 B 个 bounding boxes, 以及与 bounding box 对应的置信度。每个 bounding box 的置信度是由两部分组成的,一部分是 Pr(Object) , 表示这个 bounding box 含有物体的 confidence,另外一个是 IOUtruthpred, 衡量这个 bounding box 检测的 accuracy。最后整体的置信度定义为两者的乘积:Pr(Object)×IOUtruthpred.

每个 bounding box 有5个参数,(x,y,w,h,p), p 就是 confidence。(x,y) 表示 bounding box 的中心与 grid cell 的边界的比率,(w,h) 表示 bounding box 的宽高与全图宽高的比率。所以每个 grid cell 有 B 个 bounding box,而每个 bounding box 会有 5 个预测值。除此之外,每个 grid cell 还会预测一个条件概率,即这个 grid cell 如果含有待检测的目标,需要知道这个目标是属于哪一类物体 Pr(Classi|Obj),这个是基于 bounding box 含有待检测目标的,所以是一个条件概率,论文里规定,每一个 grid cell 只预测一类物体,不管这个 grid cell 含有多少个 bounding box。测试的时候,将所有的概率相乘,可以得到:

Pr(Classi|Obj)×Pr(Object)×IOUtruthpred=Pr(Classi)×IOUtruthpred

最后个值反应了,bounding box 中出现某一类物体的概率,以及这个 bounding box 检测的准确度。如下图所示:

YOLO-v1 的网络结构是基于 GoogleNet 的有一个深层的,一个浅层的,深层的含有 24 个卷积层,浅层的含有 9 个卷积层,网络结构如下所示:

基本上就是 3×3 和 1×1 的 filter。

网络的训练,先是用这个网络再 ImageNet 上训练一遍,大概 20 层的卷积层,这个时候训练的输入尺寸是 224×224,然后将训练好的网络用目标检测的数据库再做一次训练,这次会多加几层卷积层,同时将输入尺寸从 224×224 变成 448×448, 为了让预测值都在 [0, 1] 之间,参数 (x,y,w,h) 都做了归一化处理,训练的激励函数在 RELU 的基础上做了一些改动,负数不再是 0,而是有一个 0.1 的斜率。最后的loss 函数如下所示:

这个函数基本将分类的准确率以及检测的精度都考虑了。不过这个网络的性能还是有局限,正如论文中所说:

  • 因为采用固定的 grid cell, 并且每个 grid cell 只识别一个类,所以如果这个 grid cell 如果有多个物体,这是识别不了的,也就是说对小物体,这个网络的识别性能较差。

  • 因为检测是用 bound box 做的,bounding box 是固定的形状,所以这个网络对形变或者不同的尺寸比适应性较差。

  • 最后,loss function 对 bounding box 的 error 是一视同仁的,不同大小的bounding box 的 error 应该要区别对待。同样的error,对小的bounding box 的影响会比大的bounding box的影响要大很多。

具体的细节讨论,实验结果可以看论文。后面我们再介绍 YOLO-v2

Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi, “You Only Look Once: Unified, Real-Time Object Detection”

机器学习:YOLO for Object Detection (一)的更多相关文章

  1. [Localization] YOLO: Real-Time Object Detection

    Ref: https://pjreddie.com/darknet/yolo/ 关注点在于,为何变得更快? 论文笔记:You Only Look Once: Unified, Real-Time Ob ...

  2. 机器学习:YOLO for Object Detection (二)

    之前介绍了 YOLO-v1 单纯的利用一个卷积网络完成了目标检测,不过 YOLO-v1 虽然速度很快,但是比起其他的网络比如 Fast R-CNN 检测的准确率还是差不少,所以作者又提出了改良版的 Y ...

  3. YOLO: Real-Time Object Detection

    YOLO detection darknet框架使用 YOLO 训练自己的数据步骤,宁广涵详细步骤说明

  4. YOLO: Real-Time Object Detection 安装和测试

    1.下载darknet git clone https://github.com/pjreddie/darknet.git 2.修改make GPU= CUDNN= OPENCV= DEBUG= 3. ...

  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. [YOLO]《You Only Look Once: Unified, Real-Time Object Detection》笔记

    一.简单介绍 目标检测(Objection Detection)算是计算机视觉任务中比较常见的一个任务,该任务主要是对图像中特定的目标进行定位,通常是由一个矩形框来框出目标. 在深度学习CNN之前,传 ...

  7. 读论文系列:Object Detection CVPR2016 YOLO

    CVPR2016: You Only Look Once:Unified, Real-Time Object Detection 转载请注明作者:梦里茶 YOLO,You Only Look Once ...

  8. Object Detection(RCNN, SPPNet, Fast RCNN, Faster RCNN, YOLO v1)

    RCNN -> SPPNet -> Fast-RCNN -> Faster-RCNN -> FPN YOLO v1-v3 Reference RCNN: Rich featur ...

  9. [C4W3] Convolutional Neural Networks - Object detection

    第三周 目标检测(Object detection) 目标定位(Object localization) 大家好,欢迎回来,这一周我们学习的主要内容是对象检测,它是计算机视觉领域中一个新兴的应用方向, ...

随机推荐

  1. 请求SQL数据是存在<null>,的解决方法

    删除字典中的null 我们在处理服务器传过来的数据过程中,如果数据中出现null,我们是没法进行本地持久化处理的.在使用NSUserDaults保存本地时,如果其中一个字段的value为NULL值,就 ...

  2. 在mac上独立安装PHP环境

    1.http://dditblog.com/blog_418.html 2.http://www.jianshu.com/p/0456dd3cc78b

  3. 【BZOJ4269】再见Xor 高斯消元

    [BZOJ4269]再见Xor Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行一个正整 ...

  4. iOS 运行时详解

    注:本篇文章转自:http://www.jianshu.com/p/adf0d566c887 一.运行时简介 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行 ...

  5. (转)如何使VMware ip与本机ip处于同一网段

    如何使VMware ip与本机ip处于同一网段 原创 2017年05月08日 17:28:56 1287 首先确认本机ip  可以看出一下信息: 本机ip: 192.168.1.162 网关:192. ...

  6. java堆分析神器MAT

    Memory Analyzer(MAT) 基于Eclipse的软件 http://www.eclipse.org/mat/

  7. python+NLTK 自然语言学习处理六:分类和标注词汇一

    在一段句子中是由各种词汇组成的.有名词,动词,形容词和副词.要理解这些句子,首先就需要将这些词类识别出来.将词汇按它们的词性(parts-of-speech,POS)分类并相应地对它们进行标注.这个过 ...

  8. zend 和 esftp插件开发大型PHP项目,ZEND最常用快捷键

    先说一下如何安装zend的esftp插件,下载插件esftp-1.1.1.zip,下载地址http://sourceforge.net/projects/esftp/ 或者 http://yun.ba ...

  9. Git——基本操作(三)

    一.安装和配置 1.Git安装 yum install git -y 安装完Git就可以对其做一些配置: Git有一个工具被称为git config,它允许你获得和设置配置变量: 这些变量可以控制Gi ...

  10. static_class

    <?php class MyObject { public static $myStaticVar = 0; function myMethod() { self::$myStaticVar + ...