Faster R-CNN复现记录

发布时间 2023-04-30 17:40:30作者: call-me-ZJ

实现细节

总共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效果要好很多