YOLO v3详细解读

举报
迪菲赫尔曼 发表于 2023/01/03 13:36:43 2023/01/03
【摘要】 《YOLOv3: An Incremental Improvement》Joseph Redmon Ali FarhadiUniversity of Washington发表时间:2018YOLO v3总结了自己在YOLO v2的基础上做的一些尝试性改进,有的尝试取得了成功,而有的尝试并没有提升模型性能。其中有两个值得一提的亮点,一个是使用残差模型,进一步加深了网络结构;另一个是使用FPN...

《YOLOv3: An Incremental Improvement》

Joseph Redmon Ali Farhadi
University of Washington

发表时间:2018


YOLO v3总结了自己在YOLO v2的基础上做的一些尝试性改进,有的尝试取得了成功,而有的尝试并没有提升模型性能。其中有两个值得一提的亮点,一个是使用残差模型,进一步加深了网络结构;另一个是使用FPN架构实现多尺度检测。

YOLO v3的创新点有哪些?

1. 全新的网络结构:DarkNet-53

2. 融合了FPN

3. 用逻辑回归替代softmax作为分类器


1. YOLOv3网络结构改进–Darknet-53

YOLO v3在之前Darknet-19的基础上引入了残差模块,并进一步加深了网络,改进后的网络有 53 53 个卷积层,取名为Darknet-53,网络结构如下图所示( 256 × 256 以256×256 的输入为例)。

在这里插入图片描述

Darknet-53模型结构 整个网络主要包括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输出.

更加具体的Pytorch复现请看我另一篇文章 Darknet53网络结构复现(Pytorch版)

为了比较Darknet-53与其它网络结构的性能,作者在TitanX上,采用相同的实验设置,将 256 × 256 256×256 的图片分别输入以Darknet-19,ResNet-101,ResNet-152和Darknet-53为基础网络的分类模型中,实验得到的结果如下图所示。可以看到Darknet-53比ResNet-101的性能更好,而且速度是其1.5倍,Darknet-53与ResNet-152性能相似但速度几乎是其2倍。注意到,Darknet-53相比于其它网络结构实现了每秒最高的浮点计算量,说明其网络结构能更好的发挥GPU性能 。

在这里插入图片描述


2.YOLOv3FPN改进

YOLO v3借鉴了FPN的思想,从不同尺度提取特征。相比YOLO v2,YOLO v3提取最后3层特征图,不仅在每个特征图上分别独立做预测,同时通过将小特征图上采样到与大的特征图相同大小,然后与大的特征图拼接做进一步预测。用维度聚类的思想聚类出9种尺度的anchor box,将9种尺度的anchor box均匀的分配给3种尺度的特征图。

在COCO数据集上,这9个先验框是(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326).
分配上,在最小的13x13特征图上(有最大的感受野)应用较大的先验框(116x90),(156x198),(373x326)适合检测较大的对象。
中等的26x26特征图上(中等感受野)应用中等大小的先验框(30x61),(62x45),(59x119),适合检测中等大小的对象。
较大的52x52特征图上(较小的感受野)应用较小的先验框(10x13),(16x30),(33x23),适合检测较小的对象

在这里插入图片描述
(图片转载江大白)


3.YOLOv3损失函数改进

YOLOv3对类别预测的代价函数进行了修改,并且没有用softmax。用了逻辑回归层来对每个类别做二分类。逻辑回归层主要用到sigmoid函数,该函数可以将输入约束在0~1的范围内,因此当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类,这样一个框就可以预测多个类别,代价函数用的是sigmoid的交叉熵。


总结

从YOLO v1到YOLO v2再到YOLO 9000、YOLO v3, YOLO经历三代变革,在保持速度优势的同时,不断改进网络结构,同时汲取其它优秀的目标检测算法的各种trick,先后引入anchor box机制、引入FPN实现多尺度检测等,在目标检测领域取得了空前的成功,但YOLO v3也是Joseph Redmon Ali Farhadi的最后一篇目标检测领域的论文,他因为一些原因已经宣布永远退出目标检测领域。


本文只介绍YOLO v3较v1 v2的创新之处,v1 v2详解见
YOLO v1详细解读
YOLO v2详细解读

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。