知識點回顧:
- resnet結構解析
- CBAM放置位置的思考
- 針對預訓練模型的訓練策略
- 差異化學習率
- 三階段微調
ps:今日的代碼訓練時長較長,3080ti大概需要40min的訓練時長
作業:
- 好好理解下resnet18的模型結構
- 嘗試對vgg16+cbam進行微調策略
ResNet結構解析與CBAM微調策略
1.ResNet18核心結構
# ResNet18基礎結構(基于torchvision實現)
from torchvision.models import resnet18
model = resnet18(pretrained=True)# 核心組件:
# - 初始卷積層(conv1): 7x7卷積+BN+ReLU
# - 4個layer結構(包含BasicBlock)
# - 平均池化層(avgpool)
# - 全連接層(fc)
?2.CBAM放置策略
class VGG16_CBAM(nn.Module):def __init__(self):super().__init__()self.features = nn.Sequential(# 第一個卷積塊nn.Conv2d(3, 64, kernel_size=3, padding=1),CBAM(64), # 在卷積層后添加CBAMnn.ReLU(inplace=True),nn.Conv2d(64, 64, kernel_size=3, padding=1),CBAM(64), # 每個卷積塊添加nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2)# ... 后續層同理)
3.三階段微調策略
# 階段1:凍結特征層
for param in model.features.parameters():param.requires_grad = False# 階段2:解凍后半部分層
for layer in list(model.features.children())[-4:]:for param in layer.parameters():param.requires_grad = True# 階段3:全解凍+小學習率
optimizer = optim.SGD([{"params": model.features.parameters(), "lr": 1e-4},{"params": model.classifier.parameters(), "lr": 1e-3}
], momentum=0.9)
作業
一、ResNet18結構理解 :
- 使用torchsummary查看詳細結構
from torchsummary import summary
summary(resnet18().to("cuda"), (3, 224, 224))
二、VGG16+CBAM微調 :
- 訓練命令建議
python train.py --model vgg16_cbam --batch-size 64 --lr 1e-3 --freeze-epochs 5
?
?