深度学习之物体检测——YOLO(一)_介绍
来源:互联网 发布:windows安全性 编辑:程序博客网 时间:2024/06/06 04:36
##YOLO网络结构
YOLO把检测问题看成是端到端的回归问题。把输入图片划分成一个个的小格子,让物体中心点所在的格子负责检测到该物体。
YOLO采用的是GoogLeNet结构,但是用1*1和3*3的卷积层来替代GoogLeNet的inception层。网络结构如下:
每个卷积层后面都会跟着leaky ReLu非线性层。第一个全连接层后面也跟着leaky ReLU非线性层。对于一张图片,输出的维度是7*7*30(YOLO为每个格子为每个格子预测一个概率分布,并且预测2个box以及每个box的置信度):
输出的box是(x_center, y_center, width, height),x_center和y_center是相对于格子的位移并且用格子的长宽进行归一化,width和height用448进行归一化,所以这四个值的范围是[0,1]。
训练
卷积层预训练
取YOLO的前20个卷积层,然后加上一个平均池化层和一个全连接层,在ImageNet 1000-class数据上进行训练。作者讲他训练了大约一周的时间。
损失函数
YOLO会为每个格子预测多个box,但我们希望训练时只有一个box为每个物体负责。责任box是和物体的真实box的IOU最大的box。
训练误差包含下面三种误差:
坐标误差:表示对物体负责的格子中的责任box和真实box标记之间的误差
置信度误差:表示每个预测box的置信度和真实置信度之间的误差。
目标置信度的表达式如下:C^=Pr(Object)∗IOUtruthpred={0,如果box不是责任boxIOUtruthpred,如果box是责任box(1)
置信度不仅给出预测的box是否包含物体的信息,而且还给出了预测的box的准确度。作者在文中提到大多数的格子中是不包含物体的,这些格子中的box置信度应该向0趋近,这个目标带来的梯度有可能会比包含物体的格子带来的梯度更大。所以在损失函数中增加box的坐标预测损失,减少不包含物体的box的置信度预测损失,即在公式(2)中引入的系数
- 类别误差:表示为责任格子预测的类别概率分布和真实的概率分布之间的误差
误差表达式:
注意:宽和高的预测误差采用的是平方根之间的误差,这是因为大box和小的box误差权重是不一样的,小box上的些微变动应该比大box上的些微变动更重要。但是预测box的宽和高的平方根并没有完全解决这个问题。
测试
现在给定一张图片和训练好的YOLO网络,通过以下步骤来检测图片中的物体:
- 首先通过网络的一次前向过程得到输出
- 然后通过判断每个预测box的最大类别置信度是否超过指定的阈值,如果没有的话则舍弃该box:
每个box的类别置信度是用预测的类别概率和置信度相乘得到。类别置信度给出了该类别出现在box中的概率以及预测的box的准确度。 - 利用non-maximal supression过滤剩下的box
现在剩下的box就是YOLO最终检测的结果,其最大类别置信度对应的类别就是物体所属分类。
YOLO的优点和缺点
优点
- 速度快:在Titan X GPU上可以达到45fps,YOLO的快速版本可以达到150fps。
缺点
- YOLO只能处理一个格子中至多有一个物体的情况:这是因为由于每个格子只会给出一个概率分布预测,而且选择的是概率最大的那个类别。
参考
[1] YOLO. Joseph Redmon, Santosh Divvala, Ross Girshick , Ali Farhadi. CVPR 2016.
- 深度学习之物体检测——YOLO(一)_介绍
- 深度学习之物体检测——YOLO(二)_用作者提供的YOLO实现进行检测
- 深度学习物体检测(六)——YOLO
- 深度学习之物体检测——YOLO(三)_PyTorch实现
- 深度学习物体检测(九)——对象检测YOLO系列总结
- 深度学习(五十七)tensorflow andorid yolo物体检测测试
- 深度学习物体检测(一)——RCNN
- 深度学习在 iOS 上的实践 —— 通过 YOLO 在 iOS 上实现实时物体检测
- 深度学习之目标检测——基于R-CNN的物体检测
- 深度学习之物体检测——Fast R-CNN(Ross Girshick)
- 深度学习物体检测(二)——SPPnet
- 深度学习物体检测(三)——FAST-RCNN
- 深度学习物体检测(四)——Faster-RCNN
- 深度学习物体检测——常用资源简述
- 深度学习物体检测(七)——SSD
- 深度学习物体检测(八)——YOLO2
- 深度学习小白——物体定位和检测
- 深度学习物体检测(五)——对象检测RCNN系列总结
- Struts2搭建登录页面
- Echarts 如何调整 legend 和图表的间距
- jenkins体验-maven安装
- 牛顿迭代法求平方根、立方根
- Spring全家桶(二)Bean之间的关系、自动装配、作用域和使用外部文件
- 深度学习之物体检测——YOLO(一)_介绍
- 需求缺陷表缺点及优化建议
- C语言程序设计教程(第三版)课后习题11.8
- log4j.properties配置详解与实例
- 从新闻数据组中提取TF-IDF特征
- 数组Array和集合的区别:
- hadoop2.7.2学习笔记15-HDFS user guide
- 单链表的合并递增输出
- WebSocket与消息推送