挑战杯2023华为产业赛道的命题:疲劳驾驶识别
涉及的知识栈包括:人脸检测,面部关键点识别,序列判断。
对于关键模型,我们做了以下尝试:
-
YOLOv5 + Dlib
-
YOLOv5 + SPIGA
-
YOLOv7 + SPIGA
-
YOLOv7 + Renita(baseline)
-
YOLOv8 + SPIGA
-
YOLOv8 + Renita (last submit)
-
YOLOv5s 的模型在识别精准度和速度上都稍逊于 YOLOv8n
-
YOLOv7 的模型在训练时间上要比v8的相似参数模型长数倍
-
SPIGA 是人脸关键点检测的一个SOTA模型,但显然SOTA的是大数据集上的准确率,而非**准确率/性能。**其单帧平均推理速度在官方要求的硬件(2核8GB的老式cpu)中达到了惊人的 *1.404s per frame(*😓)。最后因其糟糕的边缘部署能力而被淘汰。
仅供参考,在640 x 640下
YOLOv8:230ms per frame
Renita:56ms per frame
- Renita 是官方Baseline提供的模型参考,也是我们最后选用的模型。此模型在遮挡和光照条件并不复杂的车内环境表现良好。 💡 作为参考,在官方硬件下的单平均帧推理速度:
BaselineLandmark/detectionx.2 : 最后一次提交
submit/detection8:YOLOv8 + SPIGA的最后一版
BaselineLandmark/makeup : Retina + YOLOv8的调试脚本
为什么主程序的主要代码都是一坨?你完全不封装吗?
- 为什么其中主程序为了与贴近baseline的提交格式,且便于调优,并没有作封装处理。(虽然结构几乎一致,但主程序在编写时完全没有参考baseline,以至于最开始作移植的同学挠破了头)
- 并且整个项目都是单人编程和线性作业,每个人的分工区域足够清晰,因此并不需要考虑别人能不能读懂,大家都没那个时间和精力
成绩如何?
比赛通过对F1-Score(精准率)与速度进行统一衡量。在人脸关键点部分,通过运用序列的模式识别,我们已经做到了应检尽检。
比赛的难点有哪些?
- 数据集的大小有点夸张了(2066 * 8s 的视频序列)
- 华为云ModelArts的在线部署功能(打榜需要通过此方法提交)的文档应缺尽缺,主打一个什么都没有。选手在稳定提交之前还要先逆向工程出其运作流程 😓