SSD复现

发布时间 2023-04-30 15:29:27作者: call-me-ZJ

复现内容

SSD论文在PASCAL VOC2007 test detection results的SSD300的前两行

 不过在论文SSD用的是VGG作为backbone,而我所用代码的backbone则是resnet50,其他方便我尽量与论文一致

SSD框架结构

1 SSD代码采用resnet50(论文中是VGG),到conv4_x后面都丢弃
2 且在conv4_x中block1讲步距改为1,后面的block没有改动
3 在后面的添加层中加了bn层
4 利用nvidia的DALI包,来将图像预处理过程移至GPU中
5 利用混合精度可以加快训练,float16代替float32

复现结果

 1 total param num 
 2 backbone: Resnet50
 3 优化器:optimizer = torch.optim.SGD(params, lr=0.001, momentum=0.9, weight_decay=1e-4)
 4 学习率每几epoch更新一次lr-step-size=5,每次为上次的几倍,gamma=0.3
 5 损失函数=类别损失:nn.CrossEntropyLoss()+边界框损失nn.SmoothL1Loss()
 6 batch=8/多GPU每块batch=2
 7 加载完整预训练权重使用nvidia官方训练的
8 epoch = 30 9 每epoch,train:1m24s,test:,total:1h4m30s | 多GPU,train:1m53s,test:50s,total:1h28m37s
10 数据集:PASCALVOC-2007trainval(5012)/2007trainval+2012trainval(16551)
11 测试集:PASCALVOC-2007test(4952)
12 GPU: NVIDIA GeForce RTX 3070ti(8G) | 4 x Tesla V100(32G)

 07

训练集:PASCALVOC-2007trainval(5012)
测试集:PASCALVOC-2007test(4952)

loss,lr随epoch变化图

 IOU为0.5的map,大概在76%左右

加载训练后的权重,在测试集(2007test)上对模型进行验证

07+12

训练集:2007trainval+2012trainval(16551) 
测试集:PASCALVOC-2007test(4952)

loss,lr随epoch变化图

 IOU为0.5的map,大概在79.6%左右

 

 

加载训练后的权重,在测试集(2007test)上对模型进行验证

07与07+12对比

利用wandb记录模型的训练过程,不同数据集的loss、mAP(IOU=0.5)对比

 可以得出结论:更多的训练集,可以让模型达到更好的效果