本文基于YOLOv5模型,采用10420张不同驾驶员开车时闭眼、打哈欠、接打电话、左顾右盼等驾驶行为的图片作为数据集,对YOLOv5模型进行了训练。将驾驶员的驾驶行为分为正常驾驶(Normal)、闭眼(CloseEyes)、打哈欠(Yawn)、左手打电话(LeftCall)、右手打电话(RightCall)、向左看(LookLeft)、向右看(LookRight)、向上看(LookUp)、向下看(LookDown)九个类别,对图片进行了标注和训练,数据集示例及训练结果如下所示。
基于YOLOv5的疲劳分神驾驶自动检测
接下来就开始介绍具体的实现过程。本项目使用的数据集在获得授权之后将会在评论区分享给大家,数据集为10420张不同驾驶行为的图片,本人已经进行标注。具体的标注和训练过程可以参考本人的另一篇博客手把手教你用yolov5训练一个王者荣耀目标检测(最新详细教程)。本文主要介绍利用YOLOv5-master进行训练和之前YOLOv5的区别,以及如何在AutoDL云端部署。
把数据集准备好之后,划分好训练集和验证集。将VOCdevkit文件夹放在yolov5-master文件夹下,将data文件夹下的的coco.yaml文件复制一个副本,命名为自己项目的名字,我这里命名为jbgs.yaml,修改文件中的如下内容:
path后面的文件路径改为:./VOCdevkit,train的路径改为:images/train,val的路径改为:images/val,注释掉test,names后面的类别改为自己的分类名字,删除多余的类别,如下图所示。之后打开models文件夹,将yolov5s.yaml文件复制一份,修改成自己项目的名字,我这里改为jbgs.yaml,把nc后面的数字修改成自己的类别总数,我这里是9。
修改好之后打开train.py,修改如下代码: 1.cfg默认路径,2.data默认路径,修改之后如下面第二幅图所示。
准备工作至此已经做完,接下来将整个yolov5-master文件夹打包成'.zip'后缀的压缩包,后面将介绍如何在云端部署已经训练。
进入AutoDL官网的算力市场,租一个3090的显卡,在基础镜像进行如下设置之后点击立即创建。创建好之后在容器实例里面找到刚刚创建的实例,进入JupyterLab。
在JupyterLab里面上传我们之前打包好的yolov5-master压缩包,根据网速的不同,上传需要不同的时间,下面会有进度条显示,上传完成之后会有提示。上传完成之后,打开终端,输入如下代码进行解压:unzip yolov5-master.zip。 接下来输入conda init进行初始化,然后重新打开终端,输入cd yolov5-master切换工作目录到yolov5-master,之后输入pip install -r requirement.txt,安装yolo训练所依赖的库。
最后输入python train.py,即可进行训练。这个过程需要下载一个Arial.ttf字体,如果网速较慢下载不下来可以自己手动下载,之后把它移动到对应的位置即可。Arial.ttf我会一并分享给大家。下载之后拖动到yolov5-master,在终端输入mv Arial.ttf /root/.config/Ultralytics/,将字体包移动到对应位置,之后再运行python train.py即可开始训练。
训练完成之后的推理跟在本地是一样的,修改对应的代码,在终端输入python detect.py即可(参考本人上面提到的那篇博客)。最后我们可以将整个训练完之后的yolov5-master文件夹打包下载下来,在本地进行推理工作,也可以单独把权重文件下载下来进行推理。