ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SGD优化器贯穿Faster R-CNN的全模型

SGD优化器贯穿Faster R-CNN的全模型

统一管理所有可训练参数的更新,而非作用于某个局部模块。

一、全局视角:SGD管理哪些参数?

Python
复制
# Faster R-CNN可训练参数总览
model = FasterRCNN(backbone=ResNet50(),      # 包含 conv1~conv5_x, BN层rpn=RPNHead(),            # 包含分类/回归分支的卷积roi_heads=RoIHeads(),     # 包含全连接层、分类器
)# 所有参数由同一个SGD优化器管理
optimizer = optim.SGD(params=[# 1. Backbone参数 (C1~C5卷积){'params': model.backbone.parameters()},# 2. RPN参数 (anchor分类/回归){'params': model.rpn.parameters()},# 3. RoI Head参数 (检测头){'params': model.roi_heads.parameters()},],lr=0.02,momentum=0.9,weight_decay=1e-4
)
 
一句话 :SGD的 step() 每次更新整个Faster R-CNN的权重,从 backbone 底层卷积到 RoI Head 的分类器。

二、训练流程中的SGD位置

完整训练循环

Python
复制
for epoch in range(12):for images, targets in dataloader:# 1. 前向传播 (所有模块共同参与)#    - Backbone提取特征#    - RPN生成proposals#    - RoI Head预测类别/框loss_dict = model(images, targets)losses = sum(loss_dict.values())  # 总损失# 2. 反向传播 (计算所有模块的梯度)optimizer.zero_grad()losses.backward()#    ↓#    梯度已存储在每个参数的 .grad 属性中#    model.backbone.conv1.weight.grad#    model.rpn.conv.weight.grad#    model.roi_heads.box_predictor.weight.grad# 3. 参数更新 (SGD一步更新所有模块)optimizer.step()#    ↓#    所有参数同步更新:#    backbone.conv1.weight -= lr * grad#    rpn.conv.weight -= lr * grad#    roi_heads.box_predictor.weight -= lr * grad
 
SGD作用位置图:
复制
损失函数↓ (backward)
梯度传播到每个参数↓
├─→ Backbone (ResNet)  ← SGD更新
├─→ RPN Head           ← SGD同步更新
└─→ RoI Head           ← SGD同步更新
返回列表