参考文献:江大白老师
必备基础:YOLOv3:江大白老师视频讲解
论文地址:YOLOX: Exceeding YOLO Series in 2021
网络结构图:Yolox-Darknet53
非常感谢江大白老师的工作!
YOLOX学习笔记
YOLOv3
实际上,YOLOX是在YOLOv3_spp版本上进行的优化,即在YOLOv3的Backbone网络后面增加了SPP组件。
Darknet53
SPP
论文链接:Spatial Pyramid Pooling
实现方法:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合。
可简化为如下:
YOLOv4
相比于YOLOv3的主要改进:
输入端:采用Mosaic数据增强;
Backbone:采用了CSPDarknet53、Mish激活函数、Dropblock等方式;
Neck:采用了SPP、FPN+PAN结构;
输出端:采用CIOU_Loss、DIOU_Nms操作。
推荐博客:Cai Yichao
Mosaic
YOLOv4提出的新的数据增强方式,对四张图像进行融合
CSP结构
论文链接: CSPNet
论文提出Cross Stage Partial(CSP)结构,其初衷是减少计算量并且增强梯度的表现。
主要思想是:在输入block之前,将输入分为两个部分,其中一部分通过block进行计算,另一部分直接通过一个shortcut进行concatenate。
可简化如下:
Mish激活函数
论文地址:Mish
tanh的公式如下:
Mish激活函数的公式为:
- 上图为Mish的曲线。首先其和ReLU一样,都是无正向边界的,可以避免梯度饱和;
- 其次Mish函数是处处光滑的,并且在绝对值较小的负值区域允许一些负值。
- Mish激活函数的计算复杂度比ReLU要高不少,如果你的计算资源不是很够,可以考虑使用LeakyReLU代替Mish
目前的普遍看法是,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化。
PAN + FPN
论文链接:Path aggregation network for instance segmentation
PAN结构即为下图中(b)Bottom-up augmentation
FPN层自顶向下传达强语义特征,而PAN则自底向上传达强定位特征,两两联手,从不同的主干层对不同的检测层进行参数聚合
YOLOv4中的改进:PANet网络的PAN结构中,两个特征图结合是采用shortcut操作,而Yolov4中则采用concat操作,特征图融合后的尺寸发生了变化。
YOLOv5
- 在Yolov5网络中,与Yolov4相比最大的创新点在于,作者将网络结构,做成了可选择配置的方式。
- 比如主干网络结构,根据各个网络的宽度、高度不同,可以分为Yolov5s、Yolov5l、Yolov5s、Yolo5x等版本。
YOLOX
有了前面的铺垫,接下来进入正题。
总览网络模型
(1) 基准模型:Yolov3_spp
选择Yolov3_spp结构,并添加一些常用的改进方式,作为Yolov3 baseline基准模型;
(2) Yolox-Darknet53
对Yolov3 baseline基准模型,添加各种trick,比如Decoupled Head、SimOTA等,得到Yolox-Darknet53版本;
(3) Yolox-s、Yolox-m、Yolox-l、Yolox-x系列
对Yolov5的四个版本,采用这些有效的trick,逐一进行改进,得到Yolox-s、Yolox-m、Yolox-l、Yolox-x四个版本;
(4) 轻量级网络
设计了Yolox-Nano、Yolox-Tiny轻量级网络,并测试了一些trick的适用性;
性能对比:
网络结构
YOLOX-Darknet53:
改进方案:
Decoupled head
实现方式:先使用 1个1x1 的卷积进行降维,然后在两个分支里,各使用了 2个3x3 卷积进行特征提取
提出思路:将YOLO的输出端改为End-to-End方式(无NMS)时,AP降低很多;而对FCOS进行修改时,性能并没有怎么下降
论文连接:End-to-End
通过实验得到,采用Decoupled Head的方式,与原来相比,不单单是精度上的提高,网络的收敛速度也加快了。
但是需要注意的是:将检测头解耦,会增加运算的复杂度。
结论:目前Yolo系列使用的检测头,表达能力可能有所欠缺,没有Decoupled Head的表达能力更好。
进一步剖析decoupled head:
三个分支:
(1) cls_output:主要对目标框的类别,预测分数。因为COCO数据集总共有80个类别,且主要是N个二分类判断,因此经过Sigmoid激活函数处理后,变为202080大小。
(2) obj_output:主要判断目标框是前景还是背景,因此经过Sigmoid处理好,变为20201大小。
(3) reg_output:主要对目标框的坐标信息(x,y,w,h)进行预测,因此大小为20204。
最后三个output,经过Concat融合到一起,得到202085的特征信息。
Strong augmentation
Mosaic
论文链接:YOLOv4
Yolov4的mosaic数据增强参考了CutMix数据增强方式, 是CutMix数据增强方法的改进版。
基本思路:mosaic数据增强利用了四张图片,对四张图片进行拼接,每一张图片都有其对应的bbox,将四张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的bbox,然后将新的图片作为输入,相当于一次传入四张图片。
论文中说这极大丰富了检测物体的背景,且在BN计算的时候一次会计算四张图片的数据!
MixUp
论文链接:mixup:BEYOND EMPIRICAL RISK MINIMIZATION
基本思路:从训练样本中随机抽取两个样本进行简单的随机加权求和,同时样本的标签也对应加权求和,然后预测结果与加权求和之后的标签求损失,在反向求导更新参数。
mixup采用对不同类别之间进行建模的方式实现数据增强,而通用数据增强方法则是针对同一类做变换
有两点需要注意:
(1) 在训练的最后15个epoch,这两个数据增强会被关闭掉。而在此之前,Mosaic和Mixup数据增强,都是打开的,这个细节需要注意。
(2) 由于采取了更强的数据增强方式,作者在研究中发现,ImageNet预训练将毫无意义,因此,所有的模型,均是从头开始训练的。
Anchor-free
anchor-based机制
根据设定好的规则,通常是与gt_box的IOU最大的anchor作为用于网络回归的fg(foreground),网络回归的目标是fg到gt_box的offset。最终由fg和网络输出的offset得到pd_box。
以YOLOv3为例:
黄色框:gt_box
蓝色框:anchor,为目标中心点所在的单元格对应的anchor,每个单元格都有3个anchor。其中,13 * 13中第二个anchor为被选定的fg
当输入为416*416时,网络最后的三个特征图大小为13 * 13,26 * 26,52 * 52。
当采用COCO数据集,即有80个类别时。
基于每个anchor,都有x、y、w、h、obj(前景背景)、class(80个类别),共85个参数。
因此会产生3 * (13 * 13+26 * 26+52 * 52)* 85 = 904995个预测结果。
如果将输入从416 * 416,变为640 * 640,最后的三个特征图大小为20 * 20, 40 * 40, 80 * 80。
则会产生3 *(20 * 20 + 40 * 40 + 80 * 80) * 85 = 2142000个预测结果。
anchor-free 机制
论文连接:CornerNet: Detecting Objects as Paired Keypoints
a. 输出的参数量:
anchor-free:当输入为640 * 640时,最终输出得到的特征向量是85 * 8400,即8400 * 85=714000个预测结果
anchor-based:当输入为640 * 640时,得到2142000个预测结果
足足少了2/3的参数量!!!
虽然最终得到的feature map尺寸是相同的,但是因为anchor-base需要在每个格子的中心点处生成3个anchor,而anchor-free只需在每个格子的中心点处生成一个box,因此参数量大大减小。
b. anchor的信息
上面分支下采样了5次,Decoupled Head①的输出为20 * 20 * 85大小,即有400 个box,所对应的box大小为32 * 32
中面分支下采样了4次,Decoupled Head②的输出为40 * 40 * 85大小,即有1600个box,所对应的box大小为16 * 16
上面分支下采样了3次,Decoupled Head③的输出为80 * 80 * 85大小,即有6400个box,所对应的box大小为8 * 8
有了这些anchor之后,接下来就需要进行标签分配, 即分配正样本anchor和负样本anchor,由正样本anchor回归出正样本的预测框。
c. 标签分配
在8400个预测框中,只有少部分是正样本,绝大多数是负样本。
合理分配正样本的anchor的必要性:
假如第3、10、15个anchor是正样本anchor,则对应到网络输出的8400个预测框中,第3、10、15个预测框,就是相应的正样本预测框。
在训练过程中,在生成的anchor基础上,网络不断地进行预测,不断地进行迭代,从而持续更新网络参数,让网络预测的越来越准。
但是,实际上分配为正样本的anchor可能也随着网络的更新在不断变化,这就对网络的预测造成了挑战。
论文采用的方法为:初步筛选 + SimOTA
① 初步筛选
初步筛选的方式主要有两种:根据中心点来判断、根据目标框来判断;
(1) 根据中心点来判断:
规则:寻找anchor_box中心点,落在gt_boxes矩形范围的所有anchors。