yolov3算法的详细说明

author author     2022-12-06     174

关键词:


YOLOv3 算法的详细说明

YOLOv3没有太多的创新,主要是借鉴一些好的方案融合到YOLO里面。不过效果还是不错的,在保持速度优势的前提下,提升了预测精度,尤其是加强了对小物体的识别能力。

本文主要讲v3的改进,由于是以v1和v2为基础,关于YOLO1和YOLO2的部分析请移步​​YOLO v1深入理解​​​ 和 ​​YOLOv2 / YOLO9000 深入理解​​。

YOLO3主要的改进有:调整了网络结构;利用多尺度特征进行对象检测;对象分类用Logistic取代了softmax。

新的网络结构Darknet-53

在基本的图像特征提取方面,YOLO3采用了称之为Darknet-53的网络结构(含有53个卷积层),它借鉴了残差网络residual network的做法,在一些层之间设置了快捷链路(shortcut connections)。

YOLOv3

图1 Darknet-53[1]

上图的Darknet-53网络采用256*256*3作为输入,最左侧那一列的1、2、8等数字表示多少个重复的残差组件。每个残差组件有两个卷积层和一个快捷链路,示意图如下:

YOLOv3

图2 一个残差组件[2]

利用多尺度特征进行对象检测

YOLOv3

图3 YOLO3网络结构[3]

YOLO2曾采用passthrough结构来检测细粒度特征,在YOLO3更进一步采用了3个不同尺度的特征图来进行对象检测。

结合上图看,卷积网络在79层后,经过下方几个黄色的卷积层得到一种尺度的检测结果。相比输入图像,这里用于检测的特征图有32倍的下采样。比如输入是416*416的话,这里的特征图就是13*13了。由于下采样倍数高,这里特征图的感受野比较大,因此适合检测图像中尺寸比较大的对象。

为了实现细粒度的检测,第79层的特征图又开始作上采样(从79层往右开始上采样卷积),然后与第61层特征图融合(Concatenation),这样得到第91层较细粒度的特征图,同样经过几个卷积层后得到相对输入图像16倍下采样的特征图。它具有中等尺度的感受野,适合检测中等尺度的对象。

最后,第91层特征图再次上采样,并与第36层特征图融合(Concatenation),最后得到相对输入图像8倍下采样的特征图。它的感受野最小,适合检测小尺寸的对象。

9种尺度的先验框

随着输出的特征图的数量和尺度的变化,先验框的尺寸也需要相应的调整。YOLO2已经开始采用K-means聚类得到先验框的尺寸,YOLO3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。

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

YOLOv3

图4 特征图与先验框

感受一下9种先验框的尺寸,下图中蓝色框为聚类得到的先验框。黄色框式ground truth,红框是对象中心点所在的网格。

YOLOv3

图5 9种先验框尺寸

对象分类softmax改成logistic

预测对象类别时不使用softmax,改成使用logistic的输出进行预测。这样能够支持多标签对象(比如一个人有Woman 和 Person两个标签)。

输入映射到输出

YOLOv3

图6 输入->输出

不考虑神经网络结构细节的话,总的来说,对于一个输入图像,YOLO3将其映射到3个尺度的输出张量,代表图像各个位置存在各种对象的概率。

我们看一下YOLO3共进行了多少个预测。对于一个416*416的输入图像,在每个尺度的特征图的每个网格设置3个先验框,总共有 13*13*3 + 26*26*3 + 52*52*3 = 10647 个预测。每一个预测是一个(4+1+80)=85维向量,这个85维向量包含边框坐标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种对象)。

对比一下,YOLO2采用13*13*5 = 845个预测,YOLO3的尝试预测边框数量增加了10多倍,而且是在不同分辨率上进行,所以mAP以及对小物体的检测效果有一定的提升。

小结

YOLO3借鉴了残差网络结构,形成更深的网络层次,以及多尺度检测,提升了mAP及小物体检测效果。如果采用COCO mAP50做评估指标(不是太介意预测框的准确性的话),YOLO3的表现相当惊人,如下图所示,在精确度相当的情况下,YOLOv3的速度是其它模型的3、4倍。

YOLOv3

图7 YOLOv3与其它模型的性能对比[1]

不过如果要求更精准的预测边框,采用COCO AP做评估标准的话,YOLO3在精确率上的表现就弱了一些。如下图所示。

YOLOv3

图8 YOLOv3与其它模型的性能对比[1]

参考

[1]​​YOLOv3: An Incremental Improvement​​​

[2]​​Deep Residual Learning for Image Recognition​

​ [3]​​What’s new in YOLO v3?​​​

[4]​​How to implement a YOLO (v3) object detector from scratch in PyTorch​

[5​​]https://www.jianshu.com/p/d13ae1055302​​  

关于yolov3的一些细节

...测算法进行对比,也不会介绍YOLO9000相关的内容,只总结YOLOv3算法的具体流程和实现细节。所以,下文中所有提到的YOLO,如非特别说明,均指YOLOv3。如果需要了解更多对象检测算法,可以参考以下部分相关论文:R-CNNFastR-CNNFasterR... 查看详情

深度学习目标检测_yolov3超详细解读(代码片段)

文章目录YOLOV3概述网络结构backbone:darknet-53特征细化(多scale)残差连接残差网络的发家史先验框softmax改进YOLOV3概述yolov3论文地址:https://pjreddie.com/media/files/papers/YOLOv3.pdf先说说yolov3的效果:yolov3把自己放到了... 查看详情

yolov3算法详解

