论文《基于YOLOv8的驾驶员行为检测算法及其实现》日志, 项目地址:DMS-YOLOv8
该论文整体框架为之前两篇论文的整合:
- 基于通道扩展与注意力机制的YOLOv7驾驶员分心行为检测
CEAM-YOLOv7: Improved YOLOv7 Based on Channel Expansion and Attention Mechanism for Driver Distraction Behavior Detection
项目地址:CEAM-YOLOv7 - 基于面部小目标动态追踪的YOLOv7驾驶员疲劳检测
A Driver Fatigue Detection Algorithm Based on Dynamic Tracking of Small Facial Targets Using YOLOv7
项目地址:FEY-YOLOv7
此外,加入算法部署实现部分,基于实习期间对TDA4的研究:
以下为开发日志(倒叙)
想法:
合并分心与疲劳检测算法
202403收尾
尝试部署原红外分心行为
1 | "Danger", |
失败,即使关了图像增强设置,best AP is 38.86
总结部署流程
1 | #运行训练: |
20240313重新部署
重建sk板,edgeai tidl tool 和 edge ai yolox环境 (要注意SK版本和tools版本对应!!!)
1 | git clone https://github.com/TexasInstruments/edgeai-tidl-tools.git |
混合分心与疲劳数据集, 一箭双雕,但是分心没红外
1 | COCO_CLASSES = ( |
202312 分心行为算法
20231207
再换数据集试试,DriverSep 5k
1 | COCO_CLASSES = ( |
模型 | 数据 | 备注 |
---|---|---|
yolox_s_ti_lite6 | mAP=0.211:0.682 total_loss: 0.2 epoch=300 | DriverSep数据集,关了数据增强效果一般 |
yolox_s_ti_lite7 | mAP=0.739:0.971 total_loss: 1.8 epoch=300 | 开了数据增强效果拔群 |
202311 训练并部署模型至SK板
20231127-30 分心行为算法训练
State Farm Distracted Driver Detection 是否要把这个开源数据集加进来?但是视角有点偏
有标注好的:Modified distracted driver dataset(Mdd 5842→1w 12类)(不行,疑似标注方法问题,效果很差)
1 | COCO_CLASSES = ( |
分心行为的标注框要不要调整?
训练:
1 | python -m yolox.tools.train -n yolox-s-ti-lite -d 0 -b 64 --fp16 -o --cache |
模型 | 数据 | 备注 |
---|---|---|
yolox_s_ti_lite0 | mAP=0.68:0.96 total_loss: 2.3 epoch=300 | 仅可见光数据训练 |
yolox_s_ti_lite1 | mAP=0.61:0.94 total_loss: 2.8 epoch=179 | 混合数据集,crop,效果一般 |
yolox_s_ti_lite2 | mAP=0.554:0.928 total_loss: 9.1 epoch=80 | 仅旋转偏移,训练时间长占显存大,loss下降慢 |
yolox_s_ti_lite3 | mAP=0.559:0.915 total_loss: 7.7 epoch=200 | 关闭混合精度,训了两天 用于中期部署展示⭐ |
yolox_s_ti_lite4 | mAP=0.25:0.35 total_loss: 1.2 epoch=280 | 分心数据集3k,效果奇差,可能是少数据 或是yolox自带数据增强 |
yolox_s_ti_lite4_2 | mAP=0.376:0.394 total_loss: 0.6 epoch=300 | 分心数据集3k,去除yolox的数据增强还是不行 |
yolox_s_ti_lite5 | mAP=0.686:0.979 total_loss: 1.6 epoch=300 | Mdd可见光数据集 10k 数据好看但是检测效果不行 部署效果更差 |
20231122 部署疲劳算法以备中期检查
yolox_s_ti_lite3
疲劳检测算法部署已基本搞定,之后搞分心行为
20231120-21 edgeai-yolox重新训练
yolox_s_ti_lite1部署的检测效果一般,可能是可见光+红外数据集使用了crop数据增强方法,而yolox又开了mosaic,导致面部特征被拆分的厉害,使用仅旋转+偏移的数据集重新训练并部署试试 yolox_s_ti_lite2
显存吃太多,取消混合精度训练 删掉 --fp16 -o
python -m yolox.tools.train -n yolox-s-ti-lite -d 0 -b 8 --cache
但是训练很慢
20231117 yolox_s_ti_lite部署成功
再次尝试转换生成的yolox_s_ti_lite0.onnx,模型配置改为:'scale' : [1,1,1]
成功!居然是scale配置错误
1 | input_data.shape (1, 3, 640, 640) |
配置板端文件:
1 | #运行配置文件opt/edgeai-gst-apps/yolo.yaml |
板端运行:
1 | sudo minicom -D /dev/ttyUSB2 -c on |
成功!!
20231116 模型转换,yolox失败,yolov8 & FEY-YOLOX成功
1 | #model_configs.py: |
目前看来,edgeai-yolox训练得到的模型并不能直接转换(虽然它提供的export_onnx.py能导出prototxt) 可以转换,之前是参数配置问题
而modelZoo中的yolox经查应该是由edgeai_benchmark训练得到的,下次尝试
又回去尝试直接转10月训练的yolov8n_4aug(不使用prototxt),转换有输出(output.shape: (1, 25200, 9)
)!!
但是无法直接infer,而且没有prototxtx后期如何部署?可能之后要手搓SK板中的代码
此外FEY-YOLOX也有shape相同的输出,今天进展不错,明天尝试这两个有输出的部署以及edgeai_benchmark yolox的训练
20231115 edgeai-yolox训练
1 | #训练: |
YOLOX模型是ok的,与官方提供的预训练模型结构基本相同
20231113 尝试部署yolov8失败
尝试直接用edgeai-tools转换yolov8模型,失败
可能的原因:转换编译配置、SK板部署参数配置、模型结构不支持/输出不匹配
为排除模型问题,接下来先用yolox尝试
202310 算法变体 YOLOv7 → v8/X
20231031 降级X以便于部署
FEY-YOLOv7 → FEY-YOLOX
参考:用YOLOv5框架YOLOX
FEY-YOLOX也许能直接部署
20231017 升级v8以跟上时代
FEY-YOLOv7 → FEY-YOLOv8
YOLOv8_modules
参考网络结构,用modules搭积木
1 | #YOLOv8.yaml |
主要步骤:
在models/common.py中加入新模块:C2f(注释掉原C2f),并在yolo.py中导入, 用原模块好像也一样;暂未修改检测头和Anchor-free
使用疲劳驾驶数据集检测,效果很好√