单GPU就能训练很好
从数据层面和网络设计层面来进行改善
BOF Bag of freebies
只增加训练成本,能提高精度,不影响推理速度
数据增强:调整亮度、对比度、色调、随机缩放、剪切等等
网络正则化的方法:Dropout、Dropblock
数据增强的方法
把训练集的一些数据做增强,变得更复杂,让网络学习增加网络的能力
马赛克数据增强 CutMix
数据增强有很多种
把猫和狗融合成一张
把图片部分变成黑色
把猫和狗进行拼接
yolov4中使用cutmix,即第三种数据增强
Random Erase
用随机值或训练集的平均像素值替换图像的区域
Hide and Seek
根据概率设置随机隐藏一些补丁
Self -adversarial-training(SAT)
引入噪音增加难度
Dropblock
之前的dropout是选择失活一部分神经元,防止网络过拟合。(数据集太简单了,增加一点难度)
相当于让一部分神经元检测不到图片。也就等价于让图片上某些像素点检测不到。
但是问题是dropout太简单了,虽然某些点检测不到,但是也可以根据周围像素推断。
因此出现了dropblock,dropblock选择使某一块区域都检测不到,负责检测一块区域的都失活。
这样大大增加了网络的难度,提升复杂性
Label Smoothing
之前标签的时候,是就是1,不是就是0。这样让网络学习之后,很绝对判断,觉得是或者不是
所有标签平滑一点,是标0.95,不是标0.05。给一点余地
GIOU损失
IOU损失 = 1 - IOU(prediction、groudtruth)
不太能很好反应
GIOU损失 = 1 - IOU +
引入了最小封闭形状C,C把A,B包含在内
在不重叠的情况下让预测框尽可能朝着真实框前进。
但是这种情况又完了
DIOU
分子表示预测框和真实框之间,中心点的欧氏距离d
CIOU : 最终yolov4选择CIOU损失
NMS
NMS
之前使用NMS(非极大值抑制)来确定是否删除一个框。用最大的那个置信度的框和周围其他框算IOU,IOU大于阈值就不要
DIOU-NMS
SOFT-NMS
与普通NMS相似,也是用最大置信度的框与周围框算IOU,IOU大于阈值的,不会之间删去,会给周围的框降置信度,降一点分。再次算。
BOS Bag of specials
增加稍微徐推断代价,可以提高精度
细节改进,引入了各种能让特征提取更好的方法
注意力机制,网络细节设计、特征金字塔
SPPNet
v3中说过,输入时候会改变输入数据的大小,因此不同尺寸输入提取特征就需要一定处理。
SPP通过最大池化来满足不同尺寸最终输入特征一致
另外SPPNet还可以增大感受野
CSPNet
每一个block按照特征图的channel维度拆成二部分
核心思想就是把特征图分成二部分,一部分按照正常网络走。另一部分concat到正常的输出
SAM
CBAM
CBAM注意力机制会对特征图的深度和图片上位置进行不同程度的注意,二个维度。通过赋予不同权重然后乘以原图
深度上不同特征的注意不同
单个图片上背景和前景的注意不同(空间注意力机制)
V4中引入的是SAM,只有空间注意力机制,即只对图片上的位置进行注意力赋予不同权重
原始SAM结构和V4中修改的SAM结构。对比发现就是去掉了maxpooling层
sigmid函数就是用来赋予权值的
PAN
PAN就是引出一个自底向上的特征传递路径
本来在v3中就有上层特征和下层特征融合向下传递的路径。但是没有下层特征向上传递的路径。因此引入了PAN
a部分是主干网络,主干网络看上去就4层,但是其实是4个block,每个block有好多层,因为这个是一个特征提取网络。假设100层,如果再重新走一遍网络从下向上传信息,会非常大计算量。
因此PAN使用了根据上传到下的特征图,再开辟一条捷径反过来融合从下向上
v4中更改了PAN的结构,不使用加法进行特征融合,使用乘法进行特征拼接操作
激活函数
Mish 包容性强,relu激活函数负值时候直接0,v4认为太绝对了,因此使用Mish
计算量大了,效果提升了
网络架构
SPPNet
PANNet
3个Head和v3相同