深度剖析目标检测算法YOLOV4 目录
简述 yolo 的发展历程
介绍 yolov3 算法原理
介绍 yolov4 算法原理(相比于 yolov3,有哪些改进点)
YOLOV4 源代码日志解读
yolo 发展历程采用卷积神经的目标检测算法大致可以分为两个流派,一类是以 R-CNN 为代表的 two-stage,另一类是以 YOLO 为代表的 one-stage,
R-CNN 系列的原理:通过 ROI 提取出大约 2000 个候选框,然后每个候选框通过一个独立的 CNN 通道进行预测输出。
R-CNN 特点:准确度高,速度慢,所以速度成为它优化的主要方向。
YOLO 系列的原理:将输入图片作为一个整体,通过 CNN 通道进行预测输出。
YOLO 特点:速度快,准确度低,所以准确度成为它优化的主要方向。
经过一系列的优化与改进,特别是今年 4 月份推出的 YOLOV4,使得它在准确度方面得到了大幅度的提升,另外,它还能达到实时检测(在 GPU 加持的情况下)。
下图是 YOLOV4 源代码的页面,github: https://github.com/AlexeyAB/darknet
它的 Star 达到 13400,可以说,知名度不是一般的高,在目标检测领域,好像只有 YOLOV3 超过它了,达到了 19000 ,是不是值得大家花点时间精力去探索一下呢 ?
这里需要说明一下的是 YOLOV3(美国大神),YOLOV4 (俄罗斯大神)作者不是同一个人,在 19 年的时候,YOLOV3 作者发表了一个声明:有些组织将他的算法用于
军事和窥探个人隐私方面,使得他在道德上很难接受,他将不再进行 CV 的研究与更新。当然,这是一个小插曲了,这里,我们看到,YOLOV4 作者更新是非常频繁的,
commits 达到了 2000 + 。下面我们看看官方给出的实验结果。
这里是以 COCO 作为测试数据集,相比于 YOLOV3,YOLOV4 在精度方面提升了 10%,FPS(frame per second) 提升了 12%。
顺便说一句,YOLOV3 的作者也是认可 YOLOV4 的改进的,在 YOLOV3 的官网 https://github.com/pjreddie/darknet 也是给出了
YOLOV4 的链接。
yolov3 算法原理这里借用某位大神画的结构图,因为 YOLOV4 是在 YOLOV3 的基础上改进的,所以我们需要先介绍一下 YOLOV3,
这里可能需要一些神经网络的知识,比如卷积,池化,全连接,前向传播,反向传播,损失函数,梯度计算,权重参数更新,如果对
这些不是很清楚,可以看我之前的博客(卷积神经网络(CNN)详解与代码实现 https://www.cnblogs.com/further-further-further/p/10430073.html)。
YOLOV3 原理我在上上一篇博客(深度剖析YOLO系列的原理 https://www.cnblogs.com/further-further-further/p/12072225.html)有过介绍,
这里我就介绍一下大家容易忽略,或者是比较难理解的点:
输入图片尺寸可变
输入图片尺寸是 608 * 608,当然,这个尺寸是可以改变的,它只需要满足是 32 的倍数,因为在经过后面的网络结构的时候,图片尺寸缩小的最大倍数是 32 倍,
这可以从它的输出 19 * 19 看出来。
主干网络
采用的是 darknet 53 层网络结构,去掉了全连接层,53 - 1 = 52
52 = 1+(1+2*1)+(1+2*2)+(1+2*8)+(1+2*8)+(1+2*4)
为什么要去掉全连接层 ?
解答:全连接的本质是矩阵的乘法运算,会产生固定尺寸的输出,而 YOLOV3 是需要多尺寸的输出的,所以要去掉全连接层。
CBL :表示基础的卷积模块,是由一个 Conv 卷积层 + BN 批量归一化层 + relu 非线性激活函数层组成。
为什么在 CBL 里没有池化层 pooling ?