Backbone决定了模型的特征提取精度,backbone后面一般接的就是检测头Head。
YOLO v1只是把最后的特征分成了 7x7 个grid,到了YOLO v2就变成了13x13 个grid,再到YOLO v3 v4 v5就变成了多尺度的(strides=8,16,32),更加复杂了。那为什么一代比一代检测头更加复杂呢?
答案是:因为它们的提特征网络更加强大了,能够支撑起检测头做更加复杂的操作。换句话说,如果没有backbone方面的优化,你即使用这么复杂的检测头,可能性能还会更弱。所以引出了今天的话题:yolo系列中的backbone的改进历史。
Yolov1
图一

可以看到首先是7x7的卷积核,后面是3x3的卷积核,中间穿插1x1的卷积来节约参数,最后2层是全连接层。
画图的规律是安装feature map的分辨率来,两个分辨率之间的卷积操作数目不同,但是在代码里面他们都会被放在一起进行运算。比如从28x28到14x14的操作,实际上是经过了四次gap层,举例对于vgg13来说:
# vgg13 不加bn 的配置
cfg =[64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M']
def make_layers(cfg, batch_norm=False):
layers = []
in_channels = 3
s = 1
first_flag=True
for v in cfg:
s=1
if (v==64 and first_flag):
s=2
#第一层的时候,stride是2,同时进行一次maxpooling,所以feature map从448到了112

YOLO(You Only Look Once)系列模型在目标检测领域不断发展,其Backbone网络从YOLOv1的VGG13到YOLOv2的Darknet19,再到后续版本的更复杂结构,不断提升特征提取能力。YOLOv2引入了DarkNet,通过多个3x3卷积替代7x7卷积,减少参数并增加非线性操作。此外,它采用全局平均池化取代全连接层,允许输入尺寸变化,利于小目标检测。训练过程分为先训练分类模型,再训练检测模型。YOLOv2的检测头包括层融合和Passthrough层,用于更好地捕捉不同尺度的目标。同时,YOLOv2引入了Anchors机制,改进了坐标预测方式。
14万+

被折叠的 条评论
为什么被折叠?



