本文说明下YOLO的基础架构(源码由于太长后期单独附上)
YOLO的架构
- 先看一下YOLO V1~V3的架构↓
整体架构分成Backbone,Neck,Head 三个部分
对于各个模块说明
Conv:卷积层,最基础的卷积操作
BN:Batch Normalization,我的理解请点链接
Leaky ReLu:(带泄露的 ReLU )在输入 x < 0 时, 保持一个很小的梯度 γ 。在x>0时,梯度为1
Res Unit:残差单元(思想同ResNet)。在Backbone中,每经过一个ResX都会进行一次下采样。
YOLO使用全卷积网络(没有全连接层),保留了空间信息
- 再看一下V4的架构↓
整体架构仍然分成Backbone,Neck,Head 三个部分
V4主要的变更点
①CBL变成CBM:激活函数由Leaky ReLu变成Mish
②Res Unit变成CSPX:CSPX在Res Unit基础上又添加了更复杂的结构,两者对比请见下图↓
CSPNet和ResNet的对比可以参考另一篇文章:CSPNet 论文笔记
以上图片来自转载,引用文章:深入浅出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基础知识完整讲解
输出网格(YOLO的头部)
输出的特征矩阵 19×19,38×38,76×76对应将原图分成19×19,38×38,76×76块网格(区域)。
后面的255=3×(80+1+4),按顺序说明下这些参数:
3:Anchor(先验框,用于框住检测的对象物体。对应每个网格,Anchor都有3种尺寸,可以理解大,中,小三个先验框)
80:Coco数据集(表明能识别的物体分类,例如:1=person, 2=bicycle, 3=car…等等总共80种)
1:Obj(只有1位,0表示无识别的物体,1表示有识别的物体)
4:tx, ty, tw, th(意义请见下图,图中蓝色框是bounding box,虚线框是anchor)