目标检测算法YOLO-V3结构详解
❝上期我们一起学了
❞YOLO-V2
的算法结构以及跟YOLO-V1
比起来有哪些优缺点,如下:
目标检测算法YOLO-V2详解
今天我们看下在YOLO-V2
版本上改进的YOLO-V3
算法,到底做了哪些优化?
今天我们主要从以下几个方面来学习YOLO-V3
对YOLO-V2
做了哪些改进。
-
Darknet-53
结构 -
YOLO-V3
结构 -
先验框设置 -
损失函数 -
模型性能
YOLO-V3模型框架
YOLO-V3
模型框架,我们主要从它的基础网络Darknet-53
以及YOLO-V3
的结构方面学习,首先看下Darknet-53
结构。
Darknet-53结构
Darknet-53
是专门为YOLO-V3
设计的一个深度学习框架,有着非常好的图像识别的效果,如下图:
整个网络主要包括5
组残差块,如下:
-
以 256x256
输入为例,首先经过一个3x3x32
的卷积层输出为256x256x32
; -
接着经过一个 3x3x64 stride=2
的卷积层输出为128x128x64
; -
接着经过一个 残差块(前面学习残差网络的时候学过),输出为 128x128x64
; -
再经过一个 3x3x128 stride=2
的卷积层输出为64x64x128
; -
经过 2
个残差块后输出为64x64x128
; -
接着经过一个 3x3x256 stride=2
的卷积层输出为32x32x256
; -
接着经过 8
个残差块,输出为32x32x256
; -
再经过一个 3x3x512 stride=2
的卷积层输出为16x16x512
; -
接着经过 8
个残差块后输出为16x16x512
; -
接着经过一个 3x3x1024 stride=2
的卷积层输出为8x8x1024
; -
接着经过 4
个残差块后输出为8x8x1024
; -
最后经过池化全连接层以及 softmax
输出.
这就是Darknet-53
网络的具体框架,接下来我们看下YOLO-V3
算法是怎么嫁接上去的。
YOLO-V3结构
YOLO-V3
借鉴了前面学的SSD算法的思想,采用从不同尺度特征图上下手的检测方式,如下:
我们看下这个残差块,如上图右上小块,简单的说就是一组特征图与它经过两个卷积层后的特征图相加。
YOLO-V3
分别从Darknet-53
框架的第7
步,第9
步和第11
步的特征图下手进行多尺度检测。首先,一起从Darknet-53
最后输出的8x8x1024
的特征图看如何检测的。这里将8x8x1024
的特征图经过5
个卷积层进行二次提取特征后拿去检测目标。而后再将提取后的特征图上采样与第9
步的特征图合并经过5
个卷积层进行二次提取特征后拿去检测目标。再将第9
步的二次提取特征图上采样与第7
步的特征图合并进行二次特征提取检测目标。
YOLO-V3
一般使用416x416
大小的图片作为输入,根据上面结构图,最后得到的特征图为13x13
,Scale2
的特征图为26x26
,Scale3
的特征图为52x52
.YOLO-V3
使用的是COCO
数据集训练,COCO
数据集目标检测有80
个类别,而YOLO-V3
中每个cell
有3
个box
,每个box
还有(x,y,w,h,confidence)
五个基本参数,也就是说一个cell
对应的输出维度为3x(5+80)=255
(这里不明白为什么这样计算的请参考YOLO-V2算法).
所以YOLO-V3
有3
个不同特征尺度的输出,分别为13x13x255
,26x26x255
和52x52x255
的检测结果。对于416x416
的输入图片,YOLO-V2
中的bounding boxes
有13x13x5=845
个,而YOLO-V3
则有(13x13+26x26+52x52)x3=10467
个.
模型的训练及性能
明白了YOLO-V3
算法的结构,我们一起看下训练方面的东西,首先先验框该怎么设?
先验框设置
前面学的YOLO-V2算法已经开始采用K-means
聚类得到先验框的尺寸,YOLO-V3
延续了这种方法,为每种下采样尺度设定3中先验框,总共聚类出9
中尺寸的先验框。在COCO
数据集上,这9
个先验框是(10x13)
,(16x30)
,(33x23)
,(30x61)
,(62x45)
,(59x119)
,(116x90)
,(156x198)
,(373x326)
.
分配上,在最小的13x13
特征图上(有最大的感受野)应用较大的先验框(116x90)
,(156x198)
,(373x326)
适合检测较大的对象。
中等的26x26
特征图上(中等感受野)应用中等大小的先验框(30x61)
,(62x45)
,(59x119)
,适合检测中等大小的对象。
较大的52x52
特征图上(较小的感受野)应用较小的先验框(10x13)
,(16x30)
,(33x23)
,适合检测较小的对象。如下表:
损失函数
YOLO-V3
对类别预测的代价函数进行了修改,并且没有用softmax
。那为什么没有用softmax
呢?在原来的分类网络中softmax
层都是假设一张图片或者一个object
只属于一个类别,但是在一些复杂场景下,一个object
可能属于多个类,比如,我们的类别中有woman
和person
这两类,那么如果一张图像中有一个woman
,那么我们检测的结果中类别标签就要同时有woman
和person
这两类,这就是多标签分类。也就是一个object
属于多个类别。
所以在YOLO-V3
中,用了逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid
函数,该函数可以将输入约束在0~1
的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid
函数约束后如果大于0.5
,就表示属于该类,这样一个框就可以预测多个类别,代价函数用的是sigmoid
的交叉熵。
模型性能
YOLO-V3
在速度和准确率上都是很不错的,从下图中,我们可以看到在跟其他算法进行对比的图中,YOLO-V3
在inference time
上处于领先地位,其中YOLOV3-320
由于输入图片为320x320
,所以inference time
最小为22ms
,而YOLOV3-608
由于输入图片较大,inference time
为51ms
,也是领先于其他算法的。虽然mAP
最高的算法为FPN-FRCN
,但是运行时间却要172ms
。而YOLOV3-608
的mAP
也达到了57.9
。
从下面各算法在COCO
数据集上的性能图中,我们也可以清楚的看到YOLO-V3
算法的强大性能。
好了,至此,我们今天从Darknet-53
结构,YOLO-V3
结构,先验框设置,损失函数,模型性能的角度对YOLO-V3
做了详细的介绍,以及跟YOLO-V2
对比做了哪些改进,希望对大家有些帮助。下期,我们将一起学习目标检测算法YOLO-V4
。
本文分享自微信公众号 - 智能算法(AI_Algorithm)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从零开始理解HTTP协议及报文分析
前言 从事性能测试必不可绕过的就是协议,对基本知识的了解,还是深入掌握协议的机制,都能让你在从事性能测试实施时显得更加顺手。 下面我们就HTTP协议及性能测试过程必须掌握的一些分析工具来进行分享。 重点分享性能测试实施过程中必须掌握的关键技术、工具。更细节的请参考HTTP相关书籍或RFC文档。 HTTP基本架构 下面我们用一张简单的流程图来展示HTTP协议基本架构,以便大家先有个基本的了解。 Web Client可以是浏览器、搜索引擎、机器人等等一切基于HTTP协议发起http请求的工具。 Web Server可以是任何的能解析HTTP请求,并返回给Web Client可识别的响应的服务,常见的有apache、nginx、IIS等等web服务器。 浓缩就是精华,看下最简洁的HTTP交互图: HTTP报文结构 请求报文 HTTP请求报文由请求行、请求头、空行和请求内容4个部分构成。 如下图所示: 下面对上图进行简单的分析: 请求行 由请求方法字段、URL字段、协议版本字段三部分构成,它们之间由空格隔开。常用的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、T...
- 下一篇
常见机器学习算法背后的数学
不同的机器学习算法是如何从数据中学习并预测未见数据的呢? 机器学习算法是这样设计的,它们从经验中学习,当它们获取越来越多的数据时,性能就会提高。每种算法都有自己学习和预测数据的方法。在本文中,我们将介绍一些机器学习算法的功能,以及在这些算法中实现的有助于学习过程的一些数学方程。 机器学习算法的类型 机器学习算法大致可以分为以下四类: 监督学习:预测的目标或输出变量是已知的。这些算法生成一个函数,该函数将输入映射到输出变量。回归和分类算法属于这一类。在回归中,输出变量是连续的,而在分类中,输出变量包含两个或更多的离散值。一些监督学习算法包括线性回归,逻辑回归,随机森林,支持向量机,决策树,朴素贝叶斯,神经网络。 无监督学习:目标或输出变量是未知的。这些算法通常对数据进行分析并生成数据簇。关联、聚类和维数约简算法属于这一类。K-means聚类、PCA(主成分分析)、Apriori算法等是非监督学习算法。 半监督学习:它是监督和非监督学习方法的结合。它使用已知数据来训练自己,然后标记未知数据。 强化学习:机器或代理被训练从“试错”过程中学习。机器从过去的决策经验中学习,并利用它的学习来预测未...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题