YOLOv5-6.0版本的Backbone主要分为Conv模块、CSPDarkNet53(C3)和SPPF模块。
一、yolov5
CSPNet被提出的主要目的是为了保证在模型检测和识别精度没有下降的情况下,减少计算量,提高推理速度。它的主要思想是通过分割梯度流,使梯度流通过不同的网络路径传播。通过拼接和过渡等操作,从而实现更丰富的梯度组合信息。
CSP组件 (5.0版本)
C3组件 (6.0版本)
相对CSP,C3结构经过残差模组Resunit后少了一个卷积层, 直接连到了Concat,正好只有3个CBS,或者说只有3个卷积,可能才叫C3(CSP有4个),并且C3中的残差模组,有的地方也叫BottleNeck1(CSP中的残差模组也叫BottleNeck)
通过C3替换CSP,可以起到精简网络结构,减少计算量,降低模型推理时间的作用。作者在项目的updated result里有说明,这样操作在YOLOV5X上模型参数量可以从89M下降到87.7M,推理时间从6.9ms下降到6.0ms,mAP从49.2提升到50.1。
C3模块不会改变通道数
class C3(nn.Module):
# CSP Bottleneck with 3 convolutions
def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion
super().__init__()
c_ = int(c2 * e) # hidden channels
self.cv1 = Conv(c1, c_, 1, 1)
self.cv2 = Conv(c1, c_, 1, 1)
self.cv3 = Conv(2 * c_, c2, 1) # optional act=FReLU(c2)
self.m = nn.Sequential(*(Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)))
def forward(self, x):
return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))
二、yolox
就是C3

本文探讨了YOLOv5从版本6.0到8的发展过程中Backbone部分的变化,包括CSPNet、C3及C2f模块的演进。介绍了这些模块如何在保证模型精度的同时优化计算效率,并通过实验对比了C3与C2f模块的性能差异。
最低0.47元/天 解锁文章

7309





