BaseLine与BackBone
一、BaseLine的含义
BaseLine是能完成某项任务的基本方法,Baseline 追求 “简单、能跑通、性能可衡量”,不需要复杂结构,核心是给后续优化提供 “参考基准”。 比如我们设计一个极简的卷积网络作为 Baseline:
import torch
import torch.nn as nn# Baseline 网络(完整的分类模型,包含特征提取+任务输出)
class MNIST_Baseline(nn.Module):def __init__(self, num_classes=10):super().__init__()# ① 特征提取部分(这部分其实就是这个 Baseline 里的“简易 Backbone”)self.feature_extractor = nn.Sequential(nn.Conv2d(1, 16, kernel_size=3, padding=1), # 1通道(灰度图)→16通道nn.ReLU(),nn.MaxPool2d(2, 2), # 尺寸 28×28→14×14nn.Conv2d(16, 32, kernel_size=3, padding=1), # 16→32通道nn.ReLU(),nn.MaxPool2d(2, 2) # 尺寸 14×14→7×7)# ② 任务输出部分(Head)self.classifier = nn.Sequential(nn.Flatten(), # 7×7×32 → 1568维向量nn.Linear(1568, 128),nn.ReLU(),nn.Linear(128, num_classes) # 128→10类(0-9))def forward(self, x):x = self.feature_extractor(x) # Backbone 提特征x = self.classifier(x) # Head 出结果return x
BaseLine的特点:
(1) 完整的 “任务解决方案”(能独立完成任务),比如这个MNIST_Baseline可以给定输入,得到一个10分类输出。
(2)通常包含 “简易 Backbone + Head”,是端到端模型。
(3)提供 “基准性能”,用于对比优化效果。
(4)简单、易实现、性能稳定(不求最优)
二、BackBone的含义
负责从原始数据(如图像)中提取基础、通用的特征,是模型的 “特征提取器”,比如 ResNet、EfficientNet。广泛应用于各种深度学习任务中,如图像分类、目标检测、语义分割等。不同的任务可以根据需求选择合适的 backbone,如 ResNet、VGG 等。
在目标检测和目标分割任务中,网络结构通常包含BackBone、Neck、Head。
比如可以使用ResNet作为目标检测任务的BackBone网络,负责提取输入数据的复杂特征,然后在此基础上设计或缝合一个对不同特征进行融合的网络——即Neck, 最后由Head负责形成最终需要结果特征。
下面将Resnet作为10分类任务的BackBone
import torch
from torchvision import models # 导入官方预训练模型库# 1. 加载预训练模型(含权重),并冻结部分Backbone权重(可选,减少训练量)
backbone = models.resnet50(pretrained=True) # 加载官方预训练ResNet50,含ImageNet权重
# 将0~-10的参数进行冻结,不再更新,根据数据量灵活调整
for param in list(backbone.parameters())[:-10]:param.requires_grad = False# 2. 替换Head层,适配自定义10分类任务(ResNet原Head是1000类全连接)
in_features = backbone.fc.in_features # 获取Backbone输出特征维度(2048)
backbone.fc = torch.nn.Linear(in_features, 10) # 新Head:2048维→10维(对应10类)# 3. 后续即可正常训练(此处省略数据加载、优化器定义等)
# 例如:将图像输入Backbone,得到10类概率
input_image = torch.randn(1, 3, 224, 224) # 模拟1张224×224的3通道图像
output = backbone(input_image) # 输出形状:(1, 10),即1个样本的10类概率