YOLO v4
网络结构:
Backbone: CSP-Darknet53
Neck: SPP、PAN
Head: YOLOv3
优化策略:
- Eliminate grid sensitivity
- Mosaic data augmentation
- Iou threshold(match positive samples)
- Optimizered anchors
- ciou
Backbone:
CSP-Darknet53
Part1/Part2:
通常输入图像在通道方向进行一个均分操作,但csp并非如此
在csp模块之前进行一个下采样,将输出依次通过两个1*1的卷积层(输出特征层的个数为输入特征层个数的一半 128 -> 64),然后接上resblock,再继续接上1*1的卷积层(对应图b的transition),与part1输出进行拼接,再通过1*1的卷积层(对应图b最后一个transition)
Resblock:
Csp作用:
- 增强cnn学习能力
- 移除计算瓶颈
- 降低显存的使用
Cspdarknet53的结构:
ConvBNMish:
卷积层+BN层+Mish激活函数
Mish激活函数:
与 ReLU、Leaky ReLU 相比,Mish 保持了输入的负值部分,并且其曲线更加平滑和连续。
ResBlock:
1*1卷积层+3*3卷积层
输入和输出add相加
DownSample1通道数没有减半的CSP,从DownSample2后和CSP是一致的,通道数输出对于输入减半;1深度不变,2345都是在深度上concat
Neck:
SPP、PAN
SPP(Spatial Pyramid Pooling):
对于输入,依次通过5*5,9*9,13*13的最大池化下采样层(stride=1),经过对应的padding后,他们的输入输出特征层的大小高宽是一致的,再将三模块的输出和原输入四个分支进行concat拼接
作用:一定程度解决多尺度问题
PAN(path aggregation network):
(a)左:网络的backbone,一般进行特征提取
(a)右:对提取的特征层上构建特征金字塔(fpn)
Fpn:高层的语义信息向底层进行融合
(b):与fpn相反,将低层的语义信息向高层融合
PAN:(a)右+(b)
原始的Pannet中关于特征层与特征层融合部分采取相加策略,yolov4采用的是concat,将两个特征层在深度上进行拼接
Head:YOLOv3
Yolov4网络建构:
ConvSet :
是一组卷积层的堆叠,通常包括卷积、批量归一化、激活函数(Leaky ReLU)以及 1x1 和 3x3 的卷积操作。主要作用是进一步提取和增强特征表达能力,为后续的检测头提供更加丰富的特征信息
Leakey relu:
Leaky ReLU 保留了负值部分,不过会将其按比例缩小,避免了 ReLU 的“死神经元”问题
Conv2d:
只是普通的卷积操作,没有BN和激活函数
C=(4+1+num_classes)*3
4:x、y、w、h
1:objectness
num_classes:分类个数
*3:每个anchor,特征层都会采用三个不同的模板
优化策略:
Eliminate grid sensitivity(消除grid网格敏感程度):
问题:
如果gt box的中心点落在grid cell的边界上,希望经过sigmoid函数尽可能为0,x趋于负无穷,而极端数值网络无法达到,因此引入缩放因子scale,主流scale = 2
消除grid 网格敏感度
Mosaic data augmentation
将4张不同的图片按照一定的规则拼接在一起,扩充样本的多样性
IoU threshold(match positive samples)
匹配正样本
与u版yolov3差不多
Yolov3:
若有多个anchor template的iou符合,那么将gt同时分配给anchor1和anchor2,以增加正样本的数量
Yolov4:
通过消除grid网格敏感度将网络预测相对grid左上角从原来的(0,1)缩放到(-0.5,+1.5),增加了格子扩充正样本
根据位置扩充格子,特殊情况只采用刚好落入的anchor
Optimizered anchors
Yolov3 k-means聚类
-
Ciou