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

队伍:AI000048

算法介绍

在本次比赛中,我使用的算法是 YOLOv5。

在初赛中,由于对推理速度没有要求,只要求检测的精度。在选择算法时,我尝试了很 多方案。对于 yolov5s、yolov5m、yolov5l 我都做了对比试验。在不考虑推理速度的情况 下,一般来说,模型越大,检测的精度越高,所以在初赛时我最终选用了 yolov5l,选用了 1280 的尺度,并使用了 Mosaic、Mixup 等一系列的数据增强手段。

在复赛中,由于对推理速度有要求,所以如何在精度和速度之间合理取舍,就成为了复 赛的关键所在。在刚开始时,我尝试了 yolov5l 在不同尺度下的表现,发现模型的精度虽然 可以比较高,但是速度却很慢。在 960 的尺度下,推理速度大约为 400ms,所以总分依旧 不高。所以我又尝试了 yolov5m 和 yolov5s 的模型,m 模型在 960 的尺度下推理速度大 约为 170ms,s 模型在 960 的尺度下推理速度大约为 105ms。相比起来,s 模型的推理速 度最快,后来又尝试了 640 的尺度,推理速度大约在 47ms,提升很大,所以我最终决定选 用 yolov5s 作为复赛的模型。

模型移植

在模型移植的过程中,前期遇到了很多问题。首先是在线下的环境中,配置 SDK,来进 行模型转换和量化,所以起初的环境配置耗费了较大的时间,后来迁移到线上的 TPU 环境 中时,也遇到了几个复杂的问题。卡了比较久的问题如下所示。

1、 推理代码的 Bug 调整。为了验证转换的 JIT 模型是否正确,所以在线下使用时,起

初是用 cpu 在推理,但是官方的 pytorch 推理脚本有几处地方会报错,在进行

Debug 之后,解决了报错,线下推理成功。

2、 SDK 版本差异。线下配置的是 SDK 是 3.0 版本,线上的 SDK 是 2.7 的版本。在使

用官方的 example 例程进行模型转换时,之前一直没注意,直接默认 clone 的 3.0 的版本,导致在转换 bmodel 模型时一直会报错。后来才发现这个问题,修改了版 本,以及重写了 1-genbmodel.sh 后,才转换成功,并且能够成功推理。

3、模型量化时的后缀名问题。在生成 jit 模型之后,默认的后缀名时 torchscript,在 转换 FP32 位的 bmodel 模型时可以直接转换,但是在转换为 INT8 的模型时,使 用 torchscript 的模型就会一直报错。直到反复阅读了官方的手册以及 bilibili 官方 的教学账号之后,发现后缀名不一样,修改尝试后才成功。

4、 量化时收敛问题。在转换 int8 模型时,在使用全部的验证集进行量化时,对于不同 的模型,有时两三个小时就可以量化完成,有时七八个小时也量化不完,这个也是 耽误了比较久的时间。

以上就是在模型移植时主要遇到卡了比较久的问题,别的问题虽然也有,但是细心检查之后 都能解决。

推理优化

推理脚本官方给了原始可用的一个版本。但是在阅读某些细节之后,发现还是有可以改 进的地方。我主要改进了两个地方,如下所示:

1、 前处理改进。在前处理时,代码中有一个保存图片的操作,起初时比较隐蔽,一直 没发现,导致前处理的时间一直很长,大约为 11ms,但是注释掉这行代码之后, 前处理时间大约为 2.4ms,提升了 8ms。

2、 对越界框的处理。在官方例程中,对越界的 bbox 并没有进行处理,所以导致推理 的结果中存在负数坐标,这肯定是异常的,所以我在代码中,对 bbox 的坐标,进 行了 clip,将边界坐标最小限制为 0,提升了模型的检测精度。

3、 用 INT8 的模型进行推理。在转换时,我进行了很多次尝试,主要量化了 s 的模型, 但是 s 由于模型本身比较轻量,量化后速度虽然有提升,但是精度也会损失,提交 后,发现总分并不高,所以放弃了量化的策略。所以量化本身可能比较适合更大的 点的模型,虽然精度有损失,但是速度的提升可能会更大。由于复赛的提交次数有 限,加上量化比较耗费时间,所以也没有做更多的尝试。

总结与展望

在本次比赛中,经过两个月的学习与尝试,成功在国产芯片 TPU 上完成了部署与推理。 平时在学习中,使用的大部分都是 GPU,对于其他的卡由于没有用过,所以没什么概念, 以为跟 GPU 差距还很大,但是在这段时间的尝试中,我的心里是很震惊与激动的,国产的 算力卡现在也可以做到接近甚至超越 GPU 的性能。而且本次的比赛与之前参加的比赛都不 同,重点在于模型的转换与部署,而不是一味的调参,相较其他比赛来说,更具有挑战性和 趣味性。

但是在本次比赛中,前期耗费我最多时间的就是线下的环境配置,其实最关键的原因还 是官方例程的文档写的稍微有点冗余,而且没有讲解清楚目的性。一个好的项目想做到被大 量使用,性能好是一方面,最关键的还是要易部署,所以写一个简洁明了的文档就很关键。

TPU编程竞赛-AI算法创新赛:https://www.sophgo.com/competition/introduction.html?id=2

你可能感兴趣的:(TPU编程竞赛,人工智能,深度学习,计算机视觉,目标检测,竞赛)