机器学习:YOLO for Object Detection (一)
最近看了基于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。测试的时候,将所有的概率相乘,可以得到:
最后个值反应了,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 (一)的更多相关文章
- [Localization] YOLO: Real-Time Object Detection
Ref: https://pjreddie.com/darknet/yolo/ 关注点在于,为何变得更快? 论文笔记:You Only Look Once: Unified, Real-Time Ob ...
- 机器学习:YOLO for Object Detection (二)
之前介绍了 YOLO-v1 单纯的利用一个卷积网络完成了目标检测,不过 YOLO-v1 虽然速度很快,但是比起其他的网络比如 Fast R-CNN 检测的准确率还是差不少,所以作者又提出了改良版的 Y ...
- YOLO: Real-Time Object Detection
YOLO detection darknet框架使用 YOLO 训练自己的数据步骤,宁广涵详细步骤说明
- YOLO: Real-Time Object Detection 安装和测试
1.下载darknet git clone https://github.com/pjreddie/darknet.git 2.修改make GPU= CUDNN= OPENCV= DEBUG= 3. ...
- 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 ...
- [YOLO]《You Only Look Once: Unified, Real-Time Object Detection》笔记
一.简单介绍 目标检测(Objection Detection)算是计算机视觉任务中比较常见的一个任务,该任务主要是对图像中特定的目标进行定位,通常是由一个矩形框来框出目标. 在深度学习CNN之前,传 ...
- 读论文系列:Object Detection CVPR2016 YOLO
CVPR2016: You Only Look Once:Unified, Real-Time Object Detection 转载请注明作者:梦里茶 YOLO,You Only Look Once ...
- Object Detection(RCNN, SPPNet, Fast RCNN, Faster RCNN, YOLO v1)
RCNN -> SPPNet -> Fast-RCNN -> Faster-RCNN -> FPN YOLO v1-v3 Reference RCNN: Rich featur ...
- [C4W3] Convolutional Neural Networks - Object detection
第三周 目标检测(Object detection) 目标定位(Object localization) 大家好,欢迎回来,这一周我们学习的主要内容是对象检测,它是计算机视觉领域中一个新兴的应用方向, ...
随机推荐
- android-support-v4.jar异常解决方法
1.当一个项目引入其他library项目时,会出现android-support-v4.jar冲突问题: 解决:将library项目中的android-support-v4.jar更新到最新,方法右键 ...
- iOS开发 Xcode8 问题
一.证书管理 用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书.建议大家勾选这个Automatically manage signing(Ps.但是在b ...
- Django模板系统(非常详细)(后台数据如何展示在前台)
前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的这会导致几个问题:1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频 ...
- iPhone 和 iPad的ios 开发中 利用 WebViewJavascriptBridge组件,通过 UIWebView 对Html进行双向通讯
本文转载至 http://blog.csdn.net/remote_roamer/article/details/7261490 WebViewJavascriptBridge 项目的 官网 http ...
- TP框架的修改,删除
先把数据库的素具显示出来 public function xiugai() { $code= "n001";//修改的主键值 $n = M("nation"); ...
- WCF基础之会话、实例和并发
这篇笔记是一些概念性的东西. 会话,借用百科上的描述就是一个客户与服务器之间的不中断的请求响应序列.wcf的会话模式是通过服务契约的SessionModel进行设置的,其值为枚举,分别为:Allowe ...
- 我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)
对于游戏玩家而言,游戏界面上看到的"元素"千变万化:但是对于游戏开发者而言,游戏界面上的元素在底层都是一些数据,不同数据所绘制的图片有所差异而已.因此建立游戏的状态数据模型是实现游 ...
- STM32L0 HAL库 IO读写功能
开发环境使用 MDK5.16a + CUBEMX生成代码 开发板使用:NUCLEO-L053R8 核心芯片:STM32L053R8 今天主要学习了下最基础的IO的读写,IO使用 PA5 LED输出 ...
- 改善程序与设计的55个具体做法 day4
今天晚上回到小区门口,买了点冬枣,要结账的时候想起来,钥匙没带,落公司了! TNND,没办法再回趟公司,拿了钥匙,来回一个小时,汗~ 条款10:令operator=返回一个reference to * ...
- Python 可变长度函数参数
func( *tuple_grp_nonkw_args, **dict_grp_kw_args ) 在编程的过程中,我们可能会遇到函数参数个数不固定的情况.这时就需要使用可变长度的函数参数来实现我们的 ...