最近因为工作原因系统地摸了一下目标检测,也在生产环境部署了一波。公司的数据当然是不能放出来的,记录一些心得帮后来人少走弯路吧。
结论放在最前:在torchvision官方的预训练模型里,fasterrcnn/maskrcnn指标比fcos更高,但在本文进行的所有实验中fcos显著强于其他模型,目前达到的效果:考虑类别的mAP 0.535,不考虑类别0.636。
实验说明:以下结论依赖公司内部训练数据,测试结果套用COCO API取得,报告mAP为mAP50(即预测和groundtruth的IoU匹配阈值取0.5),并非mAP50:95。我司使用的数据比COCO大很多也难很多,所以指标绝对值参考意义不大,看相对提升即可。
- 模型设计
a. 骨干网络
i. 骨干网络性能越强越好- resnext > resnet > mobilenet。从论文看ViT > CNN,但我没有尝试。
- resnext50_32x4d效果优于resnet50,收敛也更快,可以无缝替换。mAP可以提升3pt左右。
ii. 预训练模型能极大加快收敛。
iii. 使用预训练模型时,冻结底层参数,相比完全放开效果更好。 - 以resnet50为例,一般冻结5个阶段中的前2个。
b. 检测头,性能由弱到强,每一个改进都能大幅提升mAP
i. 初版仿yolo v1方案:无fpn,骨干网络接一层卷积,mAP~0.06
ii. faster rcnn原始设计:采用fpn,rpn head一层卷积,roi head两层mlp。mAP提升约8pt(0.06->0.14&#x