参考技术AYOLOv3:AnIncrementalImprovement按照原文的说法,它其实是一篇技术试验的报告。本文通过一些试验来改进yolo方法。这部分的预测和yolov2是一样的,详情可以参考yolov2算法详解。文章采用的是多标签的分类方法,文章认为softma... 查看详情

matlab能否运行yolov3

参考技术A可以yolov3算法是属于神经网络算法的。Yolov3是一个目标检测算法项目,而目标检测的本质,就是识别与回归,而处理图像用的最多的就是卷积神经网络CNN 查看详情

yolov3配置文件说明模型配置文件——cfg/yolov3-voc.cfg

batch=64        #一批训练样本的样本数量,每batch个样本更新一次参数subdivisions=32    #它会让你的每一个batch不是一下子都丢到网络里。而是分成subdivision对应数字的份数,一份一份的跑完后,在一起... 查看详情

小白学yoloyolov3网络结构细致解析

摘要:本文将详细介绍Yolov3的网络结构相关内容。Yolov3网络结构在博客“Yolo发展历史及网络结构”中我们已经详细的解释了Yolov1的网络结构,并简要的提到了Yolov2与Yolov3对于网络结构的改进,本篇博客将详细介绍Yolov3的网... 查看详情

63天算法训练详细说明

...种语法糖,最大化的精简代码。复习基本数据结构和基本算法,提高代码效率。训练持久力。说明所有的算法题目来源于LeetCode,版权归官方所有。知乎:大家是如何刷LeetCode的?Github:详尽的LeetCode题解Github:动画演示LeetCode题... 查看详情

yolov3中的anchor参数是怎么来的?

参考技术AYOLOv3的配置文件中有一段对anchors参数的配置根据《YOLO9000:Better,Faster,Stronger》文章中所述:根据《YOLOv3:AnIncrementalImprovement》文章中所述:从数据集中类聚出来的锚框,相当于预测框的一个参考,基于这个参考,算法生... 查看详情

从零开始带你一步一步使用yolov3测试自己的数据

上一篇: 从零开始带你一步一步使用YOLOv3训练自己的数据我给大家详细介绍了如何使用YOLOv3模型来训练自己的数据集。训练部分完成,本文将继续给大家详细介绍如何使用我们训练好的模型来进行图片的批量测试。一、... 查看详情

yolov3-tools使用说明

...、标注、训练过程。github地址:https://github.com/henreash/yolov3-tools已编译的发布程序:cuda10.0版本(https://pan.baidu.com/s/1ESi9HaVlRx6UpfsP_Uk6Eg提取码:mi2u)                cuda10.2版本(https://pan.baidu.com/s/12QCNC38QnHG... 查看详情

软件详细设计说明书

...的模块基本信息和功能概述部分,黄迪负责模块描述中的算法和模块处理逻辑部分,李卓远负责模块描述中接口和性能测试部分。我们在5.1基本完成了自己部分的内容并一起对自己存疑的部分进行了讨论,最终完成了软件详细设... 查看详情

基于yolov3的行人目标检测算法在图像和视频中识别检测(代码片段)

...load/sheziqiong/85772186主要功能介绍本项目设计并实现了基于yolov3的行人目标检测算法,并将该目标检测算法应用在图像和视频的识别检测之中。实现的主要功能有:对静态图像(jpg、png)中的行人进行识别,并框选出行人... 查看详情

yolov3训练自己的数据附优化与问题总结(代码片段)

YOLOv3训练自己的数据附优化与问题总结环境说明系统:ubuntu16.04显卡:Teslak8012G显存python环境:2.7&&3.6前提条件:cuda9.0cudnn7.0opencv3.4.0安装cuda和cudnn教程安装opencv3.4.0教程实现YOLOV3的demo首先安装darknet框架,官网链接gitclonehttps:/... 查看详情

matlab实现yolov3对车辆进行检测--全程中文说明适合初学者学习

...;如果电脑的GPU性能不佳的情况下,利用Matlab可以实现YOLOV3的算法对目标识别。程序全部都是通俗易懂的,并且如何使用此程序对图片识别,从修改图片大小到打标签再到训练模型和识别图像都一一的细说,因此只... 查看详情

如何入门yolo目标检测?

...法理解yolo模型的损失函数知道yoloV2模型的改进方法知道yoloV3的多尺度检测方法知道yoloV3模型的网络结构及网络输出了解yoloV3模型先验框设计的方法知道yoloV3模型为什么适用于多标签的目标分类了解yoloV4模型YOLO系列算法是一类典... 查看详情

yolov3中k-means聚类出新数据集的anchor尺寸(代码片段)

参考博客:聚类kmeans算法在yolov3中的应用https://www.cnblogs.com/sdu20112013/p/10937717.html这篇博客写得非常详细,也贴出了github代码:https://github.com/AlexeyAB/darknet/blob/master/scripts/gen_anchors.py整体代码如下:1‘‘‘2CreatedonFeb20,20 查看详情

如何入门yolo目标检测?

...法理解yolo模型的损失函数知道yoloV2模型的改进方法知道yoloV3的多尺度检测方法知道yoloV3模型的网络结构及网络输出了解yoloV3模型先验框设计的方法知道yoloV3模型为什么适用于多标签的目标分类了解yoloV4模型YOLO系列算法是一类典... 查看详情

目标检测算法(r-cnn,fastr-cnn,fasterr-cnn,yolo,ssd,yolov2,yolov3)

参考技术A深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理。 目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别出物体属于哪个分类,更重要的是得到物体... 查看详情