AI算法创新赛-人车目标检测竞赛总结05

队伍:AI0000043

1. 算法方案

由于赛题同时要求速度和精度,所以我们优先考虑小模型,在保证模型速度的同时通过模型调优稳 定提升模型精度。此外,由于图片分辨率比较大,且数据集中小目标占比高,我们计划使用更大的图片 尺寸输入,这就要求网络具有更大的感受野,所以我们使用yolov5s6而不是yolov5s作为我们的 baseline。

同时,为了稳步提升模型性能,我们在使用一些通用tricks的同时,例如coco数据集的预训练权 重,多尺度训练,模型平均以及同步BN,还使用了大量的数据增强来进一步增强网络的泛化性,使用的 数据增强包括RandomFlip、Mosaic、Mixup、Cutout、Blur和ToGray,整体方案如下:

  • Yolov5 s6 + 4head 
  • 大量数据增强(randomflip、mosaic、mixup、cutout、albu库等) img size896 + multi-scale training
  • 300epochs训练周期
  • int8模型量化

2. 模型移植

我们在模型移植方面进行了大量的尝试以及实验,整体思路是在保持或是较小影响模型性能的同时,尽 可能提升模型推理速度,技术路线分为Pytorch2Fp32bmodel和Pytorch2Int8bmodel

Pytorch→FP32bmodel

由于我们使用的是s6模型,输出个数、锚框尺寸以及下采样倍数与主办方提供的s模型不同,所以我们需 要修改推理脚本中的anchor generator来适配,最终模型的输出结果与pt输出结果基本一致,且速度相 较于jit模型推理有显著提升。

Pytorch→Int8bmodel

我们通过模型量化来进一步提升模型的推理速度。在量化过程中,我们也碰到了一些问题。首先是量化 时间过长。通常来说,量化数据集图片数量多的话,量化的精度损失也会下降,我们在实验中发现,使 用所有数据集(训练集+val_a+val_b)需要超过20h的量化耗时,使用验证集(val_a+val_b)需要大概 10~20h的量化耗时,使用val_b能够将量化用时控制在10h以内。为了解决量化时间过长的问题,我们最 终只将b榜验证集作为我们的量化数据集,专注于降低模型在b榜数据集上的量化误差。第二个问题是量 化后模型精度下降过大,考虑到网络某些层由于作用明显,不适合int8量化,所以在实际量化过程中, 由于网络检测头的卷积输出坐标以及得分等关键信息,我们对其使用fp32单独量化。此外,由于一键量 化工具会自动进行量化策略搜索,但对同一模型搜索路线是相同的,所以我们通过使用一键量化工具量 化多个模型取最优来保证量化后的模型性能。最后,我们还进行了其它尝试,比如将模型量化的误差指 标由feature_similarity更换为detect_accuracy,在分步量化时通过calibration_use_pb命令行添加- th_method指定计算各个层量化阈值的方法。最终我们量化后的模型在推理速度上相较于fp32的模型能 够提升22ms,虽然AP50有所下降,但是最终得分还是得到了显著提高。

3. 模型推理

在模型推理的优化上,我们的策略如下:

  • 改进NMS
  • 优化后处理,裁剪越界框
  • 进行尺度实验,权衡模型的速度和精度

在具体实验中,我们观察到原有的nms实现太耗时,我们尝试使用nms变种进行替换,在尝试过 fast_nms等nms变种后,我们最终引入torchvision.ops.nms来替换原本的nms,改进的nms能在保持 模型精度的同时,提升模型推理速度10ms。此外,原有的推理脚本未对越界框进行处理,使得模型的输 出结果中包含许多跨出边界的检测框,我们将这些跨出边界的检测框限制在图像尺寸内,这个操作能够 在不影响推理速度的同时,提升AP50大约0.5个点。最后,我们还进行了大量的尺度实验来权衡速度和 精度,包括960尺度训练(960尺度推理)、960尺度训练(896尺度推理)、896尺度训练(896尺度推 理)等,最终使用方案896尺度训练(896尺度推理)

4. 参赛感悟与建议

由于时间原因,模型还有更多的优化空间,我们未来考虑从以下三方面来进行优化:

  • 模型训练优化:在同等模型大小下,通过一些训练技巧,模型精度还能得到进一步的提升
  • 模型量化优化:Int8量化后的模型精度有所下降,可以尝试更多的优化策略来减少精度的损失,从 而进一步提升模型的性能
  • 推理过程优化:多batch size推理,多卡多线程推理

在这里,也感谢算能平台提供的机会以及资源,让我们对TPU有了进一步的了解。在有限的比赛时间 内,我们也发现了一些问题,比如说明文档的不完善,在比赛过程中,我们有考虑使用多卡多线程推 理,但是在阅读过平台相关的说明文档后,发现这方面的资料稀少且表述不清晰,所以最终也没有成功 实现,另外就是推理脚本的不完善,在比赛过程中,我们通过优化推理脚本就显著提高了模型的推理速 度,模型的推理脚本仍有很大的优化空间。最终衷心祝愿算能平台能发挥自身优势,越来越好。

你可能感兴趣的:(TPU编程竞赛,人工智能,目标检测,算法,竞赛,编程)