YOLO中backbone.
时间: 2025-03-26 18:26:27 浏览: 29
### YOLO 模型 Backbone 组件详解
#### 3.1 CBL (Convolution-BatchNormalization-LeakyReLU)
YOLOv5 的 Backbone 中,CBL 是一种常见的基础构建单元。该结构由卷积层(Convolution)、批标准化(Batch Normalization) 和激活函数(Leaky ReLU) 构成[^1]。这种组合有助于加速收敛过程,并提高模型性能。
```python
import torch.nn as nn
def cbl_block(in_channels, out_channels, kernel_size=3, stride=1, padding=None):
if not padding:
padding = (kernel_size - 1) // 2
return nn.Sequential(
nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=False),
nn.BatchNorm2d(out_channels),
nn.LeakyReLU(0.1)
)
```
#### BottleneckCSP / C3
为了进一步优化特征提取能力,在某些版本中引入了改进版残差连接——BottleneckCSP 或者称为 C3 结构。它通过跨阶段部分链接的方式增强了信息传递效率,减少了梯度消失现象的发生概率。
```python
class CSPBlock(nn.Module):
def __init__(self, in_channels, out_channels, num_blocks=1):
super(CSPBlock, self).__init__()
hidden_channels = int(out_channels/2)
self.conv1 = cbl_block(in_channels, hidden_channels, 1, 1)
self.conv2 = cbl_block(hidden_channels, hidden_channels, 3, 1)
self.blocks = nn.Sequential(*[
ResidualBlock(hidden_channels) for _ in range(num_blocks)
])
def forward(self, x):
y = self.conv1(x)
y = self.blocks(y)
z = self.conv2(y)
return torch.cat([z,x], dim=1)
```
#### SPP(Spatial Pyramid Pooling)/SPPF
空间金字塔池化(Spatial Pyramid Pooling,SPP)及其变体SPPF被用于增强感受野范围内的上下文理解力。这些模块允许网络捕捉不同尺度下的视觉模式,从而提高了检测效果。
```python
class SPPLayer(nn.Module):
""" Space to Depth layer """
def __init__(self, size=(5,9,13)):
super(SPPLayer,self).__init__()
self.maxpool_layers = nn.ModuleList([
nn.MaxPool2d(kernel_size=k,stride=1,padding=k//2) for k in size])
def forward(self, input_tensor):
features = [layer(input_tensor) for layer in self.maxpool_layers]
cat_features = torch.cat(features+[input_tensor],dim=1)
return cat_features
```
阅读全文
相关推荐


















