实现细节
总共3个模型,第一个是以resnet50为backbone,并加上FPN结构的Faster R-CNN,一个是同样是使用resnet50为backbone,但没用fpn,最后一个是用mobilenetv3作为backbone,用fpn
1 # total param num 41,449,656/19,624,872/70,566,260 2 # Resnet50-fpn / mobilev3-fpn / Resnet50-no_fpn 3 # optimizer = torch.optim.SGD(params, lr=0.01, momentum=0.9, weight_decay=1e-4)/lr=0.02 4 # 损失函数= 类别损失cross_entropy() + 边界框损失smooth_l1_loss() 5 # batch = 8 / 多GPU:不同步bn,每个GPU,batch=2, 6 # 加载完整预训练权重 / 只加载了backbone的权重 / 只加载backbone权重 7 # epoch = 30/20 8 # 每epoch,train:14/7分钟,test:10分钟,total:12h/8.5h |多GPU,train:6分钟,test:2分钟,total:2h.40m 9 # 训练集集:PASCALVOC-2012 train
10 # 测试集: PASCALVOC-2012 val
将上述细节总结到表中
预训练权重
Resnet50-fpn:在coco数据集上训练,另外两个backbone预训练权重则是在Imagenet1k数据集上训练
resnet50-fpn
inference+NMS time: 0.04609847068786621
loss和lr随epoch变化图
IOU为0.5的map,大概在15轮就就已经饱和了,大概在79%左右
加载训练后的权重,在测试集上对模型进行验证,这里测试集=训练中的验证集
mobilev3-fpn
IOU为0.5的map,大概在15轮就就已经饱和了,大概在56%左右
加载训练后的权重,在测试集上对模型进行验证
resnet50_no_fpn
这里初始lr=0.02,切每7个epcoh更新lr,用的多GPU
IOU为0.5的map,大概在15轮就就已经饱和了,大概在60%左右
对比
利用wandb来记录
Resnet50_no_fpn与Resnet50_fpn对比能够看出利用FPN结构后模型有很大的提升
Resnet50_fpn与MobileV3-fpn对比,可以看出以resnet50作为backbone比以mobilev3效果要好很多
标签:backbone,Resnet50,Faster,训练,fpn,lr,复现,CNN,resnet50 From: https://www.cnblogs.com/zhangjie123/p/17336240.